SageMaker AI 分布式数据并行库简介 - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

SageMaker AI 分布式数据并行库简介

SageMaker AI 分布式数据 parallelism (SMDDP) 库是一个集体通信库,可提高分布式数据并行训练的计算性能。该SMDDP库通过提供以下内容来解决关键集体通信操作的通信开销。

  1. 该库AllReduce针对以下内容进行了优化 Amazon。 AllReduce是一项关键操作,用于GPUs在分布式数据训练期间每次训练迭代结束时同步梯度。

  2. 该库AllGather针对以下内容进行了优化 Amazon。 AllGather是分片数据并行训练中使用的另一项关键操作,它是一种内存效率高的数据并行处理技术,由 SageMaker AI 模型并行度 (SMP) 库、 DeepSpeed 零冗余优化器 (ZerO) 和完全分片数据并行度 () 等热门库提供。 PyTorch FSDP

  3. 该库通过充分利用 Amazon 网络基础设施和 Amazon EC2 实例拓扑来优化 node-to-node通信。

该SMDDP库可以在您扩展训练集群时提供性能改进,从而提高训练速度,并具有近乎线性的扩展效率。

注意

SageMaker 人工智能分布式训练库可通过训练平台中的 Amazon 深度学习容器 PyTorch 和 Hugging Face SageMaker 获得。要使用这些库,你必须使用 SageMaker Python SDK 或 Python SDK 的 SageMaker APIs直通 (Boto3) 或。 Amazon Command Line Interface在整篇文档中,说明和示例都侧重于如何在 SageMaker Python 中使用分布式训练库SDK。

SMDDP针对 Amazon 计算资源和网络基础设施进行了优化的集体通信操作

该SMDDP库提供了针对 Amazon 计算资源AllReduce和网络基础设施进行了优化的AllGather集合操作的实现。

SMDDPAllReduce集体行动

该SMDDP库实现了AllReduce操作与向后通道的最佳重叠,从而显著提高了GPU利用率。它通过优化和之间的内核运算,实现了近线性的缩放效率CPUs和GPUs更快的训练速度。该库AllReduce在计算梯GPU度时并行执行,而不会占用额外的GPU周期,这使得库可以实现更快的训练。

  • 杠杆 CPUs:库使用AllReduce渐变CPUs,将此任务从中卸载。GPUs

  • 提高GPU使用率:集群将GPUs重点放在计算梯度上,从而在整个训练过程中提高梯度的利用率。

以下是该SMDDPAllReduce操作的高级工作流程。

  1. 图书馆将等级分配给GPUs(工作人员)。

  2. 每次迭代时,库都会将每个全局批次除以工作线程总数(世界大小),然后将小批次(批次分片)分配给工作线程。

    • 全局批次的大小为 (number of nodes in a cluster) * (number of GPUs per node) * (per batch shard)

    • 批处理分片(小批量)是每次迭代分配给每个GPU(工作人员)的数据集子集。

  3. 该库会为每个工作线程启动训练脚本。

  4. 库在每次迭代结束时,管理来自工作线程的模型权重和梯度的副本。

  5. 库可同步各工作线程的模型权重和梯度,以聚合成为单个经过训练的模型。

以下架构图显示了该库如何为由 3 个节点组成的集群设置数据并行性的示例。

SMDDP AllReduce 和数据并行架构图

SMDDPAllGather集体行动

AllGather 是一种集体操作,每个工作者从一个输入缓冲区开始,然后将所有其他工作者的输入缓冲区串联或聚合成一个输出缓冲区。

注意

SMDDPAllGather集体操作在 PyTorch v2.0.1 smdistributed-dataparallel>=2.0.1 及更高版本的 Dee Amazon p Learning Containers (DLC) 中可用。

AllGather 在分布式训练技术中被大量使用,例如分片数据并行技术,在这种技术中,每个工作者都持有模型的一部分,或者一个分片层。工作线程会在向前和向后传递之前调用 AllGather,以重建分片层。在参数全部收集后,继续向前传递和向后传递。在后向传递过程中,每个工作线程也会调用 ReduceScatter 来收集(减少)梯度并将其分解(分散)为梯度碎片,以更新相应的碎片层。有关这些集体操作在分片数据并行性中的作用的更多详细信息,请参阅该SMP库关于分片数据并行性的实现、 DeepSpeed文档中的 ZerO 以及有关完全分片数据并行性的博客。PyTorch

由于在每次迭代中 AllGather 都会调用诸如此类的集体操作,因此它们是造成GPU通信开销的主要因素。这些集体操作的计算速度越快,训练时间就越短,而且不会对收敛性产生副作用。为了实现这一目标,该SMDDP库提供了AllGather针对 P4d 实例进行了优化的功能。

SMDDPAllGather使用以下技术提高 P4d 实例的计算性能。

  1. 它通过具有网状拓扑的弹性结构适配器 () 网络在实例之间(节点间EFA)传输数据。 EFA是 Amazon 低延迟、高吞吐量的网络解决方案。节点间网络通信的网状拓扑更适合 Amazon 网络基础设施的特EFA性。与涉及多个数据包跳跃的NCCL环形拓扑或树状拓扑相比,它SMDDP可以避免从多个跳跃中累积延迟,因为它只需要一个跳跃。 SMDDP实现了一种网络速率控制算法,该算法可以平衡网状拓扑中每个通信对等体的工作负载,从而实现更高的全球网络吞吐量。

  2. 它采用基于NVIDIAGPUDirectRDMA技术 (GDRCopy) 的低延迟GPU内存复制库来协调本地NVLink和EFA网络流量。 GDRCopy是提供的低延迟GPU内存副本库NVIDIA,可在CPU进程和GPUCUDA内核之间提供低延迟通信。借助这项技术,该SMDDP库能够流畅节点内和节点间的数据移动。

  3. 它减少了GPU流式多处理器的使用,从而提高了运行模型内核的计算能力。P4d 和 P4de 实例配备了 NVIDIA A100,每个实例都有 108 个流GPUs媒体多处理器。虽然最多NCCL需要 24 个流式多处理器才能运行集体操作,但SMDDP使用的流式多处理器少于 9 个。模型计算内核可利用保存的流式多处理器加快计算速度。