运行 SageMaker 分布式数据并行培训 Job - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

运行 SageMaker 分布式数据并行培训 Job

了解如何使用 SageMaker Python SDK 和适应的训练脚本与 SageMaker 的分布式数据并行库运行分布式数据并行训练作业。有关 API 规范,请参阅并行分布式数据在 SageMaker Python 开发工具包文档中。

使用 SageMaker 的分布式数据并行库

要使用 SageMaker 的分布式数据并行库,您可以从训练脚本开始。与 SageMaker 上的任何培训工作一样,您可以使用训练脚本启动 SageMaker 培训作业。首先,我们建议您按以下方式使用 SageMaker 数据并行库:

使用任一选项,您都可以使用Amazon SageMaker 分布式培训笔记本示例与本文档一起提供以开始使用该文档。 

将数据并行库与 SageMaker 的 Python 软件开发工具包一起使用

要使用 SageMaker 的分布式数据并行库,必须为其中一个受支持的框架创建训练脚本,并使用 SageMaker Python SDK 启动培训作业。要了解如何将库合并到训练脚本中,请参阅使用 SageMaker 的分布式模型并行库修改训练脚本. 库 API 文档位于 SageMaker Python 软件开发工具包中。请参阅 SageMaker数据并行 API 文档.

SageMaker 支持以下培训环境配置:

  • 您可以使用预构建的 TensorFlow 或 PyTorch 容器。

  • 您可以自定义或扩展 SageMaker 预构建的容器,以满足预构建的算法或模型的任何其他功能要求,而预构建的容器也可以满足预构建的容器。有关如何扩展预构建的容器的示例,请参阅扩展预构建容器.

    要扩展预构建的容器,或者调整自己的容器以使用库,您必须使用 PyTorch 或 TensorFlow GPU 通用框架基础图像之一。分布式数据并行库包含在所有 CUDA 11 (cu11x)TensorFlow 2.3.x 和 PyTorch 1.6.x 版本化图像和更高版本。请参阅可用的 Deep Learning Containers 映像以获取可用图像的列表。

    重要

    建议您使用包含最新版本的 TensorFlow 或 PyTorch 的图像来访问最新版本的 SageMaker 分布式数据并行库。包含 TensorFlow 2.4.1 和 PyTorch 1.8.1 版本和更高版本的所有映像都支持 EFA 实例类型 (ml.p3dn.24xlargeml.p4d.24xlarge)。

    例如,如果您使用的是 PyTorch 1.8.1,则您的码头文件应该包含FROM语句类似于以下所示:

    # SageMaker PyTorch image FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.8.1-gpu-py36-cu111-ubuntu18.04 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
  • 您可以调整自己的 Docker 容器,使用SageMaker 训练工具包. 有关示例,请参阅 。调整您自己的训练容器.

在所有情况下,您都可以使用 SageMaker Python 开发工具包启动您的作业Estimator.

如果您使用的是 SageMaker 预先构建的 PyTorch 或 TensorFlow 容器,请参阅以下部分以了解如何配置Estimator以使用库。

如果您携带自己的容器或扩展预构建的容器,则可以创建Estimator类与所需的 Docker 映像。

TensorFlow 评估程序

您可以使用 SageMaker 的分布式数据并行库 API通过指定smdistributed dataparallel作为distribution策略。 请参阅SageMaker TensorFlow 估计器 API 文档以获取有关 API 的完整详细信息。

classsagemaker.tensorflow.estimator.TensorFlow(Py_ 版本 = 无,框架 _ 版本 = 无,模型目录 = 无,图像-URI = 无,分发 = 无,侏儒)

以下两个参数需要使用smdistributed.dataparallel并使用 TensorFlow。

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

  • 使用smdistributed.dataparallel作为分配策略,请使用以下选项:

    distribution = { "smdistributed": { "dataparallel": { "enabled": True } } }
  • custom_mpi_options (str)(optional):自定义 MPI 选项。下面是说明用法的示例说明如何在定义distribution. 要了解更多信息,请参阅“自定义 MPI 选项”。

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

train_instance_type (str)(required):要使用的 Amazon EC2 实例的类型。

  • 如果smdistributed.dataparallel分发策略,则允许的实例类型为:ml.p4d.24xlargeml.p3dn.24xlarge,以及ml.p3.16xlarge. 为获得最佳性能,建议您使用 EFA 支持的实例,ml.p3dn.24xlarge或者ml.p4d.24xlarge,其中包含最新支持的 TensorFlow 版本。

示例

from sagemaker.tensorflow import TensorFlow tf_estimator = TensorFlow( base_job_name = "training_job_name_prefix", entry_point="tf-train.py", role="SageMakerRole", framework_version="2.4.1", # You must set py_version to py36 py_version="py37",     # For training with multi node distributed training, set this count. # Example: 2,3,4,..8 instance_count=2,     # For training with p3dn instance use - ml.p3dn.24xlarge instance_type="ml.p3.16xlarge",     # Training using smdistributed.dataparallel Distributed Training Framework distribution={"smdistributed": {"dataparallel": {"enabled": True}}} ) tf_estimator.fit("s3://bucket/path/to/training/data")
注意

如果您使用的是 SageMaker Python 开发工具包 1.x,则需要使用hyperparameters指定要使用smdistributed dataparallel作为分布式培训战略.

from sagemaker.tensorflow import TensorFlow tf_estimator = TensorFlow(                           ...                           # Training using smdistributed.dataparallel Distributed Training Framework                           hyperparameters={"sagemaker_distributed_dataparallel_enabled": True},                           ...                          ) tf_estimator.fit("s3://bucket/path/to/training/data")

PyTorch 估算器

您可以使用 SageMaker 的分布式数据并行库 API通过指定smdistributed dataparallel作为distribution策略。 请参阅SageMaker PyTorch 估算器 API 规范了解 API 的完整详细信息。

classsagemaker.pytorch.estimator.PyTorch(Py_ 版本 = 无,框架 _ 版本 = 无,模型目录 = 无,图像-URI = 无, hyperparameters=None, 分发 = 无,侏儒)

以下两个参数的 SageMaker PyTorchEstimator对于使用smdistributed.dataparallel在 SageMaker 与派 PyTorch。

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

  • 使用smdistributed.dataparallel作为分配策略,请使用以下选项:

    distribution={ "smdistributed": { "dataparallel": { "enabled": True } } }
  • custom_mpi_options (str)(optional):自定义 MPI 选项。下面是说明用法的示例说明如何在定义distribution. 要了解更多信息,请参阅“自定义 MPI 选项”。

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

train_instance_type (str)(required):要使用的 Amazon EC2 实例的类型。

  • 如果smdistributed.dataparallel分发策略,则允许的实例类型为:ml.p4d.24xlargeml.p3dn.24xlarge,以及ml.p3.16xlarge. 为获得最佳性能,建议您使用 EFA 支持的实例,ml.p3dn.24xlarge或者ml.p4d.24xlarge,其中包含最新支持的 PyTorch 版本。

示例

from sagemaker.pytorch import PyTorch pt_estimator = PyTorch( base_job_name="training_job_name_prefix", entry_point="pt-train.py", role="SageMakerRole", # You must set py_version to py36 py_version="py36", framework_version="1.8.1",     # For training with multi node distributed training, set this count.     # Example: 2,3,4,..8 instance_count=2,     # For training with p3dn instance use - ml.p3dn.24xlarge instance_type="ml.p3.16xlarge",     # Training using smdistributed.dataparallel Distributed Training Framework distribution={"smdistributed": {"dataparallel": {"enabled": True}}} ) pt_estimator.fit("s3://bucket/path/to/training/data")                       
注意

如果您使用的是 SageMaker Python SDK 1.x,则需要使用hyperparameters指定smdistributed.dataparallel作为分布式培训战略.

from sagemaker.pytorch import PyTorch pt_estimator = PyTorch(                        ...                        # Training using smdistributed.dataparallel Distributed Training Framework                        hyperparameters={"sagemaker_distributed_dataparallel_enabled": True},                        ...                       ) pt_estimator.fit("s3://bucket/path/to/training/data")