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

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

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

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

SageMaker 的分布式数据并行库通过两种方式处理通信开销:

  1. 该库执行 AllReduce,这是分布式训练期间的重要操作,负责处理大部分通信开销。

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

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

训练基准

PyTorch 替换为 SageMaker 的数据并行库

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

  • BERT:与 PyTorch 一起使用时,SageMaker 库的速度比 PyTorch-DDP 快 41%、enpha 和四分之二。

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

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

具有平衡融合缓冲区的最佳带宽使用

SageMaker 的分布式数据并行库使用类似于参数服务器的通信模式,以减少传输的数据量以及从多个GPUs取平均值梯度所涉及的步骤数。 它还使用一种称为平衡融合缓冲区的新功能,以便在集群中的所有节点上最佳利用可用带宽。

传统参数服务器的一个重要缺点是,它们对可用网络带宽的使用不够理想。参数服务器将变量视为原子单位,并将每个变量放在一个服务器上。由于梯度在后向传递期间按顺序变得可用,因此在任何给定即时,从不同服务器发送和接收的数据量不平衡。一些服务器接收和发送更多数据,一些服务器不接收和发送,还有一些服务器不接收和发送。随着参数服务器的数量增加,此问题变得更严重。

该库通过引入平衡融合缓冲区解决了这些问题。平衡融合缓冲区是 GPU 中的一个缓冲区,用于保存梯度,直至缓冲区大小超出阈值。在使用 N 个参数服务器的设置中,当缓冲区超出阈值时,平衡融合缓冲区将复制到 CPU 内存,分片为 N 个部分,然后第 ith 部分发送到 ith 参数服务器。每个服务器从平衡融合缓冲区接收完全相同数量的字节。eth 服务器从所有工作线程接收平衡融合缓冲区的 ith 分区,对其进行汇总,然后将结果发送回所有工作线程。由于所有服务器都同等地参与平均每个平衡融合缓冲区,因此,可以高效利用服务器带宽。

具有高效的 AllReduce 并通过后向传递重叠的最佳 GPU 使用率

SageMaker 的分布式数据并行库通过向后传递实现 AllReduce 操作的最佳重叠,从而显著提高 GPU 利用率,并通过优化 CPUs 和 GPUs 之间的任务来实现近乎线性的扩展效率和更快的训练时间。 该库在 GPU 计算梯度时并行执行 AllReduce,而不会消耗额外的 GPU 周期,从而使该库更快。

  • 利用 CPUs:该库使用 CPUs 来实现 AllReduce 梯度,同时从 GPUs卸载此任务。

  • 改进了 GPU 使用情况:集群的 GPUs 专注于计算梯度,从而提高其在整个训练过程中的利用率。