建模并行度概念 - Amazon SageMaker

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

建模并行度概念

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

什么是模型并行度?

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

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

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

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

在使用模型并行度之前估计内存需求

在使用 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型号,它也可能至少需要200GB的内存,这比单机上可用的典型GPU内存(例如,具有40GB/80GB内存的 NVIDIA A100)大得多。GPU除了模型和优化器状态的内存要求外,还有其他内存消耗器,例如在正向传递中生成的激活。所需的内存可能远远超过 200 GB。

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

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

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

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

分片数据并行性

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

SMPv2 实现了分片数据并行性,并对其进行了扩展FSDP,以实现博客文章《巨型模型训练的近线性缩放》中讨论的规模感知混合分片策略。 AWS

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

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

专家平行性

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

MoE 模型是一种由多个专家组成的变压器模型,每个专家都由一个神经网络组成,通常是一个前馈网络 () FFN。名为 rout er 的门禁网络决定将哪些令牌发送给哪位专家。这些专家专门处理输入数据的特定方面,使模型能够更快地训练,降低计算成本,同时实现与对应密集模型相同的性能质量。专家并行性是一种并行技术,用于在设备之间拆分 MoE 模型的专家。GPU

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

张量并行性

Tensor 并行性将单个层或nn.Modules跨设备拆分为并行运行。下图显示了SMP库如何将模型分成四层以实现双向张量并行度的最简单示例 ()。"tensor_parallel_degree": 2在下图中,模型并行组、张量并行组和数据并行组的符号分别为MP_GROUPTP_GROUP、和DP_GROUP。每个模型副本的层被一分为二,分布为两GPUs层。库管理张量分布式模型副本之间的通信。

该SMP库如何将模型分成四层以实现双向张量并行度的最简单示例(“tensor_parallel_degree”:2)。

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

激活检查点和卸载

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

为模型选择合适的技术

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