采用 SageMaker AI 最佳实践进行分布式计算 - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

采用 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) 启动分布式 SageMaker 训练作业,你可以通过 SageMaker AI Python 中的专用 Python 模块进行编排SDK,也可以通过 with SageMaker APIs 进行Amazon CLI编排。Amazon SDK for Python (Boto3) SageMaker AI 为机器学习框架提供训练容器,包括、PyTorchTensorFlowHugging Face Transformers 和 MXNet Apac he。您可以通过两种方式编写深度学习代码用于分布式训练。

SageMaker AI ML 容器还MPI预装了,因此您可以使用 mpi4py 并行化入口点脚本。当您启动第三方分布式训练启动器或在 SageMaker AI 托管的训练环境中编写临时并行代码时,使用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和集成Amazon Glue

选项 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 或 DeepSpeed 在 SageMaker AI 中使用。

您还可以使用 SageMaker 训练和 SageMaker 处理来运行不需要工作者间通信的自定义分布式计算。在计算文献中,这些任务通常被描述为易并行不共享。这样的例子包括并行处理数据文件、在不同配置下并行训练模型,或者对记录集合运行批量推理。您可以轻松地将此类无共享用例与 Amazon AI 并行化。 SageMaker 当您在具有多个节点的集群上启动 SageMaker 训练或 SageMaker 处理作业时, SageMaker AI 会默认在所有节点上复制并启动您的训练代码(采用 Python 或 Docker)。通过在 SageMaker AI 的数据输入配置中进行设置,可以简化需要S3DataDistributionType=ShardedByS3Key在如此多个节点上随机分配输入数据的任务TrainingInputAPI。

选项 4:并行或按顺序启动多个作业

您还可以将 ML 计算工作流分配到较小的并行或顺序计算任务中,每个任务都由自己的 SageMaker 训练或 SageMaker 处理任务表示。对于以下情况或任务,将一个任务拆分为多个作业可能会带来好处:

  • 当每个子任务都有特定的数据通道和元数据条目(例如超参数、模型配置或实例类型)时。

  • 当您在子任务级别实施重试步骤时。

  • 当您在运行工作负载期间改变子任务的配置时,例如增加批次大小来进行训练时。

  • 当您需要运行的 ML 任务用时比单个训练作业允许的最大训练时间(最多 28 天)更长时。

  • 当计算工作流的不同步骤需要不同的实例类型时。

对于超参数搜索的具体情况,请使用 SageMaker AI 自动模型调整。 SageMaker AI Automated Model Tuning 是一款无服务器参数搜索协调器,它根据搜索逻辑代表你启动多个训练作业,搜索逻辑可以是随机、贝叶斯或。 HyperBand

此外,要编排多个训练作业,您还可以考虑使用工作流编排工具,例如流SageMaker 水线、Amazon Step Fun ctions 和 AI 工作流支持的亚马逊托管工作流程 Apache Airflow () 和 AI 工作流程。MWAA SageMaker