Skip to content

Commit 0dc7eb8

Browse files
rraminenjithunnair-amd
authored andcommitted
[SOW MS3] Centos stream9 PyTorch image support (#1090)
* changes to build Centos stream 9 images * Added scripts for centos and centos stream images * Added an extra line * Add ninja installation * Optimized code * Fixes * Add comment * Optimized code * Added AMDGPU mapping for ROCm 5.2 and invalid-url for rocm_baseurl Co-authored-by: Jithun Nair <[email protected]>
1 parent a642d1e commit 0dc7eb8

File tree

6 files changed

+199
-22
lines changed

6 files changed

+199
-22
lines changed

.circleci/docker/build.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,12 @@ if [[ "$image" == *cuda* && ${OS} == "ubuntu" ]]; then
300300
fi
301301
fi
302302

303+
if [[ "$image" == *centos9* ]]; then
304+
DOCKERFILE_NAME="Dockerfile.centos.stream"
305+
else
306+
DOCKERFILE_NAME="Dockerfile"
307+
fi
308+
303309
# Build image
304310
# TODO: build-arg THRIFT is not turned on for any image, remove it once we confirm
305311
# it's no longer needed.
@@ -338,7 +344,7 @@ docker build \
338344
--build-arg "ROCM_VERSION=${ROCM_VERSION:-}" \
339345
--build-arg "PYTORCH_ROCM_ARCH=${PYTORCH_ROCM_ARCH:-gfx900;gfx906}" \
340346
--build-arg "IMAGE_NAME=${IMAGE_NAME}" \
341-
-f $(dirname ${DOCKERFILE})/Dockerfile \
347+
-f $(dirname ${DOCKERFILE})/${DOCKERFILE_NAME} \
342348
-t "$tmp_tag" \
343349
"$@" \
344350
.
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
ARG CENTOS_VERSION
2+
3+
FROM quay.io/centos/centos:stream${CENTOS_VERSION}
4+
5+
6+
# Set AMD gpu targets to build for
7+
ARG PYTORCH_ROCM_ARCH
8+
ENV PYTORCH_ROCM_ARCH ${PYTORCH_ROCM_ARCH}
9+
10+
# Install required packages to build Caffe2
11+
12+
# Install common dependencies (so that this step can be cached separately)
13+
ARG EC2
14+
ADD ./common/install_base.sh install_base.sh
15+
RUN bash ./install_base.sh && rm install_base.sh
16+
17+
#Install langpack
18+
RUN yum install -y glibc-langpack-en
19+
20+
# Update CentOS git version
21+
RUN yum -y remove git
22+
RUN yum -y remove git-*
23+
RUN yum install -y git
24+
25+
# Install devtoolset
26+
RUN dnf install -y rpmdevtools
27+
ENV BASH_ENV "/etc/profile"
28+
29+
# Install ninja
30+
RUN dnf --enablerepo=crb install -y ninja-build
31+
32+
# (optional) Install non-default glibc version
33+
ARG GLIBC_VERSION
34+
ADD ./common/install_glibc.sh install_glibc.sh
35+
RUN if [ -n "${GLIBC_VERSION}" ]; then bash ./install_glibc.sh; fi
36+
RUN rm install_glibc.sh
37+
38+
# Install user
39+
ADD ./common/install_user.sh install_user.sh
40+
RUN bash ./install_user.sh && rm install_user.sh
41+
42+
# Install conda and other packages (e.g., numpy, pytest)
43+
ENV PATH /opt/conda/bin:$PATH
44+
ARG ANACONDA_PYTHON_VERSION
45+
ADD requirements-ci.txt /opt/conda/requirements-ci.txt
46+
ADD ./common/install_conda.sh install_conda.sh
47+
RUN bash ./install_conda.sh && rm install_conda.sh
48+
RUN rm /opt/conda/requirements-ci.txt
49+
50+
# (optional) Install protobuf for ONNX
51+
ARG PROTOBUF
52+
ADD ./common/install_protobuf.sh install_protobuf.sh
53+
RUN if [ -n "${PROTOBUF}" ]; then bash ./install_protobuf.sh; fi
54+
RUN rm install_protobuf.sh
55+
ENV INSTALLED_PROTOBUF ${PROTOBUF}
56+
57+
# (optional) Install database packages like LMDB and LevelDB
58+
ARG DB
59+
ADD ./common/install_db.sh install_db.sh
60+
RUN if [ -n "${DB}" ]; then bash ./install_db.sh; fi
61+
RUN rm install_db.sh
62+
ENV INSTALLED_DB ${DB}
63+
64+
# (optional) Install vision packages like OpenCV and ffmpeg
65+
ARG VISION
66+
ADD ./common/install_vision.sh install_vision.sh
67+
RUN if [ -n "${VISION}" ]; then bash ./install_vision.sh; fi
68+
RUN rm install_vision.sh
69+
ENV INSTALLED_VISION ${VISION}
70+
71+
# Install rocm
72+
ARG ROCM_VERSION
73+
ADD ./common/install_rocm.sh install_rocm.sh
74+
RUN bash ./install_rocm.sh
75+
RUN rm install_rocm.sh
76+
ENV PATH /opt/rocm/bin:$PATH
77+
ENV PATH /opt/rocm/hcc/bin:$PATH
78+
ENV PATH /opt/rocm/hip/bin:$PATH
79+
ENV PATH /opt/rocm/opencl/bin:$PATH
80+
ENV PATH /opt/rocm/llvm/bin:$PATH
81+
ENV MAGMA_HOME /opt/rocm/magma
82+
ENV LANG en_US.utf8
83+
ENV LC_ALL en_US.utf8
84+
85+
# (optional) Install non-default CMake version
86+
ARG CMAKE_VERSION
87+
ADD ./common/install_cmake.sh install_cmake.sh
88+
RUN if [ -n "${CMAKE_VERSION}" ]; then bash ./install_cmake.sh; fi
89+
RUN rm install_cmake.sh
90+
91+
# (optional) Install non-default Ninja version
92+
ARG NINJA_VERSION
93+
ADD ./common/install_ninja.sh install_ninja.sh
94+
RUN if [ -n "${NINJA_VERSION}" ]; then bash ./install_ninja.sh; fi
95+
RUN rm install_ninja.sh
96+
97+
# Install ccache/sccache (do this last, so we get priority in PATH)
98+
ADD ./common/install_cache.sh install_cache.sh
99+
ENV PATH /opt/cache/bin:$PATH
100+
RUN bash ./install_cache.sh && rm install_cache.sh
101+
102+
# Include BUILD_ENVIRONMENT environment variable in image
103+
ARG BUILD_ENVIRONMENT
104+
ENV BUILD_ENVIRONMENT ${BUILD_ENVIRONMENT}
105+
106+
USER jenkins
107+
CMD ["bash"]

.circleci/docker/common/install_base.sh

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,21 @@ install_ubuntu() {
6666
install_centos() {
6767
# Need EPEL for many packages we depend on.
6868
# See http://fedoraproject.org/wiki/EPEL
69-
yum --enablerepo=extras install -y epel-release
69+
# extras repo is not there for CentOS 9 and epel-release is already part of repo list
70+
if [[ $OS_VERSION == 9 ]]; then
71+
yum install -y epel-release
72+
ALLOW_ERASE="--allowerasing"
73+
else
74+
yum --enablerepo=extras install -y epel-release
75+
ALLOW_ERASE=""
76+
fi
7077

7178
ccache_deps="asciidoc docbook-dtds docbook-style-xsl libxslt"
7279
numpy_deps="gcc-gfortran"
7380
# Note: protobuf-c-{compiler,devel} on CentOS are too old to be used
7481
# for Caffe2. That said, we still install them to make sure the build
7582
# system opts to build/use protoc and libprotobuf from third-party.
76-
yum install -y \
83+
yum install -y $ALLOW_ERASE \
7784
$ccache_deps \
7885
$numpy_deps \
7986
autoconf \
@@ -91,22 +98,31 @@ install_centos() {
9198
glog-devel \
9299
hiredis-devel \
93100
libstdc++-devel \
94-
libsndfile-devel \
95101
make \
96-
opencv-devel \
97102
sudo \
98103
wget \
99104
vim
100105

106+
if [[ $OS_VERSION == 9 ]]
107+
then
108+
dnf --enablerepo=crb -y install libsndfile-devel
109+
else
110+
yum install -y \
111+
opencv-devel \
112+
libsndfile-devel
113+
fi
114+
101115
# Cleanup
102116
yum clean all
103117
rm -rf /var/cache/yum
104118
rm -rf /var/lib/yum/yumdb
105119
rm -rf /var/lib/yum/history
106120
}
107121

108-
# Install base packages depending on the base OS
109122
ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
123+
OS_VERSION=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"')
124+
125+
# Install base packages depending on the base OS
110126
case "$ID" in
111127
ubuntu)
112128
install_ubuntu
@@ -121,6 +137,7 @@ case "$ID" in
121137
esac
122138

123139
# Install Valgrind separately since the apt-get version is too old.
140+
if [[ $ID == centos && $OS_VERSION == 7 ]]; then WGET_FLAG="--no-check-certificate" ; else WGET_FLAG=""; fi
124141
mkdir valgrind_build && cd valgrind_build
125142
VALGRIND_VERSION=3.16.1
126143
wget https://ossci-linux.s3.amazonaws.com/valgrind-${VALGRIND_VERSION}.tar.bz2

.circleci/docker/common/install_db.sh

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,23 @@ install_ubuntu() {
1818
install_centos() {
1919
# Need EPEL for many packages we depend on.
2020
# See http://fedoraproject.org/wiki/EPEL
21-
yum --enablerepo=extras install -y epel-release
21+
if [[ $OS_VERSION == 9 ]]; then
22+
yum install -y epel-release
23+
else
24+
yum --enablerepo=extras install -y epel-release
25+
fi
2226

2327
yum install -y \
2428
hiredis-devel \
25-
leveldb-devel \
26-
lmdb-devel \
27-
snappy-devel
29+
leveldb-devel
30+
31+
if [[ $OS_VERSION == 9 ]]; then
32+
dnf --enablerepo=crb -y install lmdb-devel snappy-devel
33+
else
34+
yum install -y \
35+
lmdb-devel \
36+
snappy-devel
37+
fi
2838

2939
# Cleanup
3040
yum clean all
@@ -33,6 +43,8 @@ install_centos() {
3343
rm -rf /var/lib/yum/history
3444
}
3545

46+
OS_VERSION=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"')
47+
3648
# Install base packages depending on the base OS
3749
ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
3850
case "$ID" in

.circleci/docker/common/install_rocm.sh

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ ver() {
3636

3737
# Map ROCm version to AMDGPU version
3838
declare -A AMDGPU_VERSIONS=( ["5.2.3"]="22.20.3" )
39+
declare -A AMDGPU_VERSIONS=( ["4.5.2"]="21.40.2" ["5.0"]="21.50" ["5.1.1"]="22.10.1" ["5.2"]="22.20" ["5.2.3"]="22.20.3")
3940

4041
install_ubuntu() {
4142
apt-get update
@@ -101,14 +102,24 @@ install_centos() {
101102
yum update -y
102103
yum install -y kmod
103104
yum install -y wget
104-
yum install -y openblas-devel
105+
106+
if [[ $OS_VERSION == 9 ]]; then
107+
dnf install -y openblas-serial
108+
dnf install -y dkms kernel-headers kernel-devel
109+
else
110+
yum install -y openblas-devel
111+
yum install -y dkms kernel-headers-`uname -r` kernel-devel-`uname -r`
112+
fi
105113

106114
yum install -y epel-release
107-
yum install -y dkms kernel-headers-`uname -r` kernel-devel-`uname -r`
108115

109116
if [[ $(ver $ROCM_VERSION) -ge $(ver 4.5) ]]; then
110117
# Add amdgpu repository
111-
local amdgpu_baseurl="https://repo.radeon.com/amdgpu/${AMDGPU_VERSIONS[$ROCM_VERSION]}/rhel/7.9/main/x86_64"
118+
if [[ $OS_VERSION == 9 ]]; then
119+
local amdgpu_baseurl="https://repo.radeon.com/amdgpu/${AMDGPU_VERSIONS[$ROCM_VERSION]}/rhel/9.0/main/x86_64"
120+
else
121+
local amdgpu_baseurl="https://repo.radeon.com/amdgpu/${AMDGPU_VERSIONS[$ROCM_VERSION]}/rhel/7.9/main/x86_64"
122+
fi
112123
echo "[AMDGPU]" > /etc/yum.repos.d/amdgpu.repo
113124
echo "name=AMDGPU" >> /etc/yum.repos.d/amdgpu.repo
114125
echo "baseurl=${amdgpu_baseurl}" >> /etc/yum.repos.d/amdgpu.repo
@@ -117,23 +128,40 @@ install_centos() {
117128
echo "gpgkey=http://repo.radeon.com/rocm/rocm.gpg.key" >> /etc/yum.repos.d/amdgpu.repo
118129
fi
119130

120-
local rocm_baseurl="http://repo.radeon.com/rocm/yum/${ROCM_VERSION}"
131+
if [[ $OS_VERSION == 9 ]]; then
132+
local rocm_baseurl="invalid-url"
133+
else
134+
local rocm_baseurl="http://repo.radeon.com/rocm/yum/${ROCM_VERSION}/main"
135+
fi
121136
echo "[ROCm]" > /etc/yum.repos.d/rocm.repo
122137
echo "name=ROCm" >> /etc/yum.repos.d/rocm.repo
123138
echo "baseurl=${rocm_baseurl}" >> /etc/yum.repos.d/rocm.repo
124139
echo "enabled=1" >> /etc/yum.repos.d/rocm.repo
125140
echo "gpgcheck=1" >> /etc/yum.repos.d/rocm.repo
126141
echo "gpgkey=http://repo.radeon.com/rocm/rocm.gpg.key" >> /etc/yum.repos.d/rocm.repo
127142

128-
yum update -y
129-
130-
yum install -y \
143+
if [[ $OS_VERSION == 9 ]]; then
144+
yum update -y --nogpgcheck
145+
dnf --enablerepo=crb install -y perl-File-BaseDir
146+
yum install -y --nogpgcheck rocm-ml-sdk rocm-developer-tools
147+
else
148+
yum update -y
149+
yum install -y \
131150
rocm-dev \
132151
rocm-utils \
133152
rocm-libs \
134153
rccl \
135154
rocprofiler-dev \
136155
roctracer-dev
156+
fi
157+
158+
# if search fails it will abort this script; use true to avoid case where search fails
159+
MIOPENKERNELS=$(yum -q search miopenkernels | grep miopenkernels- | awk '{print $1}'| grep -F kdb. || true)
160+
if [[ "x${MIOPENKERNELS}" = x ]]; then
161+
echo "miopenkernels package not available"
162+
else
163+
yum install -y ${MIOPENKERNELS}
164+
fi
137165

138166
install_magma
139167

@@ -144,6 +172,8 @@ install_centos() {
144172
rm -rf /var/lib/yum/history
145173
}
146174

175+
OS_VERSION=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"')
176+
147177
# Install Python packages depending on the base OS
148178
ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
149179
case "$ID" in

.circleci/docker/common/install_vision.sh

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ install_ubuntu() {
1616
install_centos() {
1717
# Need EPEL for many packages we depend on.
1818
# See http://fedoraproject.org/wiki/EPEL
19-
yum --enablerepo=extras install -y epel-release
20-
21-
yum install -y \
22-
opencv-devel \
23-
ffmpeg-devel
19+
if [[ $OS_VERSION == 9 ]]; then
20+
yum install -y epel-release
21+
else
22+
yum --enablerepo=extras install -y epel-release
23+
yum install -y \
24+
opencv-devel \
25+
ffmpeg-devel
26+
fi
2427

2528
# Cleanup
2629
yum clean all
@@ -29,6 +32,8 @@ install_centos() {
2932
rm -rf /var/lib/yum/history
3033
}
3134

35+
OS_VERSION=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"')
36+
3237
# Install base packages depending on the base OS
3338
ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"')
3439
case "$ID" in

0 commit comments

Comments
 (0)