diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 2db15cf80f3..ff455e25c89 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -67,7 +67,10 @@ if(LINUX) if(ENABLE_INTEL_MYRIAD) list(APPEND install_dependencies_files install_NCS_udev_rules.sh) endif() - + if(ENABLE_INTEL_GPU) + list(APPEND install_dependencies_files install_NEO_OCL_driver.sh) + endif() + foreach(install_dependencies_file IN LISTS install_dependencies_files) install(PROGRAMS "${CMAKE_CURRENT_SOURCE_DIR}/install_dependencies/${install_dependencies_file}" DESTINATION install_dependencies/ diff --git a/scripts/install_dependencies/install_NEO_OCL_driver.sh b/scripts/install_dependencies/install_NEO_OCL_driver.sh new file mode 100755 index 00000000000..f1b98fdba61 --- /dev/null +++ b/scripts/install_dependencies/install_NEO_OCL_driver.sh @@ -0,0 +1,483 @@ +#!/bin/bash + +# Copyright (C) 2018-2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +# +# Installs the Intel® Graphics Compute Runtime for oneAPI Level Zero and OpenCL™ Driver on Linux. +# +# Usage: sudo -E ./install_NEO_OCL_driver.sh +# +# Supported platforms: +# 6th-11th generation Intel® Core™ processor with Intel(R) +# Processor Graphics Technology not previously disabled by the BIOS +# or motherboard settings +# +EXIT_FAILURE=1 +EXIT_WRONG_ARG=2 +RHEL_VERSION= +UBUNTU_VERSION= +DISTRO= +SCRIPT_DIR="$( cd "$( dirname "$(realpath "${BASH_SOURCE[0]}")" )" >/dev/null 2>&1 && pwd )" +INSTALL_DRIVER_VERSION='unknown' + + +print_help() +{ + # Display Help + usage="Usage: $(basename "$0") [OPTIONS]... +Download and installs the Intel® Graphics Compute Runtime for oneAPI Level Zero and OpenCL™ Driver on Linux + + Available options: + -y Replace the currently installed driver with the newer version. + --no_numa Skip installing NUMA packages. (off) + -h, --help Display this help and exit" + echo "$usage" +} + +while [[ $# -gt 0 ]] +do + key="$1" + case $key in + -d|--install_driver) + echo "WARNING: This option is deprecated. Recommended driver for current platform will be installed." + shift + shift + ;; + -y) + agreement=true + shift + ;; + -a|--auto) + echo "WARNING: This option is deprecated. Recommended driver for current platform will be installed." + shift + ;; + --no_numa) + no_numa=true + shift + ;; + -h|--help) + print_help + exit + ;; + *) + echo "$(basename "$0"): invalid option -- '${key}'" + echo "Try '$(basename "$0") --help' for more information." + exit $EXIT_WRONG_ARG + esac +done + +_install_prerequisites_redhat() +{ + # yum doesn't accept timeout in seconds as parameter + echo + echo "Note: if yum becomes non-responsive, try aborting the script and run:" + echo " sudo -E $0" + echo + CMDS=("dnf install -y 'dnf-command(config-manager)'" + "dnf config-manager --add-repo \ + https://repositories.intel.com/graphics/rhel/8.5/intel-graphics.repo") + + for cmd in "${CMDS[@]}"; do + echo "$cmd" + eval "$cmd" + if [[ $? -ne 0 ]]; then + echo "ERROR: failed to run $cmd" >&2 + echo "Problem (or disk space)?" >&2 + echo ". Verify that you have enough disk space, and run the script again." >&2 + exit $EXIT_FAILURE + fi + done +} + +_install_prerequisites_ubuntu() +{ + apt-get update + apt-get install -y gpg-agent + curl https://repositories.intel.com/graphics/intel-graphics.key |gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpg + echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/graphics/ubuntu focal-legacy main' | tee /etc/apt/sources.list.d/intel.gpu.focal.list + apt-get update + if [ "$no_numa" == true ]; then + CMDS=("apt-get -y install --no-install-recommends ocl-icd-libopencl1") + else + CMDS=("apt-get -y install --no-install-recommends libnuma1 ocl-icd-libopencl1") + fi + + for cmd in "${CMDS[@]}"; do + echo "$cmd" + eval "$cmd" + if [[ $? -ne 0 ]]; then + echo "ERROR: failed to run $cmd" >&2 + echo "Problem (or disk space)?" >&2 + echo " sudo -E $0" >&2 + echo "2. Verify that you have enough disk space, and run the script again." >&2 + exit $EXIT_FAILURE + fi + done +} + +install_prerequisites() +{ + echo 'Installing prerequisites...' + if [[ $DISTRO == "redhat" ]]; then + _install_prerequisites_redhat + elif [[ $DISTRO == "ubuntu" ]]; then + _install_prerequisites_ubuntu + else + echo 'WARNING::install_prerequisites: Unknown OS' + fi +} + +_deploy_rpm() +{ + cmd="rpm $IGFX_RPM_FLAGS -ivh --nodeps --force $1" + echo "$cmd" + eval "$cmd" +} + +_deploy_deb() +{ + cmd="dpkg -i $1" + echo "$cmd" + eval "$cmd" +} + +_install_user_mode_redhat() +{ + + CMDS=("rpm -ivh https://vault.centos.org/centos/8/AppStream/x86_64/os/Packages/mesa-filesystem-21.1.5-1.el8.x86_64.rpm" \ + "dnf install --refresh -y \ + intel-opencl-22.28.23726.1-i419.el8.x86_64 intel-media intel-mediasdk libmfxgen1 libvpl2 \ + level-zero intel-level-zero-gpu \ + intel-metrics-library intel-igc-core intel-igc-cm \ + libva libva-utils intel-gmmlib" \ + "rpm -ivh http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/ocl-icd-2.2.12-1.el8.x86_64.rpm" ) + + for cmd in "${CMDS[@]}"; do + echo "$cmd" + eval "$cmd" + if [[ $? -ne 0 ]]; then + echo "ERROR: failed to run $cmd" >&2 + echo "Problem (or disk space)?" >&2 + echo " sudo -E $0" >&2 + echo "Verify that you have enough disk space, and run the script again." >&2 + exit $EXIT_FAILURE + fi + done +} + +_install_user_mode_ubuntu() +{ + find . -name "intel*.deb" -exec dpkg -i {} \; + if [[ $? -ne 0 ]]; then + echo "ERROR: failed to install debs $cmd error" >&2 + echo "Make sure you have enough disk space or fix the problem manually and try again." >&2 + exit $EXIT_FAILURE + fi +} + + +install_user_mode() +{ + echo "Installing user mode driver..." + + if [[ $DISTRO == "redhat" ]]; then + _install_user_mode_redhat + else + _install_user_mode_ubuntu + fi + # exit from $SCRIPT_DIR/neo folder + cd - || exit + # clean it up + rm -rf "$SCRIPT_DIR/neo" +} + +_uninstall_user_mode_redhat() +{ + echo Looking for previously installed user-mode driver... + PACKAGES=("intel-opencl" + "intel-ocloc" + "intel-gmmlib" + "intel-igc-core" + "intel-igc-opencl") + for package in "${PACKAGES[@]}"; do + echo "rpm -qa | grep $package" + found_package=$(rpm -qa | grep "$package") + if [[ $? -eq 0 ]]; then + echo "Found installed user-mode driver, performing uninstall..." + cmd="rpm -e --nodeps ${found_package}" + echo "$cmd" + eval "$cmd" + if [[ $? -ne 0 ]]; then + echo "ERROR: failed to uninstall existing user-mode driver." >&2 + echo "Please try again manually and run the script again." >&2 + exit $EXIT_FAILURE + fi + fi + done +} + +_uninstall_user_mode_ubuntu() +{ + echo Looking for previously installed user-mode driver... + + PACKAGES=("intel-opencl" + "intel-opencl-icd" + "intel-ocloc" + "intel-gmmlib" + "intel-igc-core" + "intel-igc-opencl") + + for package in "${PACKAGES[@]}"; do + found_package=$(dpkg-query -W -f='${binary:Package}\n' "${package}") + if [[ $? -eq 0 ]]; then + echo "Found installed user-mode driver, performing uninstall..." + cmd="apt-get autoremove -y $package" + echo "$cmd" + eval "$cmd" + if [[ $? -ne 0 ]]; then + echo "ERROR: failed to uninstall existing user-mode driver." >&2 + echo "Please try again manually and run the script again." >&2 + exit $EXIT_FAILURE + fi + fi + done +} + +uninstall_user_mode() +{ + if [[ $DISTRO == "redhat" ]]; then + _uninstall_user_mode_redhat + else + _uninstall_user_mode_ubuntu + fi +} + +_get_packages_ubuntu() +{ + case $INSTALL_DRIVER_VERSION in + "21.38.21026") + curl -L -O https://github.com/intel/compute-runtime/releases/download/21.38.21026/intel-gmmlib_21.2.1_amd64.deb + curl -L -O https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.8708/intel-igc-core_1.0.8708_amd64.deb + curl -L -O https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.8708/intel-igc-opencl_1.0.8708_amd64.deb + curl -L -O https://github.com/intel/compute-runtime/releases/download/21.38.21026/intel-opencl_21.38.21026_amd64.deb + curl -L -O https://github.com/intel/compute-runtime/releases/download/21.38.21026/intel-ocloc_21.38.21026_amd64.deb + curl -L -O https://github.com/intel/compute-runtime/releases/download/21.38.21026/intel-level-zero-gpu_1.2.21026_amd64.deb + ;; + "21.48.21782") + curl -L -O https://github.com/intel/compute-runtime/releases/download/21.48.21782/intel-gmmlib_21.3.3_amd64.deb + curl -L -O https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.9441/intel-igc-core_1.0.9441_amd64.deb + curl -L -O https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.9441/intel-igc-opencl_1.0.9441_amd64.deb + curl -L -O https://github.com/intel/compute-runtime/releases/download/21.48.21782/intel-opencl-icd_21.48.21782_amd64.deb + curl -L -O https://github.com/intel/compute-runtime/releases/download/21.48.21782/intel-level-zero-gpu_1.2.21782_amd64.deb + ;; + "22.35.24055") + apt-get install -y \ + intel-opencl-icd=22.35.24055+i815~u20.04 \ + intel-level-zero-gpu=1.3.24055+i815~u20.04 \ + level-zero=1.8.5+i815~u20.04 + ;; + *) + echo "ERROR: Unrecognized driver ${INSTALL_DRIVER_VERSION}." + exit $EXIT_WRONG_ARG + esac +} + +_verify_checksum_ubuntu() +{ + case $INSTALL_DRIVER_VERSION in + "21.38.21026") + curl -L -O https://github.com/intel/compute-runtime/releases/download/21.38.21026/ww38.sum + sha256sum -c ww38.sum + ;; + "21.48.21782") + curl -L -O https://github.com/intel/compute-runtime/releases/download/21.48.21782/ww48.sum + sha256sum -c ww48.sum + ;; + "22.35.24055") + echo "Verification by apt" + ;; + *) + echo "ERROR: Unrecognized driver ${INSTALL_DRIVER_VERSION}." + exit $EXIT_WRONG_ARG + esac +} + +verify_checksum() +{ + if [[ $DISTRO == "redhat" ]]; then + return 0 + else + _verify_checksum_ubuntu + fi +} + +get_packages() +{ + mkdir -p "$SCRIPT_DIR/neo" + cd "$SCRIPT_DIR/neo" || exit + + if [[ $DISTRO == "redhat" ]]; then + return 0 + else + _get_packages_ubuntu + fi + verify_checksum + if [[ $? -ne 0 ]]; then + echo "ERROR: checksums do not match for the downloaded packages" + echo " Please verify your Internet connection and make sure you have enough disk space or fix the problem manually and try again. " + exit $EXIT_FAILURE + fi +} + + +version_gt() { + # check if first version is greater than second version + test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; +} + +summary() +{ + echo + echo "Installation completed successfully." + echo + echo "Next steps:" + echo "Add OpenCL users to the video and render group: 'sudo usermod -a -G video,render USERNAME'" + echo " e.g. if the user running OpenCL host applications is foo, run: sudo usermod -a -G video,render foo" + echo " Current user has been already added to the video and render group" + echo + + echo "If you use 8th Generation Intel® Core™ processor, add:" + echo " i915.alpha_support=1" + echo " to the 4.14 kernel command line, in order to enable OpenCL functionality for this platform." + echo +} + +check_root_access() +{ + if [[ $EUID -ne 0 ]]; then + echo "ERROR: you must run this script as root." >&2 + echo "Please try again with \"sudo -E $0\", or as root." >&2 + exit $EXIT_FAILURE + fi +} + +add_user_to_video_group() +{ + local real_user + real_user=$(logname 2>/dev/null || echo "${SUDO_USER:-${USER}}") + echo + echo "Adding $real_user to the video group..." + usermod -a -G video "$real_user" + if [[ $? -ne 0 ]]; then + echo "WARNING: unable to add $real_user to the video group" >&2 + fi + echo "Adding $real_user to the render group..." + usermod -a -G render "$real_user" + if [[ $? -ne 0 ]]; then + echo "WARNING: unable to add $real_user to the render group" >&2 + fi +} + +_check_distro_version() +{ + if [[ $DISTRO == redhat ]]; then + RHEL_MINOR_VERSION_SUPPORTED="[3-7]" + RHEL_VERSION=$(grep -m1 'VERSION_ID' /etc/os-release | grep -Eo "8.${RHEL_MINOR_VERSION_SUPPORTED}") + if [[ $? -ne 0 ]]; then + echo "Warning: This runtime can be installed only on RHEL 8.3 up to RHEL 8.7" + echo "More info https://dgpu-docs.intel.com/releases/releases-20211130.html" >&2 + echo "Installation of Intel® Graphics Compute Runtime for oneAPI Level Zero and OpenCL™ Driver interrupted" + exit $EXIT_FAILURE + else + INSTALL_DRIVER_VERSION='22.28.23726' + fi + elif [[ $DISTRO == ubuntu ]]; then + UBUNTU_VERSION=$(grep -m1 'VERSION_ID' /etc/os-release | grep -Eo "[0-9]{2}.[0-9]{2}") + if [[ $UBUNTU_VERSION == '18.04' ]]; then + INSTALL_DRIVER_VERSION='21.38.21026' + elif [[ $UBUNTU_VERSION == '20.04' ]]; then + INSTALL_DRIVER_VERSION='22.35.24055' + else + echo "Warning: This runtime can be installed only on Ubuntu 18.04 or Ubuntu 20.04." + echo "More info https://github.com/intel/compute-runtime/releases" >&2 + echo "Installation of Intel® Graphics Compute Runtime for oneAPI Level Zero and OpenCL™ Driver interrupted" + exit $EXIT_FAILURE + fi + fi +} + +distro_init() +{ + if [[ -f /etc/redhat-release ]]; then + DISTRO="redhat" + elif [[ -f /etc/lsb-release ]]; then + DISTRO="ubuntu" + fi + + _check_distro_version +} + +check_agreement() +{ + if [ "$agreement" == true ]; then + return 0 + fi + + echo "This script will download and install Intel® Graphics Compute Runtime for oneAPI Level Zero and OpenCL™ Driver $INSTALL_DRIVER_VERSION, " + echo "that was used to validate this OpenVINO™ package." + echo "In case if you already have the driver - script will try to remove it." + while true; do + read -p "Want to proceed? (y/n): " yn + case $yn in + [Yy]*) return 0 ;; + [Nn]*) exit $EXIT_FAILURE ;; + esac + done +} + +check_current_driver() +{ + echo "Checking current driver version..." + if [[ $DISTRO == redhat ]]; then + gfx_version=$(yum info intel-opencl | grep Version) + elif [[ $DISTRO == ubuntu ]]; then + gfx_version=$(dpkg-query --showformat='${Version}' --show intel-opencl) + if [[ -z "$gfx_version" ]]; then + gfx_version=$(dpkg-query --showformat='${Version}' --show intel-opencl-icd) + fi + fi + + gfx_version="$(echo -e "${gfx_version}" | grep -Eo "[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{3,6}")" + + # install NEO OCL driver if the current driver version < INSTALL_DRIVER_VERSION + if [[ ! -z $gfx_version && "$(printf '%s\n' "$INSTALL_DRIVER_VERSION" "$gfx_version" | sort -V | head -n 1)" = "$INSTALL_DRIVER_VERSION" ]]; then + echo "Intel® Graphics Compute Runtime for oneAPI Level Zero and OpenCL™ Driver installation skipped because current version greater or equal to $INSTALL_DRIVER_VERSION" >&2 + echo "Installation of Intel® Graphics Compute Runtime for oneAPI Level Zero and OpenCL™ Driver interrupted." >&2 + exit $EXIT_FAILURE + else + echo "Starting installation..." + fi +} + +install() +{ + uninstall_user_mode + install_prerequisites + get_packages + install_user_mode + add_user_to_video_group +} + +main() +{ + echo "Intel® Graphics Compute Runtime for oneAPI Level Zero and OpenCL™ Driver installer" + distro_init + check_root_access + check_current_driver + check_agreement + install + summary +} + +[[ "$0" == "${BASH_SOURCE[0]}" ]] && main "$@" diff --git a/tools/deployment_manager/configs/linux.json b/tools/deployment_manager/configs/linux.json index 6b6580e76c5..dc98fed000d 100644 --- a/tools/deployment_manager/configs/linux.json +++ b/tools/deployment_manager/configs/linux.json @@ -60,6 +60,7 @@ "dependencies" : ["ie_core"], "files": [ "runtime/lib/intel64/cache.json", + "install_dependencies/install_NEO_OCL_driver.sh", "runtime/lib/intel64/libopenvino_intel_gpu_plugin.so" ] },