xref: /aosp_15_r20/external/pytorch/.ci/docker/common/install_miopen.sh (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1#!/bin/bash
2# Script used only in CD pipeline
3
4set -ex
5
6ROCM_VERSION=$1
7
8if [[ -z $ROCM_VERSION ]]; then
9    echo "missing ROCM_VERSION"
10    exit 1;
11fi
12
13IS_UBUNTU=0
14ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
15case "$ID" in
16  ubuntu)
17    IS_UBUNTU=1
18    ;;
19  centos)
20    IS_UBUNTU=0
21    ;;
22  *)
23    echo "Unable to determine OS..."
24    exit 1
25    ;;
26esac
27
28# To make version comparison easier, create an integer representation.
29save_IFS="$IFS"
30IFS=. ROCM_VERSION_ARRAY=(${ROCM_VERSION})
31IFS="$save_IFS"
32if [[ ${#ROCM_VERSION_ARRAY[@]} == 2 ]]; then
33    ROCM_VERSION_MAJOR=${ROCM_VERSION_ARRAY[0]}
34    ROCM_VERSION_MINOR=${ROCM_VERSION_ARRAY[1]}
35    ROCM_VERSION_PATCH=0
36elif [[ ${#ROCM_VERSION_ARRAY[@]} == 3 ]]; then
37    ROCM_VERSION_MAJOR=${ROCM_VERSION_ARRAY[0]}
38    ROCM_VERSION_MINOR=${ROCM_VERSION_ARRAY[1]}
39    ROCM_VERSION_PATCH=${ROCM_VERSION_ARRAY[2]}
40else
41    echo "Unhandled ROCM_VERSION ${ROCM_VERSION}"
42    exit 1
43fi
44ROCM_INT=$(($ROCM_VERSION_MAJOR * 10000 + $ROCM_VERSION_MINOR * 100 + $ROCM_VERSION_PATCH))
45
46# Install custom MIOpen + COMgr for ROCm >= 4.0.1
47if [[ $ROCM_INT -lt 40001 ]]; then
48    echo "ROCm version < 4.0.1; will not install custom MIOpen"
49    exit 0
50fi
51
52# Function to retry functions that sometimes timeout or have flaky failures
53retry () {
54    $*  || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*)
55}
56
57# Build custom MIOpen to use comgr for offline compilation.
58
59## Need a sanitized ROCM_VERSION without patchlevel; patchlevel version 0 must be added to paths.
60ROCM_DOTS=$(echo ${ROCM_VERSION} | tr -d -c '.' | wc -c)
61if [[ ${ROCM_DOTS} == 1 ]]; then
62    ROCM_VERSION_NOPATCH="${ROCM_VERSION}"
63    ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}.0"
64else
65    ROCM_VERSION_NOPATCH="${ROCM_VERSION%.*}"
66    ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}"
67fi
68
69# MIOPEN_USE_HIP_KERNELS is a Workaround for COMgr issues
70MIOPEN_CMAKE_COMMON_FLAGS="
71-DMIOPEN_USE_COMGR=ON
72-DMIOPEN_BUILD_DRIVER=OFF
73"
74# Pull MIOpen repo and set DMIOPEN_EMBED_DB based on ROCm version
75if [[ $ROCM_INT -ge 60200 ]] && [[ $ROCM_INT -lt 60300 ]]; then
76    MIOPEN_BRANCH="release/rocm-rel-6.2-staging"
77elif [[ $ROCM_INT -ge 60100 ]] && [[ $ROCM_INT -lt 60200 ]]; then
78    echo "ROCm 6.1 MIOpen does not need any patches, do not build from source"
79    exit 0
80elif [[ $ROCM_INT -ge 60000 ]] && [[ $ROCM_INT -lt 60100 ]]; then
81    echo "ROCm 6.0 MIOpen does not need any patches, do not build from source"
82    exit 0
83elif [[ $ROCM_INT -ge 50700 ]] && [[ $ROCM_INT -lt 60000 ]]; then
84    echo "ROCm 5.7 MIOpen does not need any patches, do not build from source"
85    exit 0
86elif [[ $ROCM_INT -ge 50600 ]] && [[ $ROCM_INT -lt 50700 ]]; then
87    MIOPEN_BRANCH="release/rocm-rel-5.6-staging"
88elif [[ $ROCM_INT -ge 50500 ]] && [[ $ROCM_INT -lt 50600 ]]; then
89    MIOPEN_BRANCH="release/rocm-rel-5.5-gfx11"
90elif [[ $ROCM_INT -ge 50400 ]] && [[ $ROCM_INT -lt 50500 ]]; then
91    MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36 -DMIOPEN_USE_MLIR=Off"
92    MIOPEN_BRANCH="release/rocm-rel-5.4-staging"
93elif [[ $ROCM_INT -ge 50300 ]] && [[ $ROCM_INT -lt 50400 ]]; then
94    MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36 -DMIOPEN_USE_MLIR=Off"
95    MIOPEN_BRANCH="release/rocm-rel-5.3-staging"
96elif [[ $ROCM_INT -ge 50200 ]] && [[ $ROCM_INT -lt 50300 ]]; then
97    MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36 -DMIOPEN_USE_MLIR=Off"
98    MIOPEN_BRANCH="release/rocm-rel-5.2-staging"
99elif [[ $ROCM_INT -ge 50100 ]] && [[ $ROCM_INT -lt 50200 ]]; then
100    MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36"
101    MIOPEN_BRANCH="release/rocm-rel-5.1-staging"
102elif [[ $ROCM_INT -ge 50000 ]] && [[ $ROCM_INT -lt 50100 ]]; then
103    MIOPEN_CMAKE_DB_FLAGS="-DMIOPEN_EMBED_DB=gfx900_56;gfx906_60;gfx90878;gfx90a6e;gfx1030_36"
104    MIOPEN_BRANCH="release/rocm-rel-5.0-staging"
105else
106    echo "Unhandled ROCM_VERSION ${ROCM_VERSION}"
107    exit 1
108fi
109
110
111if [[ ${IS_UBUNTU} == 1 ]]; then
112  apt-get remove -y miopen-hip
113else
114  yum remove -y miopen-hip
115fi
116
117git clone https://github.com/ROCm/MIOpen -b ${MIOPEN_BRANCH}
118pushd MIOpen
119# remove .git to save disk space since CI runner was running out
120rm -rf .git
121# Don't build CK to save docker build time
122if [[ $ROCM_INT -ge 60200 ]]; then
123    sed -i '/composable_kernel/d' requirements.txt
124fi
125# Don't build MLIR to save docker build time
126# since we are disabling MLIR backend for MIOpen anyway
127if [[ $ROCM_INT -ge 50400 ]] && [[ $ROCM_INT -lt 50500 ]]; then
128    sed -i '/rocMLIR/d' requirements.txt
129elif [[ $ROCM_INT -ge 50200 ]] && [[ $ROCM_INT -lt 50400 ]]; then
130    sed -i '/llvm-project-mlir/d' requirements.txt
131fi
132## MIOpen minimum requirements
133cmake -P install_deps.cmake --minimum
134
135# clean up since CI runner was running out of disk space
136rm -rf /tmp/*
137if [[ ${IS_UBUNTU} == 1 ]]; then
138  apt-get autoclean && apt-get clean
139  rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
140else
141  yum clean all
142  rm -rf /var/cache/yum
143  rm -rf /var/lib/yum/yumdb
144  rm -rf /var/lib/yum/history
145fi
146
147## Build MIOpen
148mkdir -p build
149cd build
150PKG_CONFIG_PATH=/usr/local/lib/pkgconfig CXX=${ROCM_INSTALL_PATH}/llvm/bin/clang++ cmake .. \
151    ${MIOPEN_CMAKE_COMMON_FLAGS} \
152    ${MIOPEN_CMAKE_DB_FLAGS} \
153    -DCMAKE_PREFIX_PATH="${ROCM_INSTALL_PATH}/hip;${ROCM_INSTALL_PATH}"
154make MIOpen -j $(nproc)
155
156# Build MIOpen package
157make -j $(nproc) package
158
159# clean up since CI runner was running out of disk space
160rm -rf /usr/local/cget
161
162if [[ ${IS_UBUNTU} == 1 ]]; then
163  sudo dpkg -i miopen-hip*.deb
164else
165  yum install -y miopen-*.rpm
166fi
167
168popd
169rm -rf MIOpen
170