Amazon SageMaker 模型并行库中的新性能改进

Amazon SageMaker 模型并行库中的新性能改进

源节点: 1773720

基础模型是在大量数据上大规模训练的大型深度学习模型。 它们可以进一步微调以执行各种下游任务,并形成支持多个 AI 应用程序的核心骨干。 最突出的类别是大型语言模型 (LLM),包括自回归模型,例如经过训练以完成自然文本的 GPT 变体。 LLM 通常包含数十亿个参数,这使得它们很少适合单个加速器,并且需要模型并行技术。 另一类是扩散模型,特别是 稳定扩散,这将 AI 图像生成推向了一个前所未有的里程碑,可以从简单的文本描述中生成非凡的视觉效果。 扩散模型通常比 LLM 小得多,分布式训练仍然在促进开发方面发挥关键作用。

SageMaker 模型并行 (SMP) 库 是一种大型模型训练解决方案,可用于 亚马逊 SageMaker 平台. 它可以与 PyTorch 模型集成,轻松应用一系列最先进的大型模型分布式训练技术进行大规模训练。 今年早些时候,SMP 推出 分片数据并行性,一种由亚马逊内部支持的分布式训练技术 麦克风 引擎盖下的技术。 跨数据并行工作者的分片数据并行分片模型参数、梯度和优化器状态。 MiCS 执行多项优化,包括规模感知分区以提供近线性可扩展性。 在 使用分片数据并行性训练具有近线性缩放的巨大模型,我们分享了在序列长度为 39.7 的 3B 参数 GPT-30 模型上,与 DeepSpeed ZeRO-2 相比,SMP 中的分片数据并行实现了 2048% 的加速。

为了帮助我们的客户进一步降低培训成本并加快上市时间,我们很高兴在 SageMaker 模型中并行引入两项新的性能改进—— SMDDP集体闪光灯. SMDDP Collectives 是 AWS 基础设施上性能最高的集体库,用于由 SageMaker分布式数据并行库. FlashAttention 介绍于 道等人。,它以 IO 感知的方式重新实现了注意力机制,降低了内存带宽需求,节省了注意力速度和内存占用。 在 30.58 个 p100d.32xlarge 实例上训练 4B 参数 GPT-NeoX 模型时,这两个组件共同推动我们的分片数据并行技术快 24%。 对于已经在支持的模型上并行使用分片数据的客户,无需更改代码即可从这些最新功能提供的性能提升中获益。 稳定人工智能, 的发明者 稳定扩散 显示出无与伦比的图像生成能力的模型系列选择使用 SMP 来构建基础模型。 借助 SMP,Stability AI 在 163 个 p13d.32xlarge 实例上为 4B 参数 GPT-NeoX 实现了每个 GPU 24 TFLOPs,与 DeepSpeed 相比速度提高了 58%。 您可以在 AWS re:Invent 2022 上 Stability AI CEO 的演讲中或在这个 博客文章.

“我们在 Stability AI 的使命是建立基础,通过人工智能激活人类的潜力。 为了实现这一使命,我们需要在数百个加速计算实例上高效地训练开源基础模型。 我们依靠 SageMaker 及其分布式训练库来优化性能并实施最先进的策略,以在我们的训练集群中分割模型和数据。 这些优化降低了我们的培训成本,帮助我们更快地满足客户需求,并加快新模型的开发。”

-  Stability AI 创始人兼首席执行官 Emad Mostaque。

在这篇博文中,我们将首先介绍 SageMaker 模型并行库中的最新性能改进。 然后,我们将重新讨论如何使用并行分片数据训练基础模型。 最后,我们将对 13B、50B 和 100B 参数自回归模型的性能进行基准测试,并总结未来的工作。

SageMaker 模型并行库中的新性能改进

起点 AWS深度学习容器 (DLC) PyTorch 1.12.1,SageMaker 模型并行库 v1.13 附带以下两个对提高训练性能至关重要的新组件。 它们目前在 ml.p4d.24xlarge 实例上可用 弹性织物适配器 (EFA) 启用:

1. 来自 SMDDP Collectives 的 AWS 优化的 AllGather

在并行分片数据中,由于 GPU 上只存在模型状态的一个分片,因此需要一个 AllGather 集合体在前向或反向传递计算期间从分片组中的所有 GPU 收集全套参数。 在之前版本的 SageMaker 模型并行中,我们使用 NVIDIA Collective Communications Library (NCCL) 来处理这些集合体。 但是,NCCL 是一个通用的集体通信库,不是为 AWS 基础设施设计的,即使启用了 EFA,也会导致性能不佳。

此前,我们开发了 SMDDP集体 库提供了 AWS 优化的 All-Reduce 集合实现,以加速纯数据并行训练的性能。 为了提高具有分片数据并行性的大型模型训练的性能,我们扩展了 SMDDP Collectives 库以包括 AllGather 集体的优化实现。 SMDDP Collectives AllGather 的关键优势在于它采用 all-to-all 类型的通信模式进行节点间通信,使我们的 collective 具有高吞吐量和较低的延迟敏感度。 此外,我们的 AllGather 集体将与通信相关的处理卸载到 CPU,从而释放宝贵的 GPU 周期用于梯度计算,从而显着提高性能,尤其是在大型模型上。

2. 闪光注意力

在现代变压器架构中,内存消耗的最大来源之一是自注意力层中的激活足迹。 这是因为每个注意力头都会为每个输入计算一个 SxS 的注意力矩阵,其中 S 是序列长度,这个矩阵会经过 dropout、softmax 和矩阵乘法等多个操作,每个中间输出都需要内存空间以供在反向传播。

闪光灯(道等人。) 是斯坦福大学 HazyResearch 最近的一项创新,它以 I/O 感知的方式重新实现了自注意力机制。 FlashAttention 背后的主要见解是自注意力机制受到进出 GPU 高带宽内存 (HBM) 的内存带宽的瓶颈。 这意味着自注意力层可以在序列维度上按块计算,每个块一次通过整个自注意力管道。 块的中间结果存储在高带宽 SRAM 中,避免了每次迭代到 HBM 的昂贵往返。 尽管天真的实现会遇到 softmax 层的跨块依赖问题,但 FlashAttention 引入了一个巧妙的实现来回避这种依赖。 由于避免了 HBM 往返和 SxS 矩阵的存储,FlashAttention 结合向后传递中的重新计算,可以节省大量内存并提高性能(GPT-NeoX 25B 在 13 个 p16d 节点上的训练速度提高 4%)。 您可以在 HazyResearch 中找到视觉效果和更多解释 FlashAttention 存储库.

使用 SageMaker 模型并行训练基础模型

要使用由 SMDDP Collectives 提供支持的 SMP 训练基础模型,您的分片数据并行训练作业不需要进行额外更改。 如果您不熟悉并行使用分片数据,请按照此操作 完整的教程笔记本博客文章 这将引导您完成整个过程,从数据处理、定义和提交训练作业,到监控训练日志。 可以在以下位置找到 GPT-2 模型的即用型训练脚本 train_gpt_simple.py. 要训​​练不同的模型类型,您可以按照 API文件 了解如何应用 SMP API。

我们强调了关键的超参数 PyTorch 估计器 如下所示的分片数据并行训练作业。 超参数 ddp_dist_backend in smp_options 现在有一个新的选择, "auto" , 作为其默认值。 和 "auto", SMP 将使用 AWS 优化的 AllGather 进行分片数据并行作业,否则回退到 NCCL。 你可以参考 这个文件 支持的配置。 如果你想在 SMP 中并行运行分片数据,特别是将 NCCL 作为选择的通信后端,你可以设置“ddp_dist_backend""nccl" in smp_options.

import sagemaker
from sagemaker.pytorch import PyTorch smp_options = { "enabled": True, "parameters": { "ddp": True, "ddp_dist_backend": "auto", #OR "nccl" to disable SMDDP Collectives # To enable sharded data parallelism. # Here we shard model states across 128 GPUs. "sharded_data_parallel_degree": 128, }
} smp_estimator = PyTorch( entry_point="train_gpt_simple.py", role=sagemaker.get_execution_role(), instance_type='ml.p4d.24xlarge', instance_count=32, distribution={ "smdistributed": {"modelparallel": smp_options}, ... }, ...
) smp_estimator.fit(inputs=data_channels)

在最新的 SMPv1.13 版本中,分片数据并行训练技术支持开箱即用的流行模型的 FlashAttention,包括 BERT、RoBERTa、GPT-2、GPT-J、GPT-Neo 和 GPT-NeoX。 这是通过传递启用的 tensor_parallelism=True ,我们将参加 模型创建 无需设置 tensor_parallel_degree. 你可以在同一个训练脚本中找到一个例子 train_gpt_simple.py .

基准性能

我们在三种不同规模的模型上对 SageMaker 模型并行库中的分片数据并行性进行了基准测试,以了解 FlashAttention 和 AWS 优化的 AllGather 这两个新功能如何有助于提高性能。 放置组不需要在 SageMaker 上重现这些基准。

13B参数 GPT-NeoX

在此设置中,我们专注于了解 FlashAttention 带来的性能提升,而将 AWS 优化的 AllGather 排除在外。 使用 flash attention 可以节省大量的 GPU 内存,这有助于我们增加批处理大小或降低分片度,从而提高性能。 如下图所示,我们在 20.4-13 个 p16d 节点的各种配置上观察到 64B 参数 GPT-NeoX 模型的 flash attention 在 SMP 中平均提速约 4%。 随着序列长度的增加,标准注意力计算期间的内存使用量以二次方式扩展,但 FlashAttention 的内存使用量与序列长度呈线性关系。 因此,随着序列长度的增加,FlashAttention 会更有帮助,并且可以使用更大的序列长度。 在不牺牲模型质量的情况下提高内存效率,FlashAttention 在过去几个月中在大型模型训练社区中迅速获得关注,包括与 拥抱面扩散器马赛克机器语言.

配置 性能
模型/培训 SMP 没有 FlashAttention
(TFLOPs/GPU)
 使用 FlashAttention
(TFLOPs/GPU)
% 加速
13B GPT-NeoX
序列长度:2048
全局批量大小:1024
FP16
16 个 p4d.24xlarge 节点 激活检查点
分片数据并行度:64
梯度累积:1
130 159 22.31
13B GPT-NeoX
序列长度:2048
全局批量大小:2048
FP16
32 个 p4d.24xlarge 节点 激活检查点
分片数据并行度:64
梯度累积:1
131 157 19.85
13B GPT-NeoX
序列长度:2048
全局批量大小:4096
FP16
64 个 p4d.24xlarge 节点 激活检查点
分片数据并行度:64
梯度累积:1
131 156 19.08

50B参数绽放

现在,我们看看来自 SMDDP Collectives 的 AWS 优化的 AllGather 如何使用 SMP 加速大型模型训练。 我们对一个 50B 参数的 Bloom 模型进行了基准测试,并比较了使用和不使用 AWS 优化的 AllGather 集合的性能。 我们观察到 SMDDP 集体在 40 个节点到 32 个节点的训练作业中将模型训练速度提高了 64%。 由于更好地利用 p400d.4xlarge 实例可用的 24 Gbps 网络带宽,SMDDP 集合有助于实现更好的性能。 这与将通信相关处理卸载到 CPU 的设计选择相结合,有助于实现良好的计算与网络重叠,从而优化性能。 计算到网络的重叠在大型模型中尤为重要,因为跨节点通信的数据大小会随着模型大小的增加而线性扩展。

配置 性能
模型/培训 SMP 没有 AWS 优化的 AllGather
(TFLOPs/GPU)
 使用 AWS 优化的 AllGather
(TFLOPs/GPU)
% 加速
50B 绽放
序列长度:2048
全局批量大小:2048
BF16
32 个 p4d.24xlarge 节点 激活检查点
分片数据并行度:128
梯度累积:1
102 143 40.20
50B 绽放
序列长度:2048
全局批量大小:4096
BF16
64 个 p4d.24xlarge 节点 激活检查点
分片数据并行度:128
梯度累积:1
101 140 38.61

100B参数 GPT-NeoX

最后,我们在启用两个最新功能的情况下对 SMP 进行基准测试。 它表明这个新版本的 SMP v1.13 在 30B 参数的 GPT-NeoX 模型上比以前的版本快 100%。

配置 性能
模型/培训 SMP 没有 FlashAttention 和 AWS 优化的 AllGather
(TFLOPs/GPU)
使用 FlashAttention + AWS 优化的 AllGather
(TFLOPs/GPU)
% 加速
100B GPT-NeoX
序列长度:2048
全局批量大小:2048
FP16
32 个 p4d.24xlarge 节点 激活检查点
分片数据并行度:256
卸载激活

  • 没有 FlashAttention:批量大小为 4,梯度累积为 2 步。
  • 使用 FlashAttention:批量大小为 8,没有梯度累积
121 158 30.58
100B GPT-NeoX
序列长度:2048
全局批量大小:4096
FP16
64 个 p4d.24xlarge 节点 激活检查点
分片数据并行度:256
卸载激活

  • 没有 FlashAttention:批量大小为 4,梯度累积为 2 步。
  • 使用 FlashAttention:批量大小为 8,没有梯度累积
122 158 29.51

对于未来的工作,我们将致力于在 SMDDP 集体中支持 AWS 优化的 Reduce-Scatter。 Reduce-Scatter 集体对于在反向传递中计算的平均和分片梯度至关重要。 我们希望这能在未来的版本中进一步加速 SMP 库。

结论

在本文中,我们讨论了 SageMaker 模型并行库中分片数据并行技术的两项最新性能改进。 LLM 在提高 ML 模型的质量和可重用性方面显示出巨大的希望。 AWS 团队正在与客户密切合作,以不断降低他们的培训成本和上市时间。 您可以在中找到更多 SageMaker 模型并行示例 Amazon SageMaker 示例 GitHub 存储库 或参加我们的下一个 分布式培训研讨会. 如果您有兴趣加快大型模型训练,请查看这些功能并让我们知道您构建了什么!


关于作者

Arjun Balasubramanian 先生 是 AWS 的一名高级软件工程师,专注于为分布式深度学习构建高性能、硬件加速的集体通信算法。 他对大规模机器学习和网络系统很感兴趣。 工作之余,他喜欢旅游和参加各种运动。

朱兆琪 是 AWS 的一名软件开发工程师,专门研究分布式深度学习系统并致力于 SageMaker 分布式数据并行库。 工作之余,赵棋对足球充满热情,希望在即将到来的新赛季不吃到红牌。

坎卡拉库斯 是 AWS 的高级应用科学家,负责优化 AWS 上的大规模分布式深度学习。 他的研究兴趣包括深度学习、分布式优化、分布式系统和信息论。 工作之余,他喜欢骑自行车、旅行、阅读和学习。

拉胡尔·惠尔戈尔 是 AWS 的高级软件工程师。 他致力于分布式深度学习系统,旨在使在云中训练大型深度学习模型变得容易和高效。 在业余时间,他喜欢摄影、骑自行车和园艺。

苏希特·科古勒 是 AWS 人工智能团队的一名软件开发工程师,致力于深度学习框架。 业余时间,他喜欢远足、旅游和烹饪。

吴飞 是 AWS 的一名软件工程师。 他致力于云上大规模深度学习模型的分布式训练。 工作之余,他喜欢篮球、游戏和烹饪。

时间戳记:

更多来自 AWS机器学习