步骤 2:使用 SageMaker Python SDK 启动 SageMaker 分布式训练作业 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

步骤 2:使用 SageMaker Python SDK 启动 SageMaker 分布式训练作业

要运行您在步骤 1:修改自己的训练脚本中调整后的脚本,请首先使用准备好的训练脚本和分布式训练配置参数创建 SageMaker 框架或通用估算器对象。您可以在任何类型的 SageMaker 环境和 Web IDE 中使用该库,例如 SageMaker 笔记本实例SageMaker Studio

使用高级 SageMaker Python SDK 执行以下操作之一:

  • 如果您想在 SageMaker 中快速采用分布式训练作业,请配置 SageMaker PyTorchTensorFlow 框架估算器类。根据在 framework_version 参数中指定的值,框架估算器选取您的训练脚本,并自动匹配预构建的 PyTorch 或 TensorFlow 深度学习容器 (DLC) 的正确映像 URI。

  • 如果您想扩展其中一个预构建容器或构建自定义容器,以便使用 SageMaker 创建自己的机器学习环境,请使用 SageMaker 通用 Estimator 类并指定托管在 Amazon Elastic Container Registry (Amazon ECR) 中的自定义 Docker 容器的映像 URI。

您的训练数据集应存储在启动训练作业的 Amazon Web Services 区域中的 Amazon S3 或适用于 Lustre 的 Amazon FSx 内。如果您使用 Jupyter 笔记本,则应该在同一个 Amazon Web Services 区域中运行 SageMaker 笔记本实例或 SageMaker Studio 应用程序。有关存储训练数据的更多信息,请参阅 SageMaker Python SDK 数据输入文档。

提示

我们强烈建议您使用适用于 Lustre 的 Amazon FSx 而不是 Amazon S3 以提高训练性能。与 Amazon S3 相比,Amazon FSx 具有更高的吞吐量和更低的延迟。

请选择以下任一主题,了解有关如何运行 TensorFlow 或 PyTorch 训练脚本的说明。启动训练作业后,您可以通过使用 Amazon SageMaker Debugger 调试和改进模型性能中的方法或使用 Amazon CloudWatch 监控系统利用率和模型性能。

在您按照以下主题中的说明来详细了解技术细节时,我们还建议您尝试通过Amazon SageMaker 分布式训练笔记本示例开始试用。

为 PyTorch 和 TensorFlow 使用 SageMaker 框架估算器

您可以在 SageMaker 框架估算器类中,将 SageMaker 分布式数据并行库指定为 distribution 策略,以此来激活该库。

SageMaker PyTorch
from sagemaker.pytorch import PyTorch pt_estimator = PyTorch( base_job_name="training_job_name_prefix", source_dir="sub-folder-for-your-code", entry_point="adapted-training-script.py", role="SageMakerRole", py_version="py38", framework_version="1.12.0",     # For running a multi-node distributed training job, specify a value greater than 1     # Example: 2,3,4,..8 instance_count=2,     # Instance types supported by the SageMaker data parallel library: # ml.p4d.24xlargeml.p3dn.24xlarge, and ml.p3.16xlarge instance_type="ml.p3.16xlarge",     # Training using the SageMaker data parallel distributed training strategy distribution={ "smdistributed": { "dataparallel": { "enabled": True } } } ) pt_estimator.fit("s3://bucket/path/to/training/data")
注意

SageMaker PyTorch DLC 中未预安装 PyTorch Lightning 及其实用程序库(例如 Lightning Bolts)。创建以下 requirements.txt 文件,并将该文件保存到用于保存训练脚本的源目录中。

# requirements.txt pytorch-lightning lightning-bolts

例如,树结构目录应如下所示。

├── pytorch_training_launcher_jupyter_notebook.ipynb └── sub-folder-for-your-code ├── adapted-training-script.py └── requirements.txt

有关指定放置 requirements.txt 文件以及训练脚本和作业提交的源目录的更多信息,请参阅 Amazon SageMaker Python SDK 文档中的使用第三方库

SageMaker TensorFlow
from sagemaker.tensorflow import TensorFlow tf_estimator = TensorFlow( base_job_name = "training_job_name_prefix", entry_point="adapted-training-script.py", role="SageMakerRole", framework_version="2.9.1", py_version="py38",     # For running a multi-node distributed training job, specify a value greater than 1 # Example: 2,3,4,..8 instance_count=2,     # Instance types supported by the SageMaker data parallel library: # ml.p4d.24xlargeml.p3dn.24xlarge, and ml.p3.16xlarge instance_type="ml.p3.16xlarge",     # Training using the SageMaker data parallel distributed training strategy distribution={ "smdistributed": { "dataparallel": { "enabled": True } } } ) tf_estimator.fit("s3://bucket/path/to/training/data")

要激活 SageMaker 数据并行性,需要使用 SageMaker 框架估算器的以下两个参数。

distribution(字典值):包含有关如何运行分布式训练的信息的字典(默认值:None)。 

  • 要将 smdistributed.dataparallel 用作分布策略,请按以下代码所示配置字典:

    distribution = { "smdistributed": { "dataparallel": { "enabled": True } } }
  • custom_mpi_options(字符串值)(可选):自定义 MPI 选项。下面是在定义 distribution 时如何使用此参数的示例。要了解更多信息,请参阅自定义 MPI 选项

    distribution = { "smdistributed": { "dataparallel": { "enabled": True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION" } } }

instance_type(字符串值):要使用的 Amazon EC2 实例的类型。

  • 如果使用 smdistributeddataparallel 分布策略,您必须使用以下实例类型之一:ml.p4d.24xlargeml.p3dn.24xlargeml.p3.16xlarge。为获得最佳性能,我们建议您使用启用 EFA 的实例,即 ml.p3dn.24xlargeml.p4d.24xlarge

使用 SageMaker 通用估算器扩展预构建容器

您可以自定义 SageMaker 预构建容器或扩展这些容器,以满足您的算法或模型提出的、但预构建 SageMaker Docker 映像不支持的任何额外的功能要求。有关如何扩展预构建容器的示例,请参阅扩展预构建容器

要扩展预构建的容器或调整您自己的容器以使用该库,您必须使用支持的框架中列出的映像之一。

重要

从 TensorFlow 2.4.1 和 PyTorch 1.8.1 开始,框架 DLC 支持启用 EFA 的实例类型(ml.p3dn.24xlargeml.p4d.24xlarge)。我们建议您使用包含 TensorFlow 2.4.1 或更高版本以及 PyTorch 1.8.1 或更高版本的 DLC 映像。

例如,如果您使用 PyTorch,则 Dockerfile 应该包含类似于以下内容的 FROM 语句:

# SageMaker PyTorch image FROM 763104351884.dkr.ecr.<aws-region>.amazonaws.com/pytorch-training:<image-tag> ENV PATH="/opt/ml/code:${PATH}" # this environment variable is used by the SageMaker PyTorch container to determine our user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code # /opt/ml and all subdirectories are utilized by SageMaker, use the /code subdirectory to store your user code. COPY cifar10.py /opt/ml/code/cifar10.py # Defines cifar10.py as script entrypoint ENV SAGEMAKER_PROGRAM cifar10.py

您可以使用 SageMaker 训练工具包和 SageMaker 分布式数据并行库的二进制文件,进一步自定义自己的 Docker 容器,使其与 SageMaker 配合使用。要了解更多信息,请参阅以下部分中的说明。

使用 SageMaker 分布式数据并行库创建您自己的 Docker 容器

要构建自己的 Docker 容器进行训练并使用 SageMaker 数据并行库,您必须在 Dockerfile 中包含正确的依赖项以及 SageMaker 分布式并行库的二进制文件。此部分提供的说明介绍了如何使用数据并行库,在 SageMaker 中创建具有最小依赖项集合的完整 Dockerfile,以便在 SageMaker 中进行分布式训练。

注意

此自定义 Docker 选项将 SageMaker 数据并行库作为二进制文件,仅适用于 PyTorch。

使用 SageMaker 训练工具包和数据并行库创建 Dockerfile
  1. 使用 NVIDIA CUDA 提供的 Docker 映像开始。使用包含 CUDA 运行时系统和开发工具(头文件和库)的 cuDNN 开发人员版本,从 PyTorch 源代码进行构建。

    FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04
    提示

    官方的 Amazon Deep Learning Container (DLC) 映像基于 NVIDIA CUDA 基础映像而构建。如果您想使用预构建的 DLC 映像作为参考,同时遵循其余说明部分操作,请参阅适用于 PyTorch Dockerfile 的 Amazon Deep Learning Containers

  2. 添加以下参数以指定 PyTorch 和其他软件包的版本。此外,请指明 SageMaker 数据并行库和其他软件的 Amazon S3 存储桶路径,以便使用 Amazon 资源,例如 Amazon S3 插件。

    要使用在以下代码示例所提供的库之外的第三方库版本,我们建议您查看适用于 PyTorch 的 Amazon Deep Learning Container 的官方 Dockerfile,以查找经过测试且适合您的应用程序的兼容版本。

    要查找 SMDATAPARALLEL_BINARY 参数的 URL,请参阅支持的框架中的查找表。

    ARG PYTORCH_VERSION=1.10.2 ARG PYTHON_SHORT_VERSION=3.8 ARG EFA_VERSION=1.14.1 ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/${PYTORCH_VERSION}/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl ARG PT_S3_WHL_GPU=https://aws-s3-plugin.s3.us-west-2.amazonaws.com/binaries/0.0.1/1c3e69e/awsio-0.0.1-cp38-cp38-manylinux1_x86_64.whl ARG CONDA_PREFIX="/opt/conda" ARG BRANCH_OFI=1.1.3-aws
  3. 设置以下环境变量,以便正确构建 SageMaker 训练组件并运行数据并行库。在后续步骤中,您将为组件使用这些变量。

    # Set ENV variables required to build PyTorch ENV TORCH_CUDA_ARCH_LIST="7.0+PTX 8.0" ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all" ENV NCCL_VERSION=2.10.3 # Add OpenMPI to the path. ENV PATH /opt/amazon/openmpi/bin:$PATH # Add Conda to path ENV PATH $CONDA_PREFIX/bin:$PATH # Set this enviroment variable for SageMaker to launch SMDDP correctly. ENV SAGEMAKER_TRAINING_MODULE=sagemaker_pytorch_container.training:main # Add enviroment variable for processes to be able to call fork() ENV RDMAV_FORK_SAFE=1 # Indicate the container type ENV DLC_CONTAINER_TYPE=training # Add EFA and SMDDP to LD library path ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH" ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH
  4. 在后续步骤中安装或更新 curlwgetgit,以下载和构建软件包。

    RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ curl \ wget \ git \ && rm -rf /var/lib/apt/lists/*
  5. 安装用于 Amazon EC2 网络通信的 Elastic Fabric Adapter (EFA) 软件。

    RUN DEBIAN_FRONTEND=noninteractive apt-get update RUN mkdir /tmp/efa \ && cd /tmp/efa \ && curl --silent -O https://efa-installer.amazonaws.com/aws-efa-installer-${EFA_VERSION}.tar.gz \ && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \ && cd aws-efa-installer \ && ./efa_installer.sh -y --skip-kmod -g \ && rm -rf /tmp/efa
  6. 安装 Conda 来处理软件包管理。

    RUN curl -fsSL -v -o ~/miniconda.sh -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \ chmod +x ~/miniconda.sh && \ ~/miniconda.sh -b -p $CONDA_PREFIX && \ rm ~/miniconda.sh && \ $CONDA_PREFIX/bin/conda install -y python=${PYTHON_SHORT_VERSION} conda-build pyyaml numpy ipython && \ $CONDA_PREFIX/bin/conda clean -ya
  7. 获取、构建和安装 PyTorch 及其依赖项。我们从源代码构建了 PyTorch,因为我们需要控制 NCCL 的版本,以确保与 Amazon OFI NCCL 插件的兼容性。

    1. 按照 PyTorch 官方 dockerfile 中的步骤,安装构建依赖项并设置 ccache 以加快重新编译速度。

      RUN DEBIAN_FRONTEND=noninteractive \ apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ ccache \ cmake \ git \ libjpeg-dev \ libpng-dev \ && rm -rf /var/lib/apt/lists/* # Setup ccache RUN /usr/sbin/update-ccache-symlinks RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache
    2. 安装 PyTorch 的通用依赖项和 Linux 依赖项

      # Common dependencies for PyTorch RUN conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses # Linux specific dependency for PyTorch RUN conda install -c pytorch magma-cuda113
    3. 克隆 PyTorch GitHub 存储库

      RUN --mount=type=cache,target=/opt/ccache \ cd / \ && git clone --recursive https://github.com/pytorch/pytorch -b v${PYTORCH_VERSION}
    4. 安装并构建特定的 NCCL 版本。为此,请将 PyTorch 默认 NCCL 文件夹 (/pytorch/third_party/nccl) 中的内容替换为 NVIDIA 存储库中的特定 NCCL 版本。NCCL 版本在本指南的第 3 步中设置。

      RUN cd /pytorch/third_party/nccl \ && rm -rf nccl \ && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \ && cd nccl \ && make -j64 src.build CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_80,code=sm_80" \ && make pkg.txz.build \ && tar -xvf build/pkg/txz/nccl_*.txz -C $CONDA_PREFIX --strip-components=1
    5. 构建和安装 PyTorch。完成此过程通常需要一个小时多一点。它使用上一步中下载的 NCCL 版本构建。

      RUN cd /pytorch \ && CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" \ python setup.py install \ && rm -rf /pytorch
  8. 构建并安装 Amazon OFI NCCL 插件。这使得 libfabric 支持 SageMaker 数据并行库。

    RUN DEBIAN_FRONTEND=noninteractive apt-get update \ && apt-get install -y --no-install-recommends \ autoconf \ automake \ libtool RUN mkdir /tmp/efa-ofi-nccl \ && cd /tmp/efa-ofi-nccl \ && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \ && cd aws-ofi-nccl \ && ./autogen.sh \ && ./configure --with-libfabric=/opt/amazon/efa \ --with-mpi=/opt/amazon/openmpi \ --with-cuda=/usr/local/cuda \ --with-nccl=$CONDA_PREFIX \ && make \ && make install \ && rm -rf /tmp/efa-ofi-nccl
  9. 构建并安装 TorchVision

    RUN pip install --no-cache-dir -U \ packaging \ mpi4py==3.0.3 RUN cd /tmp \ && git clone https://github.com/pytorch/vision.git -b v0.9.1 \ && cd vision \ && BUILD_VERSION="0.9.1+cu111" python setup.py install \ && cd /tmp \ && rm -rf vision
  10. 安装和配置 OpenSSH。MPI 需要使用 OpenSSH 在容器之间进行通信。允许 OpenSSH 与容器通信而无需请求确认。

    RUN apt-get update \ && apt-get install -y --allow-downgrades --allow-change-held-packages --no-install-recommends \ && apt-get install -y --no-install-recommends openssh-client openssh-server \ && mkdir -p /var/run/sshd \ && cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new \ && echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new \ && mv /etc/ssh/ssh_config.new /etc/ssh/ssh_config \ && rm -rf /var/lib/apt/lists/* # Configure OpenSSH so that nodes can communicate with each other RUN mkdir -p /var/run/sshd && \ sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd RUN rm -rf /root/.ssh/ && \ mkdir -p /root/.ssh/ && \ ssh-keygen -q -t rsa -N '' -f /root/.ssh/id_rsa && \ cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys \ && printf "Host *\n StrictHostKeyChecking no\n" >> /root/.ssh/config
  11. 安装 PT S3 插件以高效访问 Amazon S3 中的数据集。

    RUN pip install --no-cache-dir -U ${PT_S3_WHL_GPU} RUN mkdir -p /etc/pki/tls/certs && cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
  12. 安装 libboost 库。对于 SageMaker 数据并行库的异步 IO 功能联网,此软件包为必需。

    WORKDIR / RUN wget https://sourceforge.net/projects/boost/files/boost/1.73.0/boost_1_73_0.tar.gz/download -O boost_1_73_0.tar.gz \ && tar -xzf boost_1_73_0.tar.gz \ && cd boost_1_73_0 \ && ./bootstrap.sh \ && ./b2 threading=multi --prefix=${CONDA_PREFIX} -j 64 cxxflags=-fPIC cflags=-fPIC install || true \ && cd .. \ && rm -rf boost_1_73_0.tar.gz \ && rm -rf boost_1_73_0 \ && cd ${CONDA_PREFIX}/include/boost
  13. 安装以下 SageMaker 工具用于 PyTorch 训练。

    WORKDIR /root RUN pip install --no-cache-dir -U \ smclarify \ "sagemaker>=2,<3" \ sagemaker-experiments==0.* \ sagemaker-pytorch-training
  14. 最后,安装 SageMaker 数据并行二进制文件和其余依赖项。

    RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ jq \ libhwloc-dev \ libnuma1 \ libnuma-dev \ libssl1.1 \ libtool \ hwloc \ && rm -rf /var/lib/apt/lists/* RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
  15. 完成 Dockerfile 的创建后,请参阅调整自己的训练容器,了解如何构建 Docker 容器,将其托管在 Amazon ECR 中,并使用 SageMaker Python SDK 运行训练作业。

以下示例代码显示了将之前所有代码块组合在一起的完整 Dockerfile。

# This file creates a docker image with minimum dependencies to run SageMaker data parallel training FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 # Set appropiate versions and location for components ARG PYTORCH_VERSION=1.10.2 ARG PYTHON_SHORT_VERSION=3.8 ARG EFA_VERSION=1.14.1 ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/${PYTORCH_VERSION}/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl ARG PT_S3_WHL_GPU=https://aws-s3-plugin.s3.us-west-2.amazonaws.com/binaries/0.0.1/1c3e69e/awsio-0.0.1-cp38-cp38-manylinux1_x86_64.whl ARG CONDA_PREFIX="/opt/conda" ARG BRANCH_OFI=1.1.3-aws # Set ENV variables required to build PyTorch ENV TORCH_CUDA_ARCH_LIST="3.7 5.0 7.0+PTX 8.0" ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all" ENV NCCL_VERSION=2.10.3 # Add OpenMPI to the path. ENV PATH /opt/amazon/openmpi/bin:$PATH # Add Conda to path ENV PATH $CONDA_PREFIX/bin:$PATH # Set this enviroment variable for SageMaker to launch SMDDP correctly. ENV SAGEMAKER_TRAINING_MODULE=sagemaker_pytorch_container.training:main # Add enviroment variable for processes to be able to call fork() ENV RDMAV_FORK_SAFE=1 # Indicate the container type ENV DLC_CONTAINER_TYPE=training # Add EFA and SMDDP to LD library path ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH" ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH # Install basic dependencies to download and build other dependencies RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ curl \ wget \ git \ && rm -rf /var/lib/apt/lists/* # Install EFA. # This is required for SMDDP backend communication RUN DEBIAN_FRONTEND=noninteractive apt-get update RUN mkdir /tmp/efa \ && cd /tmp/efa \ && curl --silent -O https://efa-installer.amazonaws.com/aws-efa-installer-${EFA_VERSION}.tar.gz \ && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \ && cd aws-efa-installer \ && ./efa_installer.sh -y --skip-kmod -g \ && rm -rf /tmp/efa # Install Conda RUN curl -fsSL -v -o ~/miniconda.sh -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \ chmod +x ~/miniconda.sh && \ ~/miniconda.sh -b -p $CONDA_PREFIX && \ rm ~/miniconda.sh && \ $CONDA_PREFIX/bin/conda install -y python=${PYTHON_SHORT_VERSION} conda-build pyyaml numpy ipython && \ $CONDA_PREFIX/bin/conda clean -ya # Install PyTorch. # Start with dependencies listed in official PyTorch dockerfile # https://github.com/pytorch/pytorch/blob/master/Dockerfile RUN DEBIAN_FRONTEND=noninteractive \ apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ ccache \ cmake \ git \ libjpeg-dev \ libpng-dev && \ rm -rf /var/lib/apt/lists/* # Setup ccache RUN /usr/sbin/update-ccache-symlinks RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache # Common dependencies for PyTorch RUN conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses # Linux specific dependency for PyTorch RUN conda install -c pytorch magma-cuda113 # Clone PyTorch RUN --mount=type=cache,target=/opt/ccache \ cd / \ && git clone --recursive https://github.com/pytorch/pytorch -b v${PYTORCH_VERSION} # Note that we need to use the same NCCL version for PyTorch and OFI plugin. # To enforce that, install NCCL from source before building PT and OFI plugin. # Install NCCL. # Required for building OFI plugin (OFI requires NCCL's header files and library) RUN cd /pytorch/third_party/nccl \ && rm -rf nccl \ && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \ && cd nccl \ && make -j64 src.build CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_80,code=sm_80" \ && make pkg.txz.build \ && tar -xvf build/pkg/txz/nccl_*.txz -C $CONDA_PREFIX --strip-components=1 # Build and install PyTorch. RUN cd /pytorch \ && CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" \ python setup.py install \ && rm -rf /pytorch RUN ccache -C # Build and install OFI plugin. \ # It is required to use libfabric. RUN DEBIAN_FRONTEND=noninteractive apt-get update \ && apt-get install -y --no-install-recommends \ autoconf \ automake \ libtool RUN mkdir /tmp/efa-ofi-nccl \ && cd /tmp/efa-ofi-nccl \ && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \ && cd aws-ofi-nccl \ && ./autogen.sh \ && ./configure --with-libfabric=/opt/amazon/efa \ --with-mpi=/opt/amazon/openmpi \ --with-cuda=/usr/local/cuda \ --with-nccl=$CONDA_PREFIX \ && make \ && make install \ && rm -rf /tmp/efa-ofi-nccl # Build and install Torchvision RUN pip install --no-cache-dir -U \ packaging \ mpi4py==3.0.3 RUN cd /tmp \ && git clone https://github.com/pytorch/vision.git -b v0.9.1 \ && cd vision \ && BUILD_VERSION="0.9.1+cu111" python setup.py install \ && cd /tmp \ && rm -rf vision # Install OpenSSH. # Required for MPI to communicate between containers, allow OpenSSH to talk to containers without asking for confirmation RUN apt-get update \ && apt-get install -y --allow-downgrades --allow-change-held-packages --no-install-recommends \ && apt-get install -y --no-install-recommends openssh-client openssh-server \ && mkdir -p /var/run/sshd \ && cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new \ && echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new \ && mv /etc/ssh/ssh_config.new /etc/ssh/ssh_config \ && rm -rf /var/lib/apt/lists/* # Configure OpenSSH so that nodes can communicate with each other RUN mkdir -p /var/run/sshd && \ sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd RUN rm -rf /root/.ssh/ && \ mkdir -p /root/.ssh/ && \ ssh-keygen -q -t rsa -N '' -f /root/.ssh/id_rsa && \ cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys \ && printf "Host *\n StrictHostKeyChecking no\n" >> /root/.ssh/config # Install PT S3 plugin. # Required to efficiently access datasets in Amazon S3 RUN pip install --no-cache-dir -U ${PT_S3_WHL_GPU} RUN mkdir -p /etc/pki/tls/certs && cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt # Install libboost from source. # This package is needed for smdataparallel functionality (for networking asynchronous IO). WORKDIR / RUN wget https://sourceforge.net/projects/boost/files/boost/1.73.0/boost_1_73_0.tar.gz/download -O boost_1_73_0.tar.gz \ && tar -xzf boost_1_73_0.tar.gz \ && cd boost_1_73_0 \ && ./bootstrap.sh \ && ./b2 threading=multi --prefix=${CONDA_PREFIX} -j 64 cxxflags=-fPIC cflags=-fPIC install || true \ && cd .. \ && rm -rf boost_1_73_0.tar.gz \ && rm -rf boost_1_73_0 \ && cd ${CONDA_PREFIX}/include/boost # Install SageMaker PyTorch training. WORKDIR /root RUN pip install --no-cache-dir -U \ smclarify \ "sagemaker>=2,<3" \ sagemaker-experiments==0.* \ sagemaker-pytorch-training # Install SageMaker data parallel binary (SMDDP) # Start with dependencies RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \ apt-get update && apt-get install -y --no-install-recommends \ jq \ libhwloc-dev \ libnuma1 \ libnuma-dev \ libssl1.1 \ libtool \ hwloc \ && rm -rf /var/lib/apt/lists/* # Install SMDDP RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
提示

有关创建自定义 Dockerfile 以用于 SageMaker 中的训练的更多一般信息,请参阅使用自己的训练算法

提示

如果要扩展自定义 Dockerfile 以纳入 SageMaker 模型并行库,请参阅使用 SageMaker 分布式模型并行库创建您自己的 Docker 容器