xref: /aosp_15_r20/external/pytorch/.ci/docker/common/install_xpu.sh (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1#!/bin/bash
2set -xe
3# Script used in CI and CD pipeline
4
5# Intel® software for general purpose GPU capabilities.
6# Refer to https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpus.html
7
8# Users should update to the latest version as it becomes available
9
10function install_ubuntu() {
11    . /etc/os-release
12    if [[ ! " jammy " =~ " ${VERSION_CODENAME} " ]]; then
13        echo "Ubuntu version ${VERSION_CODENAME} not supported"
14        exit
15    fi
16
17    apt-get update -y
18    apt-get install -y gpg-agent wget
19    # To add the online network package repository for the GPU Driver
20    wget -qO - https://repositories.intel.com/gpu/intel-graphics.key \
21        | gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg
22    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] \
23        https://repositories.intel.com/gpu/ubuntu ${VERSION_CODENAME}${XPU_DRIVER_VERSION} unified" \
24        | tee /etc/apt/sources.list.d/intel-gpu-${VERSION_CODENAME}.list
25    # To add the online network network package repository for the Intel Support Packages
26    wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
27        | gpg --dearmor > /usr/share/keyrings/intel-for-pytorch-gpu-dev-keyring.gpg
28    echo "deb [signed-by=/usr/share/keyrings/intel-for-pytorch-gpu-dev-keyring.gpg] \
29        https://apt.repos.intel.com/intel-for-pytorch-gpu-dev all main" \
30        | tee /etc/apt/sources.list.d/intel-for-pytorch-gpu-dev.list
31
32    # Update the packages list and repository index
33    apt-get update
34
35    # The xpu-smi packages
36    apt-get install -y flex bison xpu-smi
37    # Compute and Media Runtimes
38    apt-get install -y \
39        intel-opencl-icd intel-level-zero-gpu level-zero \
40        intel-media-va-driver-non-free libmfx1 libmfxgen1 libvpl2 \
41        libegl-mesa0 libegl1-mesa libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri \
42        libglapi-mesa libgles2-mesa-dev libglx-mesa0 libigdgmm12 libxatracker2 mesa-va-drivers \
43        mesa-vdpau-drivers mesa-vulkan-drivers va-driver-all vainfo hwinfo clinfo
44    # Development Packages
45    apt-get install -y libigc-dev intel-igc-cm libigdfcl-dev libigfxcmrt-dev level-zero-dev
46    # Install Intel Support Packages
47    if [ -n "$XPU_VERSION" ]; then
48        apt-get install -y intel-for-pytorch-gpu-dev-${XPU_VERSION} intel-pti-dev
49    else
50        apt-get install -y intel-for-pytorch-gpu-dev intel-pti-dev
51    fi
52
53    # Cleanup
54    apt-get autoclean && apt-get clean
55    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
56}
57
58function install_rhel() {
59    . /etc/os-release
60    if [[ "${ID}" == "rhel" ]]; then
61        if [[ ! " 8.6 8.8 8.9 9.0 9.2 9.3 " =~ " ${VERSION_ID} " ]]; then
62            echo "RHEL version ${VERSION_ID} not supported"
63            exit
64        fi
65    elif [[ "${ID}" == "almalinux" ]]; then
66        # Workaround for almalinux8 which used by quay.io/pypa/manylinux_2_28_x86_64
67        VERSION_ID="8.6"
68    fi
69
70    dnf install -y 'dnf-command(config-manager)'
71    # To add the online network package repository for the GPU Driver
72    dnf config-manager --add-repo \
73        https://repositories.intel.com/gpu/rhel/${VERSION_ID}${XPU_DRIVER_VERSION}/unified/intel-gpu-${VERSION_ID}.repo
74    # To add the online network network package repository for the Intel Support Packages
75    tee > /etc/yum.repos.d/intel-for-pytorch-gpu-dev.repo << EOF
76[intel-for-pytorch-gpu-dev]
77name=Intel for Pytorch GPU dev repository
78baseurl=https://yum.repos.intel.com/intel-for-pytorch-gpu-dev
79enabled=1
80gpgcheck=1
81repo_gpgcheck=1
82gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
83EOF
84
85    # The xpu-smi packages
86    dnf install -y xpu-smi
87    # Compute and Media Runtimes
88    dnf install --skip-broken -y \
89        intel-opencl intel-media intel-mediasdk libmfxgen1 libvpl2\
90        level-zero intel-level-zero-gpu mesa-dri-drivers mesa-vulkan-drivers \
91        mesa-vdpau-drivers libdrm mesa-libEGL mesa-libgbm mesa-libGL \
92        mesa-libxatracker libvpl-tools intel-metrics-discovery \
93        intel-metrics-library intel-igc-core intel-igc-cm \
94        libva libva-utils intel-gmmlib libmetee intel-gsc intel-ocloc
95    # Development packages
96    dnf install -y --refresh \
97        intel-igc-opencl-devel level-zero-devel intel-gsc-devel libmetee-devel \
98        level-zero-devel
99    # Install Intel Support Packages
100    yum install -y intel-for-pytorch-gpu-dev intel-pti-dev
101
102    # Cleanup
103    dnf clean all
104    rm -rf /var/cache/yum
105    rm -rf /var/lib/yum/yumdb
106    rm -rf /var/lib/yum/history
107}
108
109function install_sles() {
110    . /etc/os-release
111    VERSION_SP=${VERSION_ID//./sp}
112    if [[ ! " 15sp4 15sp5 " =~ " ${VERSION_SP} " ]]; then
113        echo "SLES version ${VERSION_ID} not supported"
114        exit
115    fi
116
117    # To add the online network package repository for the GPU Driver
118    zypper addrepo -f -r \
119        https://repositories.intel.com/gpu/sles/${VERSION_SP}${XPU_DRIVER_VERSION}/unified/intel-gpu-${VERSION_SP}.repo
120    rpm --import https://repositories.intel.com/gpu/intel-graphics.key
121    # To add the online network network package repository for the Intel Support Packages
122    zypper addrepo https://yum.repos.intel.com/intel-for-pytorch-gpu-dev intel-for-pytorch-gpu-dev
123    rpm --import https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
124
125    # The xpu-smi packages
126    zypper install -y lsb-release flex bison xpu-smi
127    # Compute and Media Runtimes
128    zypper install -y intel-level-zero-gpu level-zero intel-gsc intel-opencl intel-ocloc \
129        intel-media-driver libigfxcmrt7 libvpl2 libvpl-tools libmfxgen1 libmfx1
130    # Development packages
131    zypper install -y libigdfcl-devel intel-igc-cm libigfxcmrt-devel level-zero-devel
132
133    # Install Intel Support Packages
134    zypper install -y intel-for-pytorch-gpu-dev intel-pti-dev
135
136}
137
138# Default use GPU driver LTS releases
139XPU_DRIVER_VERSION="/lts/2350"
140if [[ "${XPU_DRIVER_TYPE,,}" == "rolling" ]]; then
141    # Use GPU driver rolling releases
142    XPU_DRIVER_VERSION=""
143fi
144
145# The installation depends on the base OS
146ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
147case "$ID" in
148    ubuntu)
149        install_ubuntu
150    ;;
151    rhel|almalinux)
152        install_rhel
153    ;;
154    sles)
155        install_sles
156    ;;
157    *)
158        echo "Unable to determine OS..."
159        exit 1
160    ;;
161esac
162