mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 12:54:11 +08:00
Fixes #140631 Highlights: * Use `cpu_final` base for ROCm in `.ci/docker/manywheel/Dockerfile_2_28` * Cleans up install_miopen.sh to remove old ROCm references * Install `gcc-gfortran` package to build magma for ROCm on almalinux Needs builder PR https://github.com/pytorch/builder/pull/2043 (merged) so that GCC_ABI expected value is updated. Pull Request resolved: https://github.com/pytorch/pytorch/pull/140681 Approved by: https://github.com/jeffdaily
130 lines
3.4 KiB
Bash
130 lines
3.4 KiB
Bash
#!/bin/bash
|
|
# Script used only in CD pipeline
|
|
|
|
set -ex
|
|
|
|
ROCM_VERSION=$1
|
|
|
|
if [[ -z $ROCM_VERSION ]]; then
|
|
echo "missing ROCM_VERSION"
|
|
exit 1;
|
|
fi
|
|
|
|
IS_UBUNTU=0
|
|
ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
|
|
case "$ID" in
|
|
ubuntu)
|
|
IS_UBUNTU=1
|
|
;;
|
|
centos|almalinux)
|
|
IS_UBUNTU=0
|
|
;;
|
|
*)
|
|
echo "Unable to determine OS..."
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# To make version comparison easier, create an integer representation.
|
|
save_IFS="$IFS"
|
|
IFS=. ROCM_VERSION_ARRAY=(${ROCM_VERSION})
|
|
IFS="$save_IFS"
|
|
if [[ ${#ROCM_VERSION_ARRAY[@]} == 2 ]]; then
|
|
ROCM_VERSION_MAJOR=${ROCM_VERSION_ARRAY[0]}
|
|
ROCM_VERSION_MINOR=${ROCM_VERSION_ARRAY[1]}
|
|
ROCM_VERSION_PATCH=0
|
|
elif [[ ${#ROCM_VERSION_ARRAY[@]} == 3 ]]; then
|
|
ROCM_VERSION_MAJOR=${ROCM_VERSION_ARRAY[0]}
|
|
ROCM_VERSION_MINOR=${ROCM_VERSION_ARRAY[1]}
|
|
ROCM_VERSION_PATCH=${ROCM_VERSION_ARRAY[2]}
|
|
else
|
|
echo "Unhandled ROCM_VERSION ${ROCM_VERSION}"
|
|
exit 1
|
|
fi
|
|
ROCM_INT=$(($ROCM_VERSION_MAJOR * 10000 + $ROCM_VERSION_MINOR * 100 + $ROCM_VERSION_PATCH))
|
|
|
|
# Function to retry functions that sometimes timeout or have flaky failures
|
|
retry () {
|
|
$* || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*)
|
|
}
|
|
|
|
# Build custom MIOpen to use comgr for offline compilation.
|
|
|
|
## Need a sanitized ROCM_VERSION without patchlevel; patchlevel version 0 must be added to paths.
|
|
ROCM_DOTS=$(echo ${ROCM_VERSION} | tr -d -c '.' | wc -c)
|
|
if [[ ${ROCM_DOTS} == 1 ]]; then
|
|
ROCM_VERSION_NOPATCH="${ROCM_VERSION}"
|
|
ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}.0"
|
|
else
|
|
ROCM_VERSION_NOPATCH="${ROCM_VERSION%.*}"
|
|
ROCM_INSTALL_PATH="/opt/rocm-${ROCM_VERSION}"
|
|
fi
|
|
|
|
MIOPEN_CMAKE_COMMON_FLAGS="
|
|
-DMIOPEN_USE_COMGR=ON
|
|
-DMIOPEN_BUILD_DRIVER=OFF
|
|
"
|
|
if [[ $ROCM_INT -ge 60200 ]] && [[ $ROCM_INT -lt 60204 ]]; then
|
|
MIOPEN_BRANCH="release/rocm-rel-6.2-staging"
|
|
else
|
|
echo "ROCm ${ROCM_VERSION} does not need any patches, do not build from source"
|
|
exit 0
|
|
fi
|
|
|
|
|
|
if [[ ${IS_UBUNTU} == 1 ]]; then
|
|
apt-get remove -y miopen-hip
|
|
else
|
|
# Workaround since almalinux manylinux image already has this and cget doesn't like that
|
|
rm -rf /usr/local/lib/pkgconfig/sqlite3.pc
|
|
|
|
# Versioned package name needs regex match
|
|
# Use --noautoremove to prevent other rocm packages from being uninstalled
|
|
yum remove -y miopen-hip* --noautoremove
|
|
fi
|
|
|
|
git clone https://github.com/ROCm/MIOpen -b ${MIOPEN_BRANCH}
|
|
pushd MIOpen
|
|
# remove .git to save disk space since CI runner was running out
|
|
rm -rf .git
|
|
# Don't build CK to save docker build time
|
|
sed -i '/composable_kernel/d' requirements.txt
|
|
## MIOpen minimum requirements
|
|
cmake -P install_deps.cmake --minimum
|
|
|
|
# clean up since CI runner was running out of disk space
|
|
rm -rf /tmp/*
|
|
if [[ ${IS_UBUNTU} == 1 ]]; then
|
|
apt-get autoclean && apt-get clean
|
|
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
|
else
|
|
yum clean all
|
|
rm -rf /var/cache/yum
|
|
rm -rf /var/lib/yum/yumdb
|
|
rm -rf /var/lib/yum/history
|
|
fi
|
|
|
|
## Build MIOpen
|
|
mkdir -p build
|
|
cd build
|
|
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig CXX=${ROCM_INSTALL_PATH}/llvm/bin/clang++ cmake .. \
|
|
${MIOPEN_CMAKE_COMMON_FLAGS} \
|
|
${MIOPEN_CMAKE_DB_FLAGS} \
|
|
-DCMAKE_PREFIX_PATH="${ROCM_INSTALL_PATH}"
|
|
make MIOpen -j $(nproc)
|
|
|
|
# Build MIOpen package
|
|
make -j $(nproc) package
|
|
|
|
# clean up since CI runner was running out of disk space
|
|
rm -rf /usr/local/cget
|
|
|
|
if [[ ${IS_UBUNTU} == 1 ]]; then
|
|
sudo dpkg -i miopen-hip*.deb
|
|
else
|
|
yum install -y miopen-*.rpm
|
|
fi
|
|
|
|
popd
|
|
rm -rf MIOpen
|