本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SageMaker 分布式模型并行最佳实
使用 SageMaker 模型并行库运行分布式训练作业时,请遵循以下准则。
为给定模型设置正确的配置
在扩展模型时,我们建议您按顺序浏览以下列表。每个列表项都讨论了使用图书馆技术的优势以及可能出现的权衡。
如果使用库的一部分功能可以很好地配合模型,那么添加更多的模型并行性或节省内存的功能通常不会提高性能。
使用大型 GPU 实例类型
-
在模型并行性领域,最好使用具有大量 GPU 内存的强大实例来处理模型并行操作(例如跨多个 GPU 分区模型)的开销。我们建议使用
ml.p4d要么ml.p3dn用于训练大型 DL 模型的实例。这些实例还配备了 Elastic Fabric Adapter (EFA),该适配器可提供更高的网络带宽,并支持具有模型并行性的大规模训练。
分片优化程序状态
-
分片优化程序状态的影响取决于数据并行排名数。通常,更高程度的数据并行度(与计算节点的大小成正比)可以提高内存使用效率。
当您想缩小群集规模时,请确保检查优化程序状态分片配置。例如,具有优化程序状态分片的大型 DL 模型适合 16 个 GPU 的节点不适合具有 8 个 GPU 的节点,因为根本没有足够的 GPU 来分片优化程序状态。
有关更多信息,请参阅 分片优化器状态。
激活检查点
-
通过对一组模块使用激活检查点可以提高内存效率。对模块进行分组越多,内存使用就越有效。当检查图层的顺序模块时,
strategy参数smp.set_activation_checkpointing函数将图层分组在一起以进行检查点。例如,将两个或更多图层组合在一起以进行检查点比一次检查点一个图层更有效的内存效率,而这将额外的计算时间以减少内存使用量。有关更多信息,请参阅 激活检查点。
Tensor 并行
-
张量并行度应该是二(2、4、8、...、2)的幂n),其中最大程度必须等于每个节点的 GPU 数量。例如,如果您使用具有 8 个 GPU 的节点,则张量并行度的可能数字为 2、4 和 8。对于张量并行度,我们不建议任意数字(例如 3、5、6 和 7)。当你使用多个节点时,错误配置张量并行度可能会导致跨节点运行张量并行度;这增加了跨节点激活的通信所产生的巨大开销,并且可能会变得昂贵的计算成本。
有关更多信息,请参阅 Tensor 并行度。
跨节点的管道并行性
-
您可以在单个节点内和多个节点之间运行管道并行。当您将管道并行与张量并行结合使用时,我们建议在多个节点之间运行管道并行性,并在单个节点内保持张量并行度。
-
管道并行度具有以下三个旋钮:
microbatches、active_microbatches, 和prescaled_batch.-
当你在管道并行度中使用张量并行度时,我们建议激活
prescaled_batch以便可以增加每个模型并行组的批量大小以实现高效的流水线。与prescaled_batch激活时,训练脚本中设置的批量大小变为tp_size乘以为每个等级设置的批量大小的倍数,prescaled_batch. -
增加数量
microbatches有助于实现高效的流水线和更好的性能。请注意,有效微批量大小是批量大小除以微批次数。如果在保持批量大小不变的同时增加微批次的数量,则每个微批处理的样品会减少。 -
的数量
active_microbatches是流水线输送过程中同时处理的微批量的最大数量。对于处理中的每个活动微批量,其激活和渐变会占用 GPU 内存。因此,增加active_microbatches占用更多 GPU 内存。
-
-
如果 GPU 和 GPU 内存均未充分利用,请增加
active_microbatches以便在流水线过程中实现更好的并行化。 -
有关如何将 Tensor 并行度与管道并行度用法的更多信息,请参阅Tensor 并行度与管道并行度相结合.
-
要查找上述参数的说明,请参阅的参数
smdistributed中的SageMaker Python 开发工具包.
将激活卸载到 CPU
-
确保将其与激活检查点和管道并行性结合使用。为确保卸载和预加载在后台进行,请为 microbatch 参数指定一个大于 1 的值。
-
当卸载激活时,您也许能够增加
active_microbatches有时候与微粒的总数相匹配。这取决于哪些模块被检查点以及模型的分区方式。有关更多信息,请参阅 激活分载。
配置引用
SageMaker 分布式模型并行训练团队根据 GPT-2 模型的实验、序列长度为 512 和 50,000 的词汇量提供了以下参考点。
| 数量模型参数 | 实例类型 | 管道并行 | Tensor 并行 | 优化器状态分片 | 激活检查点 | 批量预扩展 | Batch 大小 |
|---|---|---|---|---|---|---|---|
| 100 亿 | 16ml.p4d.24xlarge |
1 | 4 | True | 每个变压器层 | True | batch_size=40 |
| 300 亿 | 16ml.p4d.24xlarge |
1 | 8 | True | 每个变压器层 | True | batch_size=32 |
| 600 亿 | 32ml.p4d.24xlarge |
2 | 8 | True | 每个变压器层 | True | batch_size=56, microbatches=4,
active_microbatches=2 |
您可以从前面的配置中推断出来估计模型配置的 GPU 内存使用情况。例如,如果您增加 10 亿个参数模型的序列长度或将模型的大小增加到 200 亿,则可能需要先降低批量大小。如果模型仍然不合适,请尝试提高张量并行度。
修改训练脚本
-
在训练脚本中使用 SageMaker 模型并行库的功能之前,请查看SageMaker 分布式模型并行配置提示和陷阱.
-
要更快地启动培训作业,请使用SageMaker 本地模式
. 这有助于您在 SageMaker 笔记本实例上快速在本地运行培训作业。根据运行 SageMaker 笔记本实例的机器学习实例的比例,您可能需要通过更改模型配置(例如隐藏宽度、变压器层数和注意头)来调整模型的大小。在使用大型集群训练完整模型之前,验证简化模型是否在笔记本实例上运行良好。
使用 SageMaker 控制台和 Amazon CloudWatch 监控和记录培训 Job
要监控系统级指标,例如 CPU 内存利用率、GPU 内存利用率和 GPU 利用率,请使用SageMaker 控制台
-
在左侧导航窗格中,选择训练.
-
选择 Training jobs (训练作业)。
-
在主窗格中,选择要查看更多详细信息的培训作业名称。
-
浏览主窗格并找到显示器部分以查看自动可视化。
-
要查看培训作业日志,请选择查看日志中的显示器部分。您可以在 CloudWatch 中访问培训作业的分布式培训作业日志。如果您启动了多节点分布式培训,则应该看到多个日志流,其格式为算法 n-1234567890. 这些区域有:算法 -1日志流跟踪来自主(第 0 个)节点的训练日志。
有关更多信息,请参阅 使用 Amazon CloudWatch 指标监控和分析训练作业。
权限
要运行具有模型并行性的 SageMaker 培训作业,或者SageMaker 分布式培训示例笔记
-
要使用 Amazon S3 作为数据渠道,请添加
AmazonS3FullAccess. -
要使用 Docker、构建自己的容器并将其推送到 Amazon ECR,请添加
AmazonEC2ContainerRegistryFullAccess. -
要拥有使用整个 SageMaker 功能套件的完全访问权限,请添加
AmazonSageMakerFullAccess.