零3卸载:缩放DL型号到千万参数,没有代码更改

2021-03-13 23:46:40

今天,我们宣布释放零3卸载,​​高效易于使用的零级3和零卸载的实施,通过为每个人提供高效的大规模DL培训,实现了民主化AI的持续目标。零3卸载的主要优点是:

前所未有的内存效率在有限数量的GPU资源上运行非常大的模型 - 例如,在单个GPU上具有超过40B参数的微调模型,在512 GPU上超过2万亿参数!

非常易于使用:缩小到千万的参数,无需以复杂的方式组合多个并行技术。

对于现有的DeepSpeed用户,在DeepSpeed Confif文件中只需几个标志,打开零3卸载。

PPU的高性能Per-GPU吞吐量和超线性可扩展性进行分布式训练。借助1万亿参数,零3卸载在512 NVIDIA V100 GPU上维持25个PETAFLOPS,实现49个TFLOPS / GPU。

零冗余优化器(缩写零)是用于大规模分布式深度学习的内存优化技术系列。与数据并行性不同(高效但只能支持有限的模型大小)或型号并行性(这可以支持更大的模型大小,而是在添加限制效率的通信开销时需要重大代码重构),零允许在不需要代码的情况下拟合更大的模型重构留下非常有效。零是通过消除数据并行性中固有的内存冗余,同时将通信开销限制为最终的通信.zero通过划分数据(优化器状态,​​渐变和参数)划分数据并行处理跨数据并行进程的内存冗余 - 平行流程而不是复制它们。通过这样做,它将内存效率与经典数据并行相比提高,同时保持其计算粒度和通信效率。零中的三个阶段对应于三个模型状态,如图1所示:第一级(零1)仅分区优化器状态,​​第二级(零2)分区优化状态和渐变和最终阶段(零3)分区所有三个模型状态(有关更多详细信息,请参阅零纸)。

除了这三个阶段,零技术还包括零2卸载。零2卸载是一个异构DL训练技术,与零2一起配合,以将分区优化器状态和渐变卸载到CPU内存。零2卸载即使在单个GPU上也提供过零2的全内存优势,同时在多GPU设置上提供零2的巨大可扩展性。深度图书馆自9月2020年9月以来一直提供零2卸载。有关详细信息,请参阅以下:

随着当今Zero-3卸载的释放,除了优化器状态和DeepSpeed中的零2卸载已经支持的优化器状态和渐变分区之外,我们还会增加对分区和卸载参数的支持。参数分区零3卸载在零的三个阶段中实现了全套特征,这允许使用GPU的数量模型大小的线性增长。此外,零3卸载还可以选择将所有这些模型状态卸载到CPU,以进一步降低GPU存储器消耗,利用CPU和GPU来最大化内存和整个系统的计算效率。

我们认为零3卸载提供了大型模型培训的大规模飞跃,三项问候:

与零2和零卸载不同,其中参数必须适合单个GPU的存储器,零3卸载可以将参数分区GPU,并将其卸载到CPU,支持模型大小比内存要大得多单个GPU。此外,零3卸载超出了最先进的混合3DParallid(数据,模型和管道并行组合)。虽然3D并行性受到GPU存储器的总体内存的限制,但零3卸载可以利用GPU和CPU内存,后者与GPU存储器相比,后者更大,更便宜。这允许零3卸载与给定的GPU和CPU资源培训更大的模型大小,而不是任何其他当前可用的技术。

单个GPU上的模型刻度:零3卸载可以在单个GPU(例如,32GB V100 GPU + 1.5TB CPU存储器)上有效地培训具有超过40B参数的模型。这比零2卸载,目前最先进的卸载大于可能的3倍。

Multi-GPU上的模型刻度:使用零3卸载,​​您可以分别使用256GPus和512个GPU的NVIDIA 32GB V100 DGX-2集群培训万亿和两个亿万的参数模型。相比之下,最先进的3DParparationItm需要800GPus,分别为1600GPus,以适合相同的大小模型。这表示使用超过万亿参数的模型所需的GPU减少3倍。

从系统的角度来看,培训模型具有数百亿亿万节的参数是极具挑战性的。数据并行性无法扩展模型大小,超过十亿个参数,模型并行性(带有张量切片)不能用于缩放模型大小,由于大规模的通信开销导致的单个节点边界之外,而流水线并行不能超过层数。可在模型中提供,限制模型大小和可以缩放的GPU的数量。

唯一可以在大量平行GPU集群上缩放到万亿参数的唯一现有的并行技术是将数据,模型和管道并行性以复杂的方式组合的3DParessib。虽然这种系统可以非常有效,但它需要从数据科学家重构的主要模型代码重构,将模型分成负载平衡管道级。这也使3D并行性在它可以支持的模型类型中不灵活,因为具有复杂依赖图形的模型不能轻易转换为负载平衡管道。

i)采用接地内存效率,零3和零3卸载是唯一可以自行衡量到万亿参数的DL并行技术,而无需混合并行策略,大大简化了系统堆栈进行DL培训。

ii)Zero-3卸载需要模型科学家的实际上没有模型重构,从模型科学家解放数据科学家将复杂的模型扩展到数百亿亿千千万个参数。

多个节点上的高性能PER-GPU吞吐量:零3卸载为多亿和多亿兆比参数模型提供出色的培训效率。它在包含512个NVIDIA V100 GPU的32个DGX2节点上运行的每个GPU的持续吞吐量可达50 TFLOPS(参见图2)。相比之下,使用Pytorch的标准数据并行训练只能为1.2B参数模型实现30个TFLOPS,最大的模型可以单独使用数据并行性训练。

与标准数据并行训练相比,零3卸载获得高效率,尽管为固定批次大小的标准数据并行培训,零级3的通信开销。这是通过通信重叠的设计和实现可以实现的,这允许零3卸载隐藏几乎所有的通信体积,同时利用较大的批量尺寸,以提高由更好的GPU存储器效率导致的提高效率。

在单个GPU上有效的多亿参数模型培训:通过在单个GPU上实现高亿参数模型的高近亿参数模型进行高效培训,从零3卸载进一步民主化AI。对于单个GPU培训,零3卸载沿两个维度提供超过零2卸载的好处。首先,零3卸载将模型的大小增加在13b至40b的单个V100上。其次,与零2卸载相比,零3卸载提供加速(例如,2.3B,13B),用于通过两种解决方案可训练的型号尺寸。这些结果总结在图3中。

跨GPU的超线性可伸缩性:此外,零3卸载还保留了我们通过先前的零技术(零级1,零级2和零卸载)所展示的超线性可扩展性特性。零3卸载可以在多GPU训练配置中的所有GPU上利用GPU和CPU之间的聚合PCI-e带宽,同时,它还可以利用所有节点的聚合CPU计算。结果,CPU-GPU-CPU通信时间以及优化器更新时间分别与GPU和节点的数量线性降低,允许零3卸载表现出超线性缩放(参见图4)。

与许多其他现有的DeepSpeed功能一样,一旦用户模型已转换为使用DeepSpeed,就可以在DeepSpeed配置文件中打开零3卸载等于开启几个标志。支持具有权重共享的高级功能,或实现需要跨GPU /节点划分的极大型号以适应GPU / CPU存储器,只需使用零3卸载API即可使用几行额外的代码更改。

如果您已经是DeepSpeed用户,您可以在下面的零3卸载中找到详细的教程。 如果您是DeepSpeed的新手,我们建议您在尝试零3卸载教程之前从“入门”页面开始。