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

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

使用SageMaker分布式数据并行 API

可以使用此页面了解如何导入和使用 SageMaker的分布式数据并行库。有关 API 规范,请参阅 Python 开发工具包文档中的分布式数据并行SageMaker。

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

要使用 SageMaker的分布式数据并行库,您首先需要一个训练脚本。就像 上的任何训练作业一样SageMaker,您可以使用训练脚本启动SageMaker训练作业。要开始使用,我们建议您通过以下方式使用SageMaker数据并行库:

使用任一选项,您都可以使用随本文档分布式训练 Jupyter 笔记本示例提供的 来开始使用。 

将 数据并行库与 的 Python SageMaker开发工具包结合使用

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

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

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

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

    要扩展预构建的容器或调整您自己的容器以使用库,您必须使用以下 PyTorch 或 TensorFlow GPU 通用框架基本映像之一:

    • 763104351884.dkr.ecr。<region>.amazonaws.com/tensorflow-training:2.4.11-gpu-py37-cu110-ubuntu184

    • 763104351884.dkr.ecr。<region>.amazonaws.com/tensorflow-training:2.3.11-gpu-py37-cu110-ubuntu184

    • 763104351884.dkr.ecr。<region>.amazonaws.com/pytorch-training:1.6.00-gpu-py36-cu110-ubuntu184

    • 763104351884.dkr.ecr。<region>.amazonaws.com/pytorch-training:1.7.11-gpu-py36-cu110-ubuntu184

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

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

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

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

如果您自带容器或扩展预构建的容器,则可以使用所需的 Docker 映像创建 Estimator 类的实例。

TensorFlow 评估程序

您可以通过将 SageMaker 指定为 TensorFlow 评估程序 API 中的smdistributed dataparallel策略来使用 distribution的SageMaker分布式数据并行库 API。有关该 API 的完整详细信息,请参阅 SageMaker TensorFlow 评估程序 API 文档

classsagemaker.tensorflow.estimator.TensorFlow(py_version=None,framework_version=None,model_dir=None,image_uri=None,distribution=None,kwargs)

将 SageMaker Python 开发工具包 TensorFlow评估程序的以下两个参数与 TensorFlow一起使用smdistributed.dataparallel时是必需的。

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

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

    distribution = { "smdistributed": { "dataparallel": { "enabled": True } } }

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

  • 如果使用 smdistributed.dataparallel分配策略,则允许的实例类型为ml.p4d.24xlarge:、 ml.p3dn.24xlargeml.p3.16xlarge

示例

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.3", # You must set py_version to py36 py_version='py36',                           # For training with multi node distributed training, set this count.                           # Example: 2,3,4,..8                           instance_count=1,                           # 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 PyTorch Estimator APISageMaker 中指定 作为策略来使用 smdistributed dataparalleldistribution分布式数据并行库 API。有关 API 的完整详细信息,请参阅 SageMaker PyTorch Estimator API 规范

classsagemaker.pytorch.estimator.PyTorch(py_version=None,framework_version=None,model_dir=None,image_uri=None, hyperparameters=None, distribution=None,kwargs)

将 与 PyTorch一起使用SageMaker时EstimatorPyTorch 的以下两个参数smdistributed.dataparallel是必需的。SageMaker

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

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

    distribution={"smdistributed": { "dataparallel": { "enabled": True } } }

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

  • 如果使用 smdistributed.dataparallel分配策略,则允许的实例类型为ml.p4d.24xlarge:、 ml.p3dn.24xlargeml.p3.16xlarge

示例

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.6.0',                        # For training with multi node distributed training, set this count.                        # Example: 2,3,4,..8                        instance_count=1,                        # 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 开发工具包 1.x,则需要使用 hyperparameterssmdistributed.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")