本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
采用 SageMaker AI 最佳实践进行分布式计算
本最佳实践页面概要介绍了用于机器学习 (ML) 作业的各种分布式计算。本页面中的分布式计算一词包括用于机器学习任务的分布式训练,以及用于数据处理、数据生成、特征工程和强化学习的并行计算。在本页中,我们将讨论分布式计算中的常见挑战,以及 SageMaker 训练和 SageMaker 处理中的可用选项。有关分布式计算的其他阅读材料,请参阅什么是分布式计算?
您可以将 ML 任务配置为在多个节点(实例)、加速器(NVIDIAGPUs、 Amazon Trainium 芯片)和 v 内核之间以分布式方式运行。CPU通过运行分布式计算,您可以实现各种目标,例如计算速度更快、处理大型数据集或训练大型 ML 模型。
以下列表涵盖了大规模运行 ML 训练作业时可能面临的常见挑战。
-
您需要根据 ML 任务、要使用的软件库和计算资源来决定如何分布计算资源。
-
并非所有 ML 任务都能够轻易地实现分布式处理。此外,并非所有 ML 库都支持分布式计算。
-
分布式计算并不一定能够实现计算效率的线性提高。特别是,您需要确定数据 I/O 和内部GPU通信是否存在瓶颈或导致开销。
-
分布式计算可能会干扰数值处理并改变模型准确性。特别是对于数据并行神经网络训练,当您纵向扩展到更大的计算集群时需要更改全局批量大小,还需要相应地调整学习率。
SageMaker AI 提供分布式训练解决方案,以缓解各种用例的此类挑战。请选择以下最适合您使用场景的选项。
主题
选项 1:使用支持分布式训练的 SageMaker AI 内置算法
SageMaker AI 提供了内置算法,您可以通过 SageMaker AI 控制台或 SageMaker Python 开箱即用SDK。使用内置算法,您无需花时间进行代码自定义、了解模型背后的科学知识或在预配置的 Ama EC2 zon 实例上运行 Docker。
SageMaker AI 内置算法的子集支持分布式训练。要检查您选择的算法是否支持分布式训练,请参阅关于内置算法的常用信息表中的可并行化列。有些算法支持多实例分布式训练,而其余的可并行算法则支持在单个实例GPUs中实现多个实例的并行化,如 Parallelizable 列所示。
选项 2:在 A SageMaker I 托管的训练或处理环境中运行自定义 ML 代码
SageMaker AI 作业可以为特定的用例和框架实例化分布式训练环境。此环境充当 ready-to-use白板,您可以在其中自带和运行自己的机器学习代码。
ML 代码使用深度学习框架时
你可以使用用于训练的 Dee p Learning Containers (DLC)
-
A SageMaker I 分布式训练库
A SageMaker I 分布式训练库为神经网络数据并行性和模型并行性提供了 Amazon托管代码。 SageMaker AI 分布式训练还附带了 SageMaker Python 中内置的启动器客户端SDK,您无需编写并行启动代码。要了解更多信息,请参阅 SageMaker AI 的数据并行度库和 SageMaker AI 的模型并行度库。
-
开源分布式训练库
开源框架有自己的分发机制,例如中的 DistributedDataParallelism (DDP) PyTorch 或中的
tf.distribute
模块 TensorFlow。您可以选择在 SageMaker AI 管理的框架容器中运行这些分布式训练框架。例如,在 AI 中训练 Mask 的示例代码展示了如何RCNN在 SageMaker AI框架容器 PyTorch DDP中同时使用 Horovod,如何在 PyTorch 框架容器中同时使用 Horovod 。 SageMaker SageMaker TensorFlow
SageMaker AI ML 容器还MPI
关于数据并行神经网络训练的注意事项 GPUs
-
适当时扩展到多GPU机和多机并行度
我们经常在多个CPU或多个GPU实例上运行神经网络训练作业。每个GPU基于实例的实例通常包含多个GPU设备。因此,分布式GPU计算可以在具有多个实例GPUs(单节点多GPU训练)的单个GPU实例中进行,也可以在每个GPU实例中有多个GPU内核(多节点多GPU训练)之间进行。单实例训练更易于编写代码和调试,而且节点内的 GPU-to-GPU吞吐量通常比节点间 GPU-to-GPU吞吐量快。因此,最好先垂直扩展数据并行度(使用一个GPU实例和多个实例GPUs),然后在需要时扩展到多个GPU实例。这可能不适用于CPU预算过高(例如,数据预处理工作量很大)以及多GPU实例 CPU-to-GPU比率过低的情况。在所有情况下,您都需要根据自己的 ML 训练需求和工作负载,尝试不同的实例类型组合。
-
监控收敛质量
在使用数据并行度训练神经网络时,在保持每个小批次大小GPU不变的GPUs同时增加数量会增加小批量随机梯度下降 () 过程的全局迷你批次的大小。MSGD众所周知,小批MSGD量的大小会影响下降噪声和收敛性。为了在保持准确性的同时正确缩放,您需要调整其他超参数,例如学习率 [Goyal 等
。(2017)]。 -
监控 I/O 瓶颈
随着数量的增加GPUs,读取和写入存储的吞吐量也应增加。请确保您的数据来源和管道不会成为瓶颈。
-
根据需要修改训练脚本
对于多节点多训练,必须修改为单GPU训练编写的GPU训练脚本。在大多数数据并行性库中,需要修改脚本才能进行以下操作。
-
为每个批次分配训练数据GPU。
-
使用可以处理多个梯度计算和参数更新的优化器。GPUs
-
将检查点的责任分配给特定的主持人,然后GPU.
-
ML 代码涉及表格数据处理时
PySpark 是 Apache Spark 的 Python 前端,Apache Spark 是一个开源的分布式计算框架。 PySpark 已被广泛用于大规模生产工作负载的分布式表格数据处理。如果要运行表格数据处理代码,请考虑使用 Processing PySpark 容器并运行 parallel 作业。SageMaker 您还可以在 Amazon SageMaker Studio Classic APIs 中使用 SageMaker 训练和 SageMaker 处理并行运行数据处理作业,该版本与亚马逊EMR
选项 3:编写自己的自定义分布式训练代码
当您向 AI 提交训练或处理任务时, SageMaker 训练和 SageMaker A SageMaker I 处理会APIs启动 Amazon EC2 计算实例。您可以通过运行自己的 Docker 容器或在 Amazon 托管容器中安装其他库来自定义实例中的训练和处理环境。有关带 SageMaker 训练的 Docker 的更多信息,请参阅调整自己的 Docker 容器以与 SageMaker AI 配合使用和使用自己的算法和模型创建容器。有关具有 SageMaker AI 处理功能的 Docker 的更多信息,请参阅使用自己的处理代码。
每个 SageMaker 训练作业环境都包含一个位于的配置文件/opt/ml/input/config/resourceconfig.json
,而每个 Processing SageMaker 作业环境都包含一个类似的配置文件/opt/ml/config/resourceconfig.json
。您的代码可以读取此文件,从而查找 hostnames
和建立节点间通信。要了解更多信息,包括JSON文件架构,请参阅分布式训练配置和 Amazon Processin SageMaker g 如何配置您的处理容器。您还可以安装和使用第三方分布式计算库,例如 Ray
您还可以使用 SageMaker 训练和 SageMaker 处理来运行不需要工作者间通信的自定义分布式计算。在计算文献中,这些任务通常被描述为易并行或不共享。这样的例子包括并行处理数据文件、在不同配置下并行训练模型,或者对记录集合运行批量推理。您可以轻松地将此类无共享用例与 Amazon AI 并行化。 SageMaker 当您在具有多个节点的集群上启动 SageMaker 训练或 SageMaker 处理作业时, SageMaker AI 会默认在所有节点上复制并启动您的训练代码(采用 Python 或 Docker)。通过在 SageMaker AI 的数据输入配置中进行设置,可以简化需要S3DataDistributionType=ShardedByS3Key
在如此多个节点上随机分配输入数据的任务TrainingInput
API。
选项 4:并行或按顺序启动多个作业
您还可以将 ML 计算工作流分配到较小的并行或顺序计算任务中,每个任务都由自己的 SageMaker 训练或 SageMaker 处理任务表示。对于以下情况或任务,将一个任务拆分为多个作业可能会带来好处:
-
当每个子任务都有特定的数据通道和元数据条目(例如超参数、模型配置或实例类型)时。
-
当您在子任务级别实施重试步骤时。
-
当您在运行工作负载期间改变子任务的配置时,例如增加批次大小来进行训练时。
-
当您需要运行的 ML 任务用时比单个训练作业允许的最大训练时间(最多 28 天)更长时。
-
当计算工作流的不同步骤需要不同的实例类型时。
对于超参数搜索的具体情况,请使用 SageMaker AI 自动模型调整。 SageMaker AI Automated Model Tuning 是一款无服务器参数搜索协调器,它根据搜索逻辑代表你启动多个训练作业,搜索逻辑可以是随机、贝叶斯或。 HyperBand
此外,要编排多个训练作业,您还可以考虑使用工作流编排工具,例如流SageMaker 水线、Amazon Step Fun ctions 和 AI 工作流支持的亚马逊托管