使用DeepSpeed训练您的大型模型

概述

DeepSpeed 已被用于训练或正在训练一些现存最大的密集模型。这些包括但不限于:

DeepSpeed 提供了一系列系统技术,使得在这些规模上训练模型成为可能。训练大型模型的最佳技术取决于多种因素,如模型架构、批量大小、互连带宽等。鉴于可用的选择数量众多,这可能会让人感到困惑甚至望而生畏。本页旨在作为一个入门指南,帮助您在训练大型模型的旅程中导航。

训练大型模型的可能方法

在广泛层面上,训练大型模型主要有两种途径:

  • 基于ZeRO(零冗余优化器)的技术
  • 基于3D并行技术的技术

基于ZeRO的技术:简单来说,ZeRO是一种内存高效的数据并行形式,它允许你访问所有可用GPU设备的聚合GPU内存,而不会因数据并行中的数据复制而导致效率低下。此外,DeepSpeed还提供了基于ZeRO的异构内存技术,如ZeRO-Offload和ZeRO-Infinity,这些技术允许你在目标系统上有效利用CPU和NVMe内存。

由于ZeRO是数据并行的一种替代方案,它提供了无缝集成,不需要对现有的数据并行模型进行代码重构。在大多数情况下,基于ZeRO的技术提供了模型的可扩展性和训练吞吐效率,同时不牺牲易用性。

基于3D并行性的技术:3D并行性指的是三种不同形式的并行技术的组合,即张量切片、管道并行性和数据并行性(或由ZeRO驱动的数据并行性)。结合这三种形式可以充分利用每种技术的优势,而不会受到任何技术的缺点影响。3D并行性使DeepSpeed在仅依赖基于ZeRO的技术可能不足的情况下,能够实现出色的训练吞吐效率。然而,3D并行性需要对模型代码进行非平凡的改造,因此仔细考虑以确定3D并行性可以带来显著吞吐效益的情况是非常重要的。

决定使用哪种技术

GPT-2/GPT-3 类似模型的 3D 并行:如果您正在尝试训练一个架构与 GPT-2 或 GPT-3 非常相似的模型,那么我们已经完成了将 3D 并行移植到基于 GPT-2/GPT-3 架构的模型的艰巨工作,并创建了一个训练管道,您可以使用它来高效地训练具有数千亿甚至数万亿参数的模型。Megatron-Turing NLG 530B 和 Big Science 都使用了这个代码库的变体来扩展模型训练。您可以在 DeepSpeed-Megatron GPT-3 仓库中找到代码和教程以开始使用。有关 3D 并行的更多信息,请查看以下资源:

3D Parallelism Tutorial 一个关于如何将您的模型移植以使用DeepSpeed 3D并行的通用教程

3D Parallelism Deep Dive 一篇来自微软研究院的博客文章,深入探讨了DeepSpeed中的3D并行实现。

基于ZeRO的技术:对于大多数训练场景,ZeRO提供的训练效率与3D并行相当,且不需要重构模型代码。因此,如果您尚未将代码移植到使用3D并行,我们建议首先尝试ZeRO技术,看看它是否满足您的需求。使用DeepSpeed将ZeRO添加到您的训练管道中非常简单,且不需要对模型进行更改。鉴于使用DeepSpeed尝试ZeRO的成本极低,这是评估并决定是否应进一步投资将模型移植到使用3D并行的最快方法。启用DeepSpeed的ZeRO还可以让您访问ZeRO-Offload和ZeRO-Infinity,这些技术可以在有限的GPU资源上微调大型模型。要开始使用,请查看我们的ZeRO教程

有关ZeRO技术系列的更多深入信息,请查看我们的论文:

ZeRO (SC20), ZeRO Offload (ATC21) , 和 ZeRO-Infinity (SC21),

和博客文章:

ZeRO & DeepSpeed, ZeRO-2 & DeepSpeed, ZeRO-Offload, 和 ZeRO-Infinity & DeepSpeed

理解ZeRO与3D并行之间的性能权衡

当每个GPU的批量大小不是非常小时,ZeRO和3D并行的性能通常相当。ZeRO是一种更高效的内存数据并行形式,其通信成本与数据并行本身非常相似。因此,在所有数据并行表现良好的场景中,ZeRO也会表现良好。事实上,由于其内存效率,ZeRO能够为大型模型适应显著更大的批量大小,与数据并行相比,可以实现更好的吞吐效率。

然而,在某些情况下,批量大小可能不足以使ZeRO高效运行。这种情况在数千个GPU上训练或网络带宽有限时尤其明显。例如,在4K GPU上训练GPT-3模型,批量大小限制为2K,将导致每个GPU的批量为0.5,根据序列长度和网络带宽的不同,这可能不足以仅使用ZeRO维持良好的性能。

在这种情况下,应考虑是否有可能增加批量大小以提高效率。然而,如果由于收敛相关的问题而无法增加批量大小,那么在3D并行中的管道并行可以按管道阶段的数量比例增加有效网络带宽,从而使3D并行比ZeRO实现更好的吞吐量。

更新: