|
| 1 | +ARG PYTHON="python3" |
| 2 | +ARG PYTHON_VERSION="3.13.11" |
| 3 | +ARG PYTHON_SHORT_VERSION="3.13" |
| 4 | +ARG CUDA_MAJOR="13" |
| 5 | +ARG CUDA_MINOR="0" |
| 6 | +ARG CUDA_PATCH="2" |
| 7 | +ARG EFA_VERSION="1.47.0" |
| 8 | +ARG OS_VERSION="ubuntu22.04" |
| 9 | +FROM nvidia/cuda:${CUDA_MAJOR}.${CUDA_MINOR}.${CUDA_PATCH}-base-${OS_VERSION} AS base-builder |
| 10 | + |
| 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 | + libsqlite3-dev \ |
| 53 | + && apt-get autoremove -y \ |
| 54 | + && apt-get clean \ |
| 55 | + && rm -rf /var/lib/apt/lists/* |
| 56 | + |
| 57 | +############################################################################## |
| 58 | +FROM base-builder AS python-builder |
| 59 | +ARG PYTHON_VERSION |
| 60 | +COPY install_python.sh install_python.sh |
| 61 | +RUN bash install_python.sh ${PYTHON_VERSION} && rm install_python.sh |
| 62 | + |
| 63 | +############################################################################## |
| 64 | +FROM base-builder AS cuda-builder |
| 65 | +ARG CUDA_MAJOR |
| 66 | +ARG CUDA_MINOR |
| 67 | +ARG CUDA_PATCH |
| 68 | +ARG OS_VERSION |
| 69 | +COPY install_cuda.sh install_cuda.sh |
| 70 | +RUN bash install_cuda.sh "${CUDA_MAJOR}.${CUDA_MINOR}.${CUDA_PATCH}" "${OS_VERSION}" && rm install_cuda.sh |
| 71 | + |
| 72 | +############################################################################## |
| 73 | +FROM nvidia/cuda:${CUDA_MAJOR}.${CUDA_MINOR}.${CUDA_PATCH}-base-${OS_VERSION} AS final |
| 74 | +ARG PYTHON |
| 75 | +ARG PYTHON_SHORT_VERSION |
| 76 | +ARG CUDA_MAJOR |
| 77 | +ARG CUDA_MINOR |
| 78 | +ARG EFA_VERSION |
| 79 | +LABEL maintainer="Amazon AI" |
| 80 | +LABEL dlc_major_version="1" |
| 81 | +ENV DEBIAN_FRONTEND=noninteractive \ |
| 82 | + LANG=C.UTF-8 \ |
| 83 | + LC_ALL=C.UTF-8 \ |
| 84 | + DLC_CONTAINER_TYPE=base \ |
| 85 | + # Python won't try to write .pyc or .pyo files on the import of source modules |
| 86 | + # Force stdin, stdout and stderr to be totally unbuffered. Good for logging |
| 87 | + PYTHONDONTWRITEBYTECODE=1 \ |
| 88 | + PYTHONUNBUFFERED=1 \ |
| 89 | + PYTHONIOENCODING=UTF-8 \ |
| 90 | + CUDA_HOME="/usr/local/cuda" \ |
| 91 | + PATH="/opt/amazon/openmpi/bin:/opt/amazon/efa/bin:/usr/local/cuda/bin:${PATH}" \ |
| 92 | + 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}" |
| 93 | + |
| 94 | +WORKDIR / |
| 95 | + |
| 96 | +# + python and pip packages (awscli, boto3, requests) |
| 97 | +COPY --from=python-builder /usr/local/lib/python${PYTHON_SHORT_VERSION} /usr/local/lib/python${PYTHON_SHORT_VERSION} |
| 98 | +COPY --from=python-builder /usr/local/include/python${PYTHON_SHORT_VERSION} /usr/local/include/python${PYTHON_SHORT_VERSION} |
| 99 | +COPY --from=python-builder /usr/local/bin /usr/local/bin |
| 100 | +# + cuda-toolkit, cudnn, nccl |
| 101 | +COPY --from=cuda-builder /usr/local/cuda-${CUDA_MAJOR}.${CUDA_MINOR} /usr/local/cuda-${CUDA_MAJOR}.${CUDA_MINOR} |
| 102 | +COPY install_efa.sh install_efa.sh |
| 103 | +COPY deep_learning_container.py /usr/local/bin/deep_learning_container.py |
| 104 | +COPY bash_telemetry.sh /usr/local/bin/bash_telemetry.sh |
| 105 | +RUN chmod +x /usr/local/bin/deep_learning_container.py && \ |
| 106 | + chmod +x /usr/local/bin/bash_telemetry.sh && \ |
| 107 | + echo 'source /usr/local/bin/bash_telemetry.sh' >> /etc/bash.bashrc && \ |
| 108 | + # Install EFA |
| 109 | + bash install_efa.sh ${EFA_VERSION} && \ |
| 110 | + rm install_efa.sh && \ |
| 111 | + # OSS compliance |
| 112 | + apt-get update && \ |
| 113 | + apt-get upgrade -y && \ |
| 114 | + apt-get install -y --allow-change-held-packages --no-install-recommends \ |
| 115 | + unzip \ |
| 116 | + wget && \ |
| 117 | + apt-get clean && \ |
| 118 | + HOME_DIR=/root && \ |
| 119 | + curl -o ${HOME_DIR}/oss_compliance.zip https://aws-dlinfra-utilities.s3.amazonaws.com/oss_compliance.zip && \ |
| 120 | + unzip ${HOME_DIR}/oss_compliance.zip -d ${HOME_DIR}/ && \ |
| 121 | + cp ${HOME_DIR}/oss_compliance/test/testOSSCompliance /usr/local/bin/testOSSCompliance && \ |
| 122 | + chmod +x /usr/local/bin/testOSSCompliance && \ |
| 123 | + chmod +x ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh && \ |
| 124 | + ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh ${HOME_DIR} ${PYTHON} && \ |
| 125 | + rm -rf ${HOME_DIR}/oss_compliance* && \ |
| 126 | + rm -rf /tmp/tmp* && \ |
| 127 | + rm -rf /var/lib/apt/lists/* && \ |
| 128 | + rm -rf /root/.cache | true |
| 129 | + |
| 130 | +CMD ["/bin/bash"] |
0 commit comments