1+ ARG PYTHON="python3"
2+ ARG PYTHON_VERSION="3.12.10"
3+ ARG PYTHON_SHORT_VERSION="3.12"
4+ ARG CUDA_MAJOR="12"
5+ ARG CUDA_MINOR="8"
6+ ARG EFA_VERSION="1.40.0"
7+ ARG OS_VERSION="ubuntu22.04"
8+ FROM nvidia/cuda:12.8.0-base-${OS_VERSION} AS base-builder
9+
10+ ARG OS_VERSION
11+
12+ RUN mv /usr/local/cuda/compat /usr/local \
13+ && apt-get update \
14+ && apt-get -y upgrade --only-upgrade systemd \
15+ && apt-get install -y --allow-change-held-packages --no-install-recommends \
16+ automake \
17+ build-essential \
18+ ca-certificates \
19+ cmake \
20+ curl \
21+ emacs \
22+ git \
23+ jq \
24+ libcurl4-openssl-dev \
25+ libglib2.0-0 \
26+ libegl1 \
27+ libgl1 \
28+ libsm6 \
29+ libssl-dev \
30+ libxext6 \
31+ libxrender-dev \
32+ zlib1g-dev \
33+ unzip \
34+ vim \
35+ wget \
36+ libhwloc-dev \
37+ libgomp1 \
38+ libibverbs-dev \
39+ libnuma1 \
40+ libnuma-dev \
41+ libtool \
42+ openssl \
43+ python3-dev \
44+ autoconf \
45+ pkg-config \
46+ check \
47+ libsubunit0 \
48+ libsubunit-dev \
49+ libffi-dev \
50+ libbz2-dev \
51+ liblzma-dev \
52+ && apt-get autoremove -y \
53+ && apt-get clean \
54+ && rm -rf /var/lib/apt/lists/*
55+
56+ # #############################################################################
57+ FROM base-builder AS python-builder
58+ ARG PYTHON_VERSION
59+ COPY install_python.sh install_python.sh
60+ RUN bash install_python.sh ${PYTHON_VERSION} && rm install_python.sh
61+
62+ # #############################################################################
63+ FROM base-builder AS cuda-builder
64+ ARG CUDA_MAJOR
65+ ARG CUDA_MINOR
66+ COPY install_cuda.sh install_cuda.sh
67+ RUN bash install_cuda.sh "${CUDA_MAJOR}.${CUDA_MINOR}" "${OS_VERSION}" && rm install_cuda.sh
68+
69+ # #############################################################################
70+ FROM nvidia/cuda:12.8.1-base-${OS_VERSION} AS final
71+ ARG PYTHON
72+ ARG PYTHON_SHORT_VERSION
73+ ARG CUDA_MAJOR
74+ ARG CUDA_MINOR
75+ ARG EFA_VERSION
76+ LABEL maintainer="Amazon AI"
77+ LABEL dlc_major_version="1"
78+ ENV DEBIAN_FRONTEND=noninteractive \
79+ LANG=C.UTF-8 \
80+ LC_ALL=C.UTF-8 \
81+ DLC_CONTAINER_TYPE=base \
82+ # Python won’t try to write .pyc or .pyo files on the import of source modules
83+ # Force stdin, stdout and stderr to be totally unbuffered. Good for logging
84+ PYTHONDONTWRITEBYTECODE=1 \
85+ PYTHONUNBUFFERED=1 \
86+ PYTHONIOENCODING=UTF-8 \
87+ CUDA_HOME="/usr/local/cuda" \
88+ PATH="/opt/amazon/openmpi/bin:/opt/amazon/efa/bin:/usr/local/cuda/bin:${PATH}" \
89+ LD_LIBRARY_PATH="/usr/local/lib:/usr/local/cuda/lib64:/opt/amazon/ofi-nccl/lib:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:${LD_LIBRARY_PATH}"
90+
91+ WORKDIR /
92+
93+ # + python and pip packages (awscli, boto3, requests)
94+ COPY --from=python-builder /usr/local/lib/python${PYTHON_SHORT_VERSION} /usr/local/lib/python${PYTHON_SHORT_VERSION}
95+ COPY --from=python-builder /usr/local/include/python${PYTHON_SHORT_VERSION} /usr/local/include/python${PYTHON_SHORT_VERSION}
96+ COPY --from=python-builder /usr/local/bin /usr/local/bin
97+ # + cuda-toolkit, cudnn, nccl
98+ COPY --from=cuda-builder /usr/local/cuda-${CUDA_MAJOR}.${CUDA_MINOR} /usr/local/cuda-${CUDA_MAJOR}.${CUDA_MINOR}
99+ COPY install_efa.sh install_efa.sh
100+ COPY deep_learning_container.py /usr/local/bin/deep_learning_container.py
101+ COPY bash_telemetry.sh /usr/local/bin/bash_telemetry.sh
102+ RUN chmod +x /usr/local/bin/deep_learning_container.py && \
103+ chmod +x /usr/local/bin/bash_telemetry.sh && \
104+ echo 'source /usr/local/bin/bash_telemetry.sh' >> /etc/bash.bashrc && \
105+ # Install EFA
106+ bash install_efa.sh ${EFA_VERSION} && \
107+ rm install_efa.sh && \
108+ # OSS compliance
109+ apt-get update && \
110+ apt-get upgrade -y && \
111+ apt-get install -y --allow-change-held-packages --no-install-recommends \
112+ unzip \
113+ wget && \
114+ apt-get clean && \
115+ HOME_DIR=/root && \
116+ curl -o ${HOME_DIR}/oss_compliance.zip https://aws-dlinfra-utilities.s3.amazonaws.com/oss_compliance.zip && \
117+ unzip ${HOME_DIR}/oss_compliance.zip -d ${HOME_DIR}/ && \
118+ cp ${HOME_DIR}/oss_compliance/test/testOSSCompliance /usr/local/bin/testOSSCompliance && \
119+ chmod +x /usr/local/bin/testOSSCompliance && \
120+ chmod +x ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh && \
121+ ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh ${HOME_DIR} ${PYTHON} && \
122+ rm -rf ${HOME_DIR}/oss_compliance* && \
123+ rm -rf /tmp/tmp* && \
124+ rm -rf /var/lib/apt/lists/* && \
125+ rm -rf /root/.cache | true
126+
127+ CMD ["/bin/bash" ]
0 commit comments