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