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

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

SageMaker 分布式模型并行性最佳实践

使用 SageMaker 模型parallel 库运行分布式训练作业时,请使用以下准则。

为给定模型设置正确的配置

在扩展模型时,我们建议您按顺序查看以下列表。每个列表项都讨论了使用库技术的优势以及可能出现的利弊。

提示

如果使用库功能的子集可以很好地拟合模型,则添加更多的模型并行度或节省内存的功能通常不会提高性能。

使用大型 GPU 实例类型
  • 在模型并行性领域,最好使用具有大型 GPU 内存的强大实例来处理模型并行操作产生的开销,例如在多个 GPU 上对模型进行分区。我们建议使用ml.p4dml.p3dn实例来训练大型 DL 模型。这些实例还配备了 Elastic Fabric Adapter (EFA),可提供更高的网络带宽,并支持通过模型并行进行大规模训练。

分区优化器状态
  • 分片优化器状态的影响取决于数据parallel 排名的数量。通常,更高的数据并行度(与计算节点的大小成正比)可以提高内存使用效率。

    当您想要缩小集群规模时,请务必检查优化器状态分片配置。例如,具有优化器状态分片的大型 DL 模型适用于具有 16 个 GPU 的节点,不适合具有 8 个 GPU 的节点,因为根本没有足够的 GPU 来对优化器状态进行分片。

    有关更多信息,请参阅优化器状态分片

激活检查点
  • 通过对一组模块使用激活检查点可以提高内存效率。对模块进行分组的次数越多,内存使用效率就越高。当检查各层的顺序模块时,该smp.set_activation_checkpointing函数的strategy参数将各层组合在一起以进行检查点。例如,将两层或更多层组合在一起进行检查点比一次检查一层更节省内存,这会牺牲额外的计算时间来减少内存使用量。

    有关更多信息,请参阅激活检查点

张量并行性
  • 张量并行度应为二的乘方(2、4、8、...、2 n),其中最大度必须等于每个节点的 GPU 数量。例如,如果您使用具有 8 个 GPU 的节点,则张量并行度的可能数字为 2、4 和 8。对于张量并行度,我们不建议使用任意数字(例如 3、5、6 和 7)。当您使用多个节点时,错误配置张量并行度可能会导致在节点间运行张量并行性;这会增加跨节点的激活通信所产生的大量开销,并且可能导致计算成本高昂。

    有关更多信息,请参阅张量并行性

跨节点的流水线并行性
  • 您可以在单个节点内或跨多个节点运行流水线并行处理。当您将流水线并行性与张量并行性结合使用时,我们建议在多个节点上运行流水线并行性,并将张量并行性保持在单个节点内。

  • 管道并行性带有以下三个旋钮:microbatchesactive_microbatches、和prescaled_batch

    • 当您将张量并行性与流水线并行性结合使用时,我们建议激活,prescaled_batch这样可以增加每个模型parallel 组的批量大小以实现有效的流水线传输。prescaled_batch激活后,训练脚本中设置的批tp_size次大小将变为为未激活的每个等级设置的批次大小乘以prescaled_batch

    • 增加数量microbatches有助于实现高效的流水线传输和更好的性能。请注意,有效微批量大小等于批次大小除以微批次数。如果您在保持批次大小恒定的同时增加微批次数,则每个微批处理的样品会减少。

    • 的数量active_microbatches是流水线传输期间同时处理的微批次的最大数量。对于正在处理的每个活跃微批次,其激活次数和梯度会占用 GPU 内存。因此,增加active_microbatches会占用更多的 GPU 内存。

  • 如果 GPU 和 GPU 内存均未得到充分利用,则增加内存active_microbatches以改善流水线传输期间的并行化。

  • 有关如何将张量并行与结合使用的更多信息,请参阅使用张量并行性使用的更多信息,请参阅使用张量并行性使用的更多信息,请参阅张量并行性与流水线并行性相结合管道并行

  • 要查找上述参数的描述,请参阅 SageMaker Python SDK 文档smdistributed中的参数

将激活任务转移到 CPU
  • 确保将其与激活检查点和流水线并行性结合使用。为确保卸载和预加载在后台进行,请为微批次参数指定一个大于 1 的值。

  • 卸载激活次数时,你可以增加微批次的总数,有时甚至active_microbatches与之匹配。这取决于检查哪些模块以及如何对模型进行分区。

    有关更多信息,请参阅激活卸载

参考配置

SageMaker 模型并行度训练团队根据 GPT-2 模型、序列长度为 512 和词汇量为 50,000 的实验,提供以下参考点。

模型参数的数量 实例类型 管道并行性 张量并行性 优化器状态分片 激活检查点 预缩批次使用的批次使用 Batch 大小
10 16ml.p4d.24xlarge 1 4 True 每个变 True batch_size=40
30 日 16ml.p4d.24xlarge 1 8 True 每个变 True batch_size=32
60 32ml.p4d.24xlarge 2 8 True 每个变 True batch_size=56, microbatches=4, active_microbatches=2

您可以从前面的配置中推断出来估算模型配置的 GPU 内存使用情况。例如,如果您增加了 100 亿参数模型的序列长度或将模型的大小增加到 200 亿,则可能需要先降低批次大小。如果模型仍然不适合,请尝试增加张量并行度。

修改您的训练脚本

  • 在训练脚本中使用 SageMaker 模型parallel 库的功能之前,请先查看 SageMaker 分布式模型并行库配置提示和陷阱

  • 要更快地启动训练作业,请使用SageMaker 本地模式。这可以帮助您在 SageMaker 笔记本实例上在本地快速运行训练作业。根据运行 SageMaker 笔记本实例的 ML 实例的规模,您可能需要通过更改模型配置(例如隐藏宽度、变压器层数和注意力头)来调整模型的大小。在使用大型集群训练完整模型之前,验证简化后的模型在笔记本实例上是否运行良好。

使用 SageMaker 控制台和亚马逊监控和记录训练Job CloudWatch

要监控 CPU 内存利用率、GPU 内存利用率和 GPU 利用率等系统级指标,请使用SageMaker 控制台提供的可视化。

  1. 在左侧导航窗格中,选择培训

  2. 选择 Training jobs (训练作业)

  3. 在主窗格中,选择要查看更多详细信息的训练作业名称。

  4. 浏览主窗格并找到 “监控” 部分以查看自动可视化。

  5. 要查看训练作业日志,请在 “监控” 部分中选择 “查看日志”。您可以在中访问训练作业的分布式训练作业日志 CloudWatch。如果你启动了多节点分布式训练,你应该会看到多个带有 algo-n-1234567890 格式标签的日志流。algo-1 日志流跟踪来自主(第 0)节点的训练日志。

有关更多信息,请参阅使用亚马逊监控和分析培训工作 CloudWatch指标

权限

要使用模型并行度或SageMaker 分布式训练示例笔记本运行训练作业,请确保您的 IAM 角色拥有正确的权限,例如: SageMaker