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

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

模型并行性概念

模型并行性是一种分布式训练方法,其中深度学习 (DL) 模型分为多个 GPUs 和实例。 SageMaker 模型并行库 v2 (SMP v2) 与原生 PyTorch APIs 库和功能兼容。这使您可以方便地调整 PyTorch 完全分片数据并行 (FSDP) 训练脚本以适应 SageMaker训练平台,并利用 SMP v2 提供的性能改进。本介绍页面提供了有关模型并行性的整体概述,并介绍了模型并行性如何帮助解决在训练通常非常大的深度学习 (DL) 模型时出现的问题。它还提供了 SageMaker模型并行库为帮助管理模型并行策略和内存消耗而提供的示例。

什么是模型并行性?

对于计算机视觉和自然语言处理等复杂的任务,增加深度学习模型(层和参数)的大小可以提高准确性。但是,在单个 GPU 的内存中所能容纳的最大模型大小有限制。在训练 DL 模型时,GPU 内存限制可能会在以下方面成为瓶颈:

  • 它们限制了您可以训练的模型的大小,因为模型的内存占用量与参数数量成比例扩展。

  • 它们限制训练期间的每个 GPU 的批次大小,从而降低了 GPU 利用率和训练效率。

为了克服与在单个 GPU 上训练模型相关的限制, SageMaker AI 提供了模型并行库,以帮助在多个计算节点上高效地分发和训练 DL 模型。此外,借助该库,您可以使用支持 EFA 的设备实现优化的分布式训练,这些设备具备低延迟、高吞吐量和 OS 旁路等特性,可以增强节点间通信的性能。

在使用模型并行性之前估算内存需求

在使用 SageMaker 模型并行库之前,请考虑以下内容,以了解训练大型 DL 模型的内存需求。

对于使用 float16 (FP16) 或 bfloat16 (BF16) 和 Adam 优化器等自动混合精度的训练作业,每个参数所需的 GPU 内存约为 20 字节,我们可以将其分解如下:

  • FP16 或 BF16 参数 ~ 2 字节

  • FP16 或 BF16 渐变 ~ 2 字节

  • 基于 Adam FP32 优化器的优化器状态 ~ 8 字节

  • 大约 4 字节的参数 FP32 副本(optimizer apply(OA)操作需要)

  • 大约 4 字节的渐变 FP32 副本(OA 操作需要)

即使对于具有 100 亿个参数这样的相对较小 DL 模型,它也会需要至少 200 GB 的内存,这比单个 GPU 上典型的可用 GPU 内存(例如,NVIDIA A100 具有 40 GB/80 GB 内存)大得多。除了模型和优化器状态的内存要求外,还有其他因素也会占用内存,例如在向前传递中生成的激活。所需的内存可能远远超过 200 GB。

对于分布式训练,我们建议您使用分别具有 NVIDIA A100 和 H100 Tensor Core 的 Amazon EC2 P4 和 P5 实例。 GPUs 有关 CPU 内核、RAM、附加存储卷和网络带宽等规格的更多详细信息,请参阅 Amazon EC2 实例类型页面的加速计算部分。有关 SMP v2 支持的实例类型,请参阅 支持的实例类型

即使使用加速型计算实例,对于具有大约 100 亿个参数的模型(例如 Megatron-LM 和 T5),甚至具有数千亿个参数的更大模型(例如 GPT-3),也无法在每个 GPU 设备中容纳模型副本。

库如何使用模型并行性和内存节省技术

库中包含各种类型的模型并行功能和节省内存的功能,例如优化器状态分片、激活检查点和激活分载。所有这些技术可以结合使用,从而高效地训练由数千亿个参数组成的大型模型。

分片数据并行性

分@@ 片数据并行性是一种节省内存的分布式训练技术,它在数据并行组中拆分模型的状态(模型参数、梯度和优化器状态)。 GPUs

SMP v2 通过 FSDP 实现了分片数据并行性,并对其进行了扩展,以实现规模感知混合分片策略,详见博客文章 Amazon上巨型模型训练的近线性扩展

您可以将分片数据并行性作为独立策略应用到模型。此外,如果您使用的是配备NVIDIA A100 Tensor Core的最高性能的GPU实例 GPUsml.p4de.24xlargeml.p4d.24xlarge并且可以利用SageMaker 数据并行度 (SMDDP) 库提供的AllGather操作提高的训练速度。

要深入研究分片数据并行性并学习如何对其进行设置,或者将分片数据并行性与其他技术(例如张量并行和混合精度训练)结合使用,请参阅 混合分片数据并行性

专家并行性

SMP v2 与 NVIDIA 威震天集成,除了支持原生 FSDP 之外,还实现了专家并行性。 PyTorch APIs您可以保持 PyTorch FSDP 训练代码不变,并应用 SMP 专家并行性在 AI 中训练混合专家 (MoE) 模型。 SageMaker

MoE 模型是一种转换器模型,由多个专家组成,每个专家都由一个神经网络组成,通常是一个前馈网络 (FFN)。一个称为路由器的网关网络决定将哪些令牌发送给哪些专家。这些专家专门处理输入数据的特定方面,使模型的训练速度更快,计算成本更低,同时达到与其对应的密集模型相同的性能质量。专家并行性是一种并行性技术,用于在 GPU 设备上处理 MoE 模型的专家拆分。

要了解如何使用 SMP v2 训练 MoE 模型,请参阅 专家并行性

张量并行性

张量并行可跨设备拆分各个层(即 nn.Modules),以并行运行。下图显示了一个最简单的示例,演示 SMP 库如何拆分具有四个层的模型,以实现两路张量并行 ("tensor_parallel_degree": 2)。在下图中,模型并行组、张量并行组和数据并行组的符号分别为 MP_GROUPTP_GROUPDP_GROUP。每个模型副本的层被一分为二,分布为两 GPUs层。库管理张量分布式模型副本之间的通信。

演示 SMP 库如何拆分具有四个层的模型以实现两路张量并行 ("tensor_parallel_degree": 2) 的最简单的示例。

要深入了解张量并行性和其他节省内存的功能 PyTorch,以及如何设置核心功能的组合,请参阅。张量并行性

激活检查点并卸载

为了节省 GPU 内存,库支持激活检查点,以避免在向前传递期间,将用户指定模块的内部激活存储在 GPU 内存中。库会在向后传递期间重新计算这些激活。此外,通过激活卸载,它还能将存储的激活卸载到 CPU 内存中,并在后向传递时将其取回 GPU,从而进一步减少激活内存占用。有关如何使用这些功能的更多信息,请参阅 激活检查点激活分载

为模型选择合适的技术

有关选择合适技术和配置的更多信息,请参阅 SageMaker 分布式模型并行性最佳实践