第 2 步:使用 SageMaker Python 开发工具包启动训练作业 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

第 2 步:使用 SageMaker Python 开发工具包启动训练作业

这些区域有: SageMaker Python SDK 支持使用 ML 框架对模型进行托管训练,例如 TensorFlow PyTorch。要使用这些框架之一启动培训作业,您需要定义 SageMaker TensorFlow 评估程序,a SageMaker PyTorch 估算程序,或者 SageMaker 通用的估算程序以使用修改后的训练脚本和模型并行度配置。

使用 SageMaker TensorFlow 和 PyTorch 估算程序

这些区域有: TensorFlow 和 PyTorch 估计器类包含distribution参数,您可以使用该参数来指定使用分布式训练框架的配置参数。这些区域有: SageMaker 模型 parallel 库内部使用 MPI 进行混合数据和模型并行性,因此您必须将 MPI 选项与库一起使用。

下面的模板 TensorFlow 要么 PyTorch 估算程序显示如何配置distribution用于使用 SageMaker 使用 MPI 模型 parallel 库。

Using the SageMaker TensorFlow estimator
import sagemaker from sagemaker.tensorflow import TensorFlow smp_options = { "enabled":True, # Required "parameters": { "partitions": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "horovod": True, # Use this for hybrid model and data parallelism } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = TensorFlow( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='2.6.3', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')
Using the SageMaker PyTorch estimator
import sagemaker from sagemaker.pytorch import PyTorch smp_options = { "enabled":True, "parameters": { # Required "pipeline_parallel_degree": 2, # Required "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "ddp": True, } } mpi_options = { "enabled" : True, # Required "processes_per_host" : 8, # Required # "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none" } smd_mp_estimator = PyTorch( entry_point="your_training_script.py", # Specify your train script source_dir="location_to_your_script", role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.p3.16xlarge', framework_version='1.10.2', py_version='py38', distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

要启用库,你需要将配置字典传递给"smdistributed""mpi"密钥通过distribution的参数 SageMaker 估计函数。

的配置参数 SageMaker 模型并行

  • 对于"smdistributed"关键,用"modelparallel"key 和以下内部字典。

    注意

    使用"modelparallel""dataparallel"在一个培训工作中不受支持。

    • "enabled" – 必需。要启用模型并行性,请设置"enabled": True.

    • "parameters" – 必需。指定一组参数 SageMaker 模型并行。

      • 有关常见参数的完整列表,请参阅。的参数smdistributed中的SageMaker Python 开发工具包文.

        对于 TensorFlow,请参阅TensorFlow 特定的参数.

        对于 PyTorch,请参阅PyTorch 特定的参数.

      • "pipeline_parallel_degree"(或者"partitions"smdistributed-modelparallel<v1.6.0) — 必需。其中的参数smdistributed,则需要此参数来指定要拆分到多少个模型分区。

        重要

        参数名称发生了突破性的变化。这些区域有:"pipeline_parallel_degree"参数替换"partitions"以来smdistributed-modelparallelv1.6.0。有关更多信息,请参阅 。常见参数为了 SageMaker 模型并行度配置和SageMaker 分布式模型并行发行说中的SageMaker Python 开发工具包文.

  • 对于"mpi"key,传递一个包含以下内容的字典:

    • "enabled" – 必需。SetTrue使用 MPI 启动分布式培训作业。

    • "processes_per_host" – 必需。指定 MPI 应在每台主机上启动的进程数。In SageMaker 主机是单个Amazon EC2 ML 实例. 这些区域有: SageMaker Python 开发工具包维护 one-to-one 跨模型和数据并行性在流程和 GPU 之间进行映射。这意味着 SageMaker 在单个独立的 GPU 上安排每个进程,并且没有 GPU 包含多个进程。如果您使用 PyTorch,则必须通过以下方式将每个进程限制在自己的设备上torch.cuda.set_device(smp.local_rank()). 要了解更多信息,请参阅 PyTorch

      重要

      process_per_host 必须不大于每个实例的 GPU 数量,通常等于每个实例的 GPU 数量。

    • "custom_mpi_options"(可选)— 使用此键传递您可能需要的任何自定义 MPI 选项。如果没有将任何 MPI 自定义选项传递给密钥,则默认情况下,MPI 选项将设置为以下标志。

      --mca btl_vader_single_copy_mechanism none
      注意

      您无需为密钥显式指定此默认标志。如果明确指定它,则分布式模型 parallel 训练作业可能会失败并显示以下错误:

      The following MCA parameter has been listed multiple times on the command line: MCA param: btl_vader_single_copy_mechanism MCA parameters can only be listed once on a command line to ensure there is no ambiguity as to its value. Please correct the situation and try again.
      提示

      如果您使用启用 EPA 的实例类型启动培训作业,例如ml.p4d.24xlargeml.p3dn.24xlarge,使用以下标志以获得最佳性能:

      -x FI_EFA_USE_DEVICE_RDMA=1 -x FI_PROVIDER=efa -x RDMAV_FORK_SAFE=1

使用估算器启动训练作业和 SageMaker 模型 parallel 配置的训练脚本,运行estimator.fit()function.

鉴于配置参数,库如何拆分模型

在为模型分区数量指定值时(pipeline_parallel_degree为了 PyTorch 要么partition对于 TensorFlow),GPU 的总数(processes_per_host) 必须由模型分区的数量整除。要正确设置它,你必须指定正确的值pipeline_parallel_degreeprocesses_per_host参数。简单的数学如下:

(pipeline_parallel_degree) x (data_parallelism_degree) = processes_per_host

该库负责计算模型副本的数量(data_parallelism_degree) 考虑到你提供的两个输入参数。例如,如果您设置pipeline_parallel_degree=4processes_per_host=8将机器学习实例与八个 GPU 工作器一起使用,例如ml.p3.16xlarge,库自动设置双向数据并行机制(data_parallelism_degree=2)。

下图说明了双向数据并行度和四向模型并行度如何分布在八个 GPU 上:模型分区在四个 GPU 上,每个分区分配给两个 GPU。

使用以下资源了解有关使用中的模型并行性功能的更多信息: SageMaker Python 开发工具包:

扩展包含 SageMaker 分布式模型并行库的预构建 Docker 容器

要扩展预构建的容器并使用 SageMaker 的分布式模型 parallel 库,必须使用其中一个可用AmazonDeep Learning Containers (DLC) 映像 PyTorch 或 TensorFlow。这些区域有: SageMaker 分布式模型 parallel 库包含在 TensorFlow (2.3.0 及更高版本)和 PyTorch (1.6.0 及更高版本)使用 CUDA 的 DLC 映像 (cuxyz)。有关 DLC 映像的完整列表,请参阅可用的 Deep Learning Containers 镜像中的AmazonDeep Learning 容器 GitHub 知识库.

提示

我们建议您使用包含 TensorFlow 的最新版本的镜像,或 PyTorch 以获得最多 up-to-date 的版本 SageMaker 分布式模型 parallel 库。

例如,你的 Dockerfile 应该包含FROM类似于以下内容的语句:

# Use the SageMaker DLC image URI for TensorFlow or PyTorch FROM aws-dlc-account-id.dkr.ecr.aws-region.amazonaws.com/framework-training:{framework-version-tag} # Add your dependencies here RUN ... ENV PATH="/opt/ml/code:${PATH}" # this environment variable is used by the SageMaker container to determine our user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

此外,当您定义 PyTorch 要么 TensorFlow 估算程序,则必须指定entry_point为您的训练脚本。这应与标识的路径相同。ENV SAGEMAKER_SUBMIT_DIRECTORY在 Dockerfile 中。

提示

您必须将此 Docker 容器推送到 Amazon Elastic Container Registry (Amazon ECR) 并使用镜像 URI (image_uri) 定义 SageMaker 用于训练的估计器。有关更多信息,请参阅 。扩展预构建的容器.

完成托管 Docker 容器并检索容器的映像 URI 后,创建 SageMaker PyTorch估计器对象如下。此示例假定您已定义。smp_optionsmpi_options.

smd_mp_estimator = Estimator( entry_point="your_training_script.py", role=sagemaker.get_execution_role(), instance_type='ml.p3.16xlarge', sagemaker_session=sagemaker_session, image_uri='your_aws_account_id.dkr.ecr.region.amazonaws.com/name:tag' instance_count=1, distribution={ "smdistributed": smp_options, "mpi": mpi_options }, base_job_name="SMD-MP-demo", ) smd_mp_estimator.fit('s3://my_bucket/my_training_data/')

使用创建自己的 Docker 容器 SageMaker 分布式模型并行库

要构建自己的 Docker 容器进行训练并使用 SageMaker 模型 parallel 库,则必须在 Dockerfile 中包含正确的依赖关系和 SageMaker 分布式 parallel 库的二进制文件。本节提供了正确准备 SageMaker 训练环境和您自己的 Docker 容器中的模型 parallel 库。

注意

这个自定义 Docker 选项带 SageMaker 模型 parallel 库作为二进制文件仅适用于 PyTorch。

使用 SageMaker 培训工具包和模型 parallel 库

  1. 从其中一个开始NVIDIA CUDA 基本映像.

    FROM <cuda-cudnn-base-image>
    提示

    官方Amazon深度学习容器 (DLC) 映像是从NVIDIA CUDA 基本映像. 我们建议您查看的官方 DockerfileAmazonPyTorch 的深度学习容器查找需要安装哪些版本的库以及如何配置它们。官方 Dockerfile 已完整、基准测试和管理 SageMaker 和深度学习容器服务团队。在提供的链接中,选择你使用的 PyTorch 版本,选择 CUDA (cuxyz) 文件夹,然后选择以结尾的 Dockerfile.gpu要么.sagemaker.gpu.

  2. 要设置分布式培训环境,您需要安装用于通信和网络设备的软件,例如EFA Elastic Fabric Adapter (EFA)NVIDIA 集体沟通图书馆 (NCCL), 和Open MPI. 取决于 PyTorch 和你选择的 CUDA 版本,你必须安装兼容版本的库。

    重要

    由于 SageMaker 模型 parallel 库需要 SageMaker parallel 后续步骤中,我们强烈建议您按照以下内容的说明操作:使用创建自己的 Docker 容器 SageMaker 分布式数据并行库正确设置 SageMaker 分布式培训的培训环境。

    有关使用 NCCL 和 Open MPI 设置 EFA 的更多信息,请参阅。EFA 和 MPI 入门EFA 和 NCCL 入门.

  3. 添加以下参数以指定 SageMaker 为 PyTorch 分发了培训包。这些区域有: SageMaker 模型 parallel 库需要 SageMaker 数据 parallel 库以使用跨节点远程直接内存访问 (RDMA)。

    ARG SMD_MODEL_PARALLEL_URL=https://sagemaker-distributed-model-parallel.s3.us-west-2.amazonaws.com/pytorch-1.10.0/build-artifacts/2022-02-21-19-26/smdistributed_modelparallel-1.7.0-cp38-cp38-linux_x86_64.whl ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.10.2/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl
  4. 安装依赖项 SageMaker 模型 parallel 库需要。

    1. 安装METIS库.

      ARG METIS=metis-5.1.0 RUN rm /etc/apt/sources.list.d/* \ && wget -nv http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/${METIS}.tar.gz \ && gunzip -f ${METIS}.tar.gz \ && tar -xvf ${METIS}.tar \ && cd ${METIS} \ && apt-get update \ && make config shared=1 \ && make install \ && cd .. \ && rm -rf ${METIS}.tar* \ && rm -rf ${METIS} \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean
    2. 安装RAPID 内存管理器库. 这需要CMake3.14 或更高版本。

      ARG RMM_VERSION=0.15.0 RUN wget -nv https://github.com/rapidsai/rmm/archive/v${RMM_VERSION}.tar.gz \ && tar -xvf v${RMM_VERSION}.tar.gz \ && cd rmm-${RMM_VERSION} \ && INSTALL_PREFIX=/usr/local ./build.sh librmm \ && cd .. \ && rm -rf v${RMM_VERSION}.tar* \ && rm -rf rmm-${RMM_VERSION}
  5. 安装 SageMaker 模型 parallel 库。

    RUN pip install --no-cache-dir -U ${SMD_MODEL_PARALLEL_URL}
  6. 安装 SageMaker 数据 parallel 库。

    RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
  7. 安装sagemaker 培训工具包. 该工具包包包含创建与兼容的容器所必须使用的常见功能。 SageMaker 培训平台和 SageMaker Python 开发工具包。

    RUN pip install sagemaker-training
  8. 创建完 Dockerfile 后,请参阅调整您自己的训练容器了解如何构建 Docker 容器并将其托管在 Amazon ECR 中。

提示

有关在 SageMaker 中创建自定义 DockerFile 的更多常规信息,请参阅。使用您自己的训练算法.