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

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

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

为什么使用 SageMaker 分布式数据并行库?

SageMaker 的分布式数据并行库以两种方式解决通信开销问题:

  1. 库执行AllReduce,这是分布式培训期间的一项关键操作,它承担了很大一部分的通信开销。

  2. 该库通过充分利用执行优化的节点到节点通信Amazon的网络基础设施和 Amazon EC2 实例拓扑。

使用此数据并行库可将培训模型(如 BERT)的速度提高 25%。虽然像 Horovod 这样的实现提供了大规模的亚线性性能,但该库提供了接近线性的大规模性能。这意味着您可以获得更快的训练时间和更低的训练模型的成本。

注意

SageMaker 分布式培训库只能通过AmazonSageMaker 培训平台中的 TensorFlow、PyTorch 和 HuggingFace 框架的深度学习容器。要使用这些库,您必须使用 SageMaker Python SDK 或者通过适用 SDK for Python (Boto3) 使用 SageMaker API 或Amazon Command Line Interface. 在整个文档中,说明和示例都重点介绍了如何将分布式培训库与 SageMaker Python SDK 结合使用。

训练基准

PyTorch 与 SageMaker 的数据并行库

使用实例类型p3dn.24xl以及在 2、4 和 8 个节点群集上:

  • 伯特:与 PyTorch 一起使用时,SageMaker 库比 Pytorch-DDP 快 41%、52% 和 13%。

  • maskrCNN:与 PyTorch 一起使用时,SageMaker 库比 Pytorch-DDP 快 4%、19% 和 15%。

这些基准测试是在 PyTorch v1.6 上运行的ml.p3dn.24xlarge实例。你可以在SageMaker 示例网站. 示例网站还有这些模型的基准训练代码使用 TensorFlow 2.3.

平衡融合缓冲区实现最佳带宽使

SageMaker 的分布式数据并行库使用类似于参数服务器的通信模式来减少传输的数据量和平均来自多个 GPU 的渐变所涉及的步骤数。它还使用称为平衡融合缓冲区的新技术来最佳利用群集中所有节点上的可用带宽。

传统参数服务器的一个主要缺点是它们对可用网络带宽的利用不够最佳。参数服务器将变量视为原子单位并将每个变量放在一台服务器上。由于渐变在向后传递过程中依次可用,因此在任何给定的时刻,从不同服务器发送和接收的数据量都存在不平衡。有些服务器正在接收和发送更多数据,有些数据更少,有些没有。随着参数服务器数量的增加,这个问题变得更加严重。

图书馆通过介绍来解决这些问题平衡融合缓冲区. 平衡融合缓冲区是 GPU 中的缓冲区,它保存渐变,直到缓冲区的大小超过阈值。在使用 N 个参数服务器的设置中,当缓冲区超过阈值时,平衡融合缓冲区被复制到 CPU 内存中,分片成 N 个部分,第 i 个部分发送到第 i 个参数服务器。每台服务器从平衡融合缓冲区接收的字节数完全相同。第 i 个服务器从所有工作线程处接收平衡融合缓冲区的第 i 个分区,然后将结果汇总起来,然后将结果发送回所有工作线程。由于所有服务器平均参与平均每个平衡融合缓冲区,因此服务器带宽得到了高效利用

高效实现最佳 GPU 使用率AllReduce与向后通行证重叠

SageMaker 的分布式数据并行库实现了AllReduce通过向后操作,显著提高 GPU 利用率,并通过优化 CPU 和 GPU 之间的任务实现接近线性的扩展效率和更快的训练时间。库执行AllReduce同时 GPU 正在计算渐变而不占用额外的 GPU 周期,这使库更快。

  • 利用 CPU:该库使用 CPU 进行 allReduce 渐变,从 GPU 中卸载此任务。

  • 改进 GPU 使用率:集群的 GPU 专注于计算梯度,在整个培训过程中提高它们的利用率。

SageMaker 分布式数据并行架构

该库支持大型计算实例,每个节点有 8 个 GPU:ml.p3.16xlargeml.p3dn.24xlarge, 和ml.p4d.24xlarge. SageMaker 分布式数据并行库的高级工作流程如下:

  1. 图书馆将排名分配给 GPU(工作人员)。

  2. 在每次迭代中,库将每个全局批次除以工作人员总数(世界大小),然后将小批量(批处理分片)分配给工作人员。

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

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

  3. 图书馆为每位工作人员启动训练脚本。

  4. 该库在每次迭代结束时管理来自工作人员的模型权重和渐变的副本。

  5. 该库同步工作人员之间的模型权重和梯度,以聚合单个训练过的模型。

下面的体系结构图显示了库如何为包含 3 个节点的群集设置数据并行性的示例。


        SageMaker 分布式数据并行架构图

要开始使用 SageMaker 分布式数据并行库,请参阅第 2 步:启动 SageMaker 使用分布式培训 Job SageMaker Python 开发工具包通过设置 SageMaker 估算器Amazon SageMaker Python 开发工具包, 和运行 SageMaker 具有数据并行性的分布式培训 Job使用 SageMaker 分布式数据并行库调整训练脚本。