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

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

分布式训练策略

分布式训练通常按两种方法来拆分:数据并行和模型并行。数据并行是分布式训练的最常见方法:您有很多数据,将其分成批次,然后将数据块发送到多个 CPU 或 GPU(节点)以供神经网络或 ML 算法处理,然后合并结果。每个节点上的神经网络都是一样的。模型并行方法用于不能整体放到一个节点的内存中的大型模型;该方法拆分模型,不同的部分放在不同的节点上。在这种情况下,您需要将数据批次发送到各个节点,以便在模型的所有部分上处理数据。

术语网络模型经常可以互换使用:大型模型实际上是一个具有许多层和参数的大型网络。使用大型网络进行训练会生成一个大型模型,将模型以及所有预训练的参数及其权重加载回网络,会将大型模型加载到内存中。当您拆分模型以在节点之间分布模型时,您也会拆分底层网络。网络由层组成,为了拆分网络,您可以将层放置在不同的计算设备上。

在设备之间拆分层时,一个常见的内在缺陷是 GPU 的利用率严重不足。无论是向前还是向后传递,训练在本质上都是顺序的,在给定时间,只有一个 GPU 可以有效地进行计算,而其他 GPU 则等待发送激活信号。为了解决这个问题,现代模型并行库使用管道执行计划来提高设备利用率。但是,只有 Amazon SageMaker AI 的分布式模型并行库包含自动模型拆分。该库有两个核心功能:自动模型拆分和管道执行计划,通过制定自动化决策以实现高效设备利用,简化了实施模型并行的过程。

使用数据并行和模型并行进行训练

如果您在使用大型数据集进行训练,请首先使用数据并行方法。如果您在训练期间内存不足,则可能需要切换到模型并行方法,或尝试混合使用模型并行和数据并行。您还可以尝试以下方法,通过数据并行来提高性能:

  • 更改模型的超参数。

  • 减少批次大小。

  • 继续减少批次大小,直至能够放入。如果您将批量大小减少到 1,但内存仍然不足,那就应该尝试模型并行训练。

尝试梯度压缩(FP16、INT8):

尝试减小输入大小:

  • 如果您增加序列链接、需要减少批处理大小或增加 GPU 以分散批次,则减少 NLP 序列长度。

  • 降低图像分辨率。

检查是否使用了批次标准化,因为这可能会影响收敛性。在使用分布式训练时,您的批次在 GPU 之间拆分,而小得多的批次大小可能会带来更高的错误率,进而干扰模型的收敛。例如,如果您在批次大小为 64 的单个 GPU 上对网络进行原型设计,然后扩展到使用 4 个 p3dn.24xlarge,那么现在有 32 个 GPU,而每个 GPU 的批次大小从 64 降至 2。这可能会破坏您在单个节点上可以实现的收敛。

在以下情况下从模型并行训练开始:

  • 您的模型不能放入单个设备中。

  • 由于模型大小,您在选择较大的批次大小方面面临限制,例如模型加权占用了大部分 GPU 内存,而且您被迫选择较小、较不理想的批次大小。 

要了解有关 SageMaker AI 分布式库的更多信息,请参阅以下内容: