本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
采用 SageMaker AI 最佳实践进行分布式计算
本最佳实践页面概要介绍了用于机器学习 (ML) 作业的各种分布式计算。本页面中的分布式计算一词包括用于机器学习任务的分布式训练,以及用于数据处理、数据生成、特征工程和强化学习的并行计算。在本页中,我们将讨论分布式计算中的常见挑战,以及 SageMaker 训练和 SageMaker 处理中的可用选项。有关分布式计算的其他阅读材料,请参阅什么是分布式计算?
您可以将机器学习任务配置为在多个节点(实例)、加速器(NVIDIA GPUs、 AWS Trainium 芯片)和 vCPU 内核之间以分布式方式运行。通过运行分布式计算,您可以实现各种目标,例如计算速度更快、处理大型数据集或训练大型 ML 模型。
以下列表涵盖了大规模运行 ML 训练作业时可能面临的常见挑战。
-
您需要根据 ML 任务、要使用的软件库和计算资源来决定如何分布计算资源。
-
并非所有 ML 任务都能够轻易地实现分布式处理。此外,并非所有 ML 库都支持分布式计算。
-
分布式计算并不一定能够实现计算效率的线性提高。特别是,您需要确定数据 I/O 和 GPU 间通信是否存在瓶颈或导致开销。
-
分布式计算可能会干扰数值处理并改变模型准确性。特别是对于数据并行神经网络训练,当您纵向扩展到更大的计算集群时需要更改全局批量大小,还需要相应地调整学习率。
SageMaker AI 提供分布式训练解决方案,以缓解各种用例的此类挑战。请选择以下最适合您使用场景的选项。
主题
选项 1:使用支持分布式训练的 SageMaker AI 内置算法
SageMaker AI 提供了内置算法,您可以通过 A SageMaker I 控制台或 SageMaker Python SDK 开箱即用。使用内置算法时,您无需花时间自定义代码、了解模型背后的科学知识,也无需在预置 Amazon EC2 实例上运行 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 分布式训练库为神经网络数据并行性和模型并行性提供了 AWS托管代码。 SageMaker AI 分布式训练还附带了 SageMaker Python SDK 中内置的启动器客户端,您无需编写并行启动代码。要了解更多信息,请参阅 SageMaker AI 的数据并行度库和 SageMaker AI 的模型并行度库。
-
开源分布式训练库
开源框架有自己的分发机制,例如中的 DistributedDataParallelism (DDP) PyTorch 或中的
tf.distribute模块。 TensorFlow您可以选择在 SageMaker AI 管理的框架容器中运行这些分布式训练框架。例如,在 AI 中训练 maskrCNN 的示例代码展示了如何在 SageMaker AI框架容器中同时使用 PyTorch DDP 和在 PyTorch 框架容器中使用 Horovod 。 SageMaker SageMaker TensorFlow
SageMaker AI ML 容器还预装了 MPI
关于数据并行神经网络训练的注意事项 GPUs
-
在适当的时候扩展到多 GPU 和多计算机并行性
我们经常在多 CPU 或多 GPU 实例上运行神经网络训练作业。每个基于 GPU 的实例通常包含多个 GPU 设备。因此,分布式 GPU 计算可以在具有多个 GPU 的单个 GPU 实例中进行 GPUs (单节点多 GPU 训练),也可以在每个实例中有多个 GPU 内核的多个 GPU 实例之间进行(多节点多 GPU 训练)。单实例训练更易于编写代码和调试,而且节点内的 GPU-to-GPU吞吐量通常比节点间 GPU-to-GPU吞吐量快。因此,最好先垂直扩展数据并行度(使用一个 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 EMR 和 Amazon EMR
选项 3:编写自己的自定义分布式训练代码
当您向 A SageMaker I 提交训练或处理任务时, SageMaker 训练和 AI 处理 API 会启动 SageMaker Amazon EC2 计算实例。您可以通过运行自己的 Docker 容器或在 AWS 托管容器中安装其他库来自定义实例中的训练和处理环境。有关带 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 Process SageMaker ing 如何配置您的处理容器。您还可以安装和使用第三方分布式计算库,例如 Ray
您还可以使用 SageMaker 训练和 SageMaker 处理来运行不需要工作人员间通信的自定义分布式计算。在计算文献中,这些任务通常被描述为易并行或不共享。这样的例子包括并行处理数据文件、在不同配置下并行训练模型,或者对记录集合运行批量推理。您可以轻松地将此类无共享用例与 Amazon AI 并行化。 SageMaker 当您在具有多个节点的集群上启动 SageMaker 训练或 SageMaker 处理作业时, SageMaker AI 会默认在所有节点上复制并启动您的训练代码(采用 Python 或 Docker)。通过在 SageMaker A TrainingInput I API 的数据输入配置中进行设置,可以简化需要S3DataDistributionType=ShardedByS3Key在如此多个节点上随机分配输入数据的任务。
选项 4:并行或按顺序启动多个作业
您还可以将 ML 计算工作流分配到较小的并行或顺序计算任务中,每个任务都由自己的 SageMaker 训练或 SageMaker 处理任务表示。对于以下情况或任务,将一个任务拆分为多个作业可能会带来好处:
-
当每个子任务都有特定的数据通道和元数据条目(例如超参数、模型配置或实例类型)时。
-
当您在子任务级别实施重试步骤时。
-
当您在运行工作负载期间改变子任务的配置时,例如增加批次大小来进行训练时。
-
当您需要运行的 ML 任务用时比单个训练作业允许的最大训练时间(最多 28 天)更长时。
-
当计算工作流的不同步骤需要不同的实例类型时。
对于超参数搜索的具体情况,请使用 SageMaker AI 自动模型调整。 SageMaker AI Automated Model Tuning 是一款无服务器参数搜索协调器,它根据搜索逻辑代表你启动多个训练作业,搜索逻辑可以是随机、贝叶斯或。 HyperBand
此外,要编排多个训练作业,您还可以考虑使用工作流编排工具,例如流SageMaker 水线、AWS Step Fun ctions 和 AI 工作流支持的亚马逊托管