xref: /aosp_15_r20/external/pytorch/.ci/docker/common/install_rocm.sh (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1#!/bin/bash
2
3set -ex
4
5ver() {
6    printf "%3d%03d%03d%03d" $(echo "$1" | tr '.' ' ');
7}
8
9install_ubuntu() {
10    apt-get update
11    if [[ $UBUNTU_VERSION == 18.04 ]]; then
12      # gpg-agent is not available by default on 18.04
13      apt-get install -y --no-install-recommends gpg-agent
14    fi
15    if [[ $UBUNTU_VERSION == 20.04 ]]; then
16      # gpg-agent is not available by default on 20.04
17      apt-get install -y --no-install-recommends gpg-agent
18    fi
19    apt-get install -y kmod
20    apt-get install -y wget
21
22    # Need the libc++1 and libc++abi1 libraries to allow torch._C to load at runtime
23    apt-get install -y libc++1
24    apt-get install -y libc++abi1
25
26    # Add amdgpu repository
27    UBUNTU_VERSION_NAME=`cat /etc/os-release | grep UBUNTU_CODENAME | awk -F= '{print $2}'`
28    echo "deb [arch=amd64] https://repo.radeon.com/amdgpu/${ROCM_VERSION}/ubuntu ${UBUNTU_VERSION_NAME} main" > /etc/apt/sources.list.d/amdgpu.list
29
30    # Add rocm repository
31    wget -qO - http://repo.radeon.com/rocm/rocm.gpg.key | apt-key add -
32    local rocm_baseurl="http://repo.radeon.com/rocm/apt/${ROCM_VERSION}"
33    echo "deb [arch=amd64] ${rocm_baseurl} ${UBUNTU_VERSION_NAME} main" > /etc/apt/sources.list.d/rocm.list
34    apt-get update --allow-insecure-repositories
35
36    DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-unauthenticated \
37                   rocm-dev \
38                   rocm-utils \
39                   rocm-libs \
40                   rccl \
41                   rocprofiler-dev \
42                   roctracer-dev \
43                   amd-smi-lib
44
45    if [[ $(ver $ROCM_VERSION) -ge $(ver 6.1) ]]; then
46        DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-unauthenticated rocm-llvm-dev
47    fi
48
49    # precompiled miopen kernels added in ROCm 3.5, renamed in ROCm 5.5
50    # search for all unversioned packages
51    # if search fails it will abort this script; use true to avoid case where search fails
52    MIOPENHIPGFX=$(apt-cache search --names-only miopen-hip-gfx | awk '{print $1}' | grep -F -v . || true)
53    if [[ "x${MIOPENHIPGFX}" = x ]]; then
54      echo "miopen-hip-gfx package not available" && exit 1
55    else
56      DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-unauthenticated ${MIOPENHIPGFX}
57    fi
58
59    # ROCm 6.0 had a regression where journal_mode was enabled on the kdb files resulting in permission errors at runtime
60    for kdb in /opt/rocm/share/miopen/db/*.kdb
61    do
62        sqlite3 $kdb "PRAGMA journal_mode=off; PRAGMA VACUUM;"
63    done
64
65    # Cleanup
66    apt-get autoclean && apt-get clean
67    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
68}
69
70install_centos() {
71
72  yum update -y
73  yum install -y kmod
74  yum install -y wget
75  yum install -y openblas-devel
76
77  yum install -y epel-release
78  yum install -y dkms kernel-headers-`uname -r` kernel-devel-`uname -r`
79
80  # Add amdgpu repository
81  local amdgpu_baseurl
82  if [[ $OS_VERSION == 9 ]]; then
83      amdgpu_baseurl="https://repo.radeon.com/amdgpu/${ROCM_VERSION}/rhel/9.0/main/x86_64"
84  else
85      amdgpu_baseurl="https://repo.radeon.com/amdgpu/${ROCM_VERSION}/rhel/7.9/main/x86_64"
86  fi
87  echo "[AMDGPU]" > /etc/yum.repos.d/amdgpu.repo
88  echo "name=AMDGPU" >> /etc/yum.repos.d/amdgpu.repo
89  echo "baseurl=${amdgpu_baseurl}" >> /etc/yum.repos.d/amdgpu.repo
90  echo "enabled=1" >> /etc/yum.repos.d/amdgpu.repo
91  echo "gpgcheck=1" >> /etc/yum.repos.d/amdgpu.repo
92  echo "gpgkey=http://repo.radeon.com/rocm/rocm.gpg.key" >> /etc/yum.repos.d/amdgpu.repo
93
94  local rocm_baseurl="http://repo.radeon.com/rocm/yum/${ROCM_VERSION}"
95  echo "[ROCm]" > /etc/yum.repos.d/rocm.repo
96  echo "name=ROCm" >> /etc/yum.repos.d/rocm.repo
97  echo "baseurl=${rocm_baseurl}" >> /etc/yum.repos.d/rocm.repo
98  echo "enabled=1" >> /etc/yum.repos.d/rocm.repo
99  echo "gpgcheck=1" >> /etc/yum.repos.d/rocm.repo
100  echo "gpgkey=http://repo.radeon.com/rocm/rocm.gpg.key" >> /etc/yum.repos.d/rocm.repo
101
102  yum update -y
103
104  yum install -y \
105                   rocm-dev \
106                   rocm-utils \
107                   rocm-libs \
108                   rccl \
109                   rocprofiler-dev \
110                   roctracer-dev \
111                   amd-smi-lib
112
113  # precompiled miopen kernels; search for all unversioned packages
114  # if search fails it will abort this script; use true to avoid case where search fails
115  MIOPENHIPGFX=$(yum -q search miopen-hip-gfx | grep miopen-hip-gfx | awk '{print $1}'| grep -F kdb. || true)
116  if [[ "x${MIOPENHIPGFX}" = x ]]; then
117    echo "miopen-hip-gfx package not available" && exit 1
118  else
119    yum install -y ${MIOPENHIPGFX}
120  fi
121
122  # ROCm 6.0 had a regression where journal_mode was enabled on the kdb files resulting in permission errors at runtime
123  for kdb in /opt/rocm/share/miopen/db/*.kdb
124  do
125      sqlite3 $kdb "PRAGMA journal_mode=off; PRAGMA VACUUM;"
126  done
127
128  # Cleanup
129  yum clean all
130  rm -rf /var/cache/yum
131  rm -rf /var/lib/yum/yumdb
132  rm -rf /var/lib/yum/history
133}
134
135# Install Python packages depending on the base OS
136ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
137case "$ID" in
138  ubuntu)
139    install_ubuntu
140    ;;
141  centos)
142    install_centos
143    ;;
144  *)
145    echo "Unable to determine OS..."
146    exit 1
147    ;;
148esac
149