Deepspeed的机制学习以及ZeRO-1、ZeRO-2和ZeRO-3的区别

目录

DeepSpeed 机制

1. 分布式训练

2. 模型并行性

3. 内存和带宽优化

4. 高效的数据加载和预处理

5. 易用性和兼容性

6. 微调和超参数优化

ZeRO-1、ZeRO-2和ZeRO-3的区别

ZeRO优化级别概述

ZeRO-1

ZeRO-2

ZeRO-3

总结


DeepSpeed 机制

1. 分布式训练

DeepSpeed 是一个用于深度学习优化的库,它提供了一系列改进深度学习模型训练性能的技术。DeepSpeed 特别针对大规模分布式训练环境进行了优化,允许模型跨越大量的处理器进行训练。

  • ZeRO优化器:ZeRO(Zero Redundancy Optimizer)是DeepSpeed中的关键组件之一,它通过优化模型状态的存储和通信来大幅减少所需的内存占用,使得可以在有限的资源下训练更大的模型。
  • 分片参数:ZeRO通过对参数、梯度和优化器状态进行分片,将它们平均分配到所有的GPU中,这样每个GPU只存储一部分数据,从而减少了单个设备的内存需求。
2. 模型并行性

DeepSpeed 支持模型并行性,这意味着模型的不同部分可以在不同的GPU或其他处理器上并行运行。

  • Tensor切片:通过在多个GPU之间切分神经网络的不同层,DeepSpeed可以处理那些单个GPU无法容纳的大型模型。
  • 流水线并行性:DeepSpeed实现了流水线并行性,它将模型分成多个阶段,并在不同的GPU上并行处理这些阶段,从而进一步提高了训练效率。
3. 内存和带宽优化

DeepSpeed 实施了多种内存和带宽优化技术,以减少训练过程中的资源消耗。

  • 激活检查点:通过在训练过程中保存关键点的网络激活,可以在需要时重建其他激活,从而减少了内存的使用量。
  • 通信压缩:DeepSpeed采用了通信压缩技术,减少了节点之间传输数据的大小,从而降低了带宽需求。
4. 高效的数据加载和预处理

为了进一步提高训练速度,DeepSpeed 对数据加载和预处理过程也进行了优化。

  • 异步数据加载:通过异步加载数据,可以确保GPU始终有数据可用,从而减少了等待时间。
  • 智能数据预处理:DeepSpeed 优化了数据预处理流程,以最小化对训练速度的影响。
5. 易用性和兼容性

DeepSpeed 设计了一系列API,使得它易于与现有的深度学习框架(如PyTorch)集成。

  • 简单API:提供简单的API,使得研究人员和开发人员可以轻松地将DeepSpeed集成到现有的训练脚本中。
  • 广泛兼容:DeepSpeed 旨在与多种硬件和网络架构兼容,这使得它在不同的环境中都能够使用。
6. 微调和超参数优化

DeepSpeed 提供了一些工具来帮助用户微调模型和优化超参数。

  • 自动调优:提供了自动调优工具,帮助用户找到最佳的训练参数。
  • 超参数搜索:DeepSpeed支持超参数搜索,以实现模型的最佳性能。

DeepSpeed 是一个快速发展的项目,它持续在性能优化、可扩展性和用户友好性方面进行创新。通过上述机制,DeepSpeed 极大地提高了大规模深度学习模型训练的效率和可行性。

ZeRO-1、ZeRO-2和ZeRO-3的区别

ZeRO优化级别概述

ZeRO(Zero Redundancy Optimizer)是一种为了解决大规模分布式训练中的内存瓶颈问题而设计的优化器。它通过减少冗余数据来优化模型的内存使用,允许训练更大的模型。ZeRO分为三个优化级别:ZeRO-1、ZeRO-2和ZeRO-3,每个级别都在前一个级别的基础上进一步减少内存占用。

级别  作用
Zero-0 不进行任何形式的状态分片,只把DeepSpeed当成数据并行分布式数据并行(DDP)来用。
Zero-1 

执行优化器状态的划分,可以减少内存消耗到原来的1/4,同时保持通讯开销不变,

数据并行度不受影响。

Zero-2 

对优化器状态和梯度进行分片处理,实现了进一步的内存减少到原来的1/8,

同时通讯开销和数据并行度仍然维持不变。

Zero-3 

分片优化器状态、梯度和参数,内存减少的幅度和数据并行度成线性关系。

举例来说,在64个GPU(即Nd等于64情况下)的情况下,内存消耗可以降低64倍。

通讯量相对会增加50%。

Zero-Infinity Zero-Infinity是在Zero-3的基础上进一步发展,它可以通过利用NVMe SSD拓展GPU和CPU的内存来支持训练更大型的模型。
ZeRO-1
  • 若有Nd个并发工作的程序,它会把完整的优化器状态分Nd份,每份独立保存在不同的程序里。反向传播完成后,每个程序对负责的优化器状态(如动量Momentum,方差Variance,与FP32主参数)进行处理与更新。更新后的分区FP32主参数会通过全体汇集All-gather回传到每个程序,从而完成一轮参数的更新。利用ZeRO-1对优化器状态归分存储的方法,一个包含7.5B参数的模型,内存使用量可从原本数据并行模式下的120GB降低至31.4GB。
ZeRO-2
  • 对于ZeRO-2, ZeRO-1已经实现了优化器状态的分段存储,因此在处理过程中,每个片段的优化器状态只需要相应一小部分梯度Gradient即可。由此原则,ZeRO-2同样对梯度进行分片处理: 一旦层级的梯度全部算出后: 通过AllReduce操作使梯度合并(与DDP类似)。 合并后的梯度被指定的程序用于更新参数,其余程序的对应梯度便会立即释放(根据需要保留)。因此,ZeRO-1在此基础上实现了对梯度的分配存储。 通过ZeRO-2将梯度和优化器状态分段存储,那个7.5B参数的模型,内存占用可能从ZeRO-1的31.4GB进一步减少到16.6GB。

ZeRO-3
  • 说到ZeRO-3,分布式切割分段储存和更新了优化器状态和梯度之后,接下来就只剩模型参数了。ZeRO-3通过对优化器状态、梯度和模型参数进行分割管理,在所有进程中共同维护一份完整的模型状态。核心概念是根据计算所需进行精细化的通讯,以实现参数的有效收集和释放。
总结
  • ZeRO-1、ZeRO-2和ZeRO-3是递进的优化级别,每个级别都在前一个级别的基础上减少更多的内存冗余。
  • ZeRO-1主要优化优化器的存储,ZeRO-2进一步优化模型参数和优化器状态的存储,而ZeRO-3还包括对激活的优化。
  • 随着优化级别的提高,能够支持的模型大小也随之增加,但同时对集群的通信和计算能力要求也更高。

ZeRO是由微软研究院提出的,其详细信息可以在相关的研究论文和微软官方文档中找到。

也有的文档是这么介绍三个等级的:

ZeRO具有三个优化级别:

  1. ZeRO-DP(ZeRO-Data Parallelism): 这是ZeRO的基础级别,它主要减少了模型中梯度的冗余拷贝。在传统的数据并行训练中,每个设备上都保存一份模型的拷贝,并且都会计算梯度。ZeRO-DP使得每个设备只保存模型的一个独立片段,并且在设备间聚合梯度,从而降低内存消耗。

  2. ZeRO-RP(ZeRO-Redundancy Optimizer for Parameters): 在这个级别,ZeRO不仅减少了梯度的冗余,还优化了模型参数的冗余。每个训练设备不再保存完整的模型参数,而是保存一部分参数的唯一副本。通过参数重组和分布式参数更新,它降低了存储和通信开销。

  3. ZeRO-OP(ZeRO-Optimizer State Partitioning): 最高级的优化,ZeRO-OP进一步减少了优化器(如Adam, SGD等)状态的冗余。在大型模型训练中,优化器状态可能会占用大量内存。ZeRO-OP将这些状态划分并分散在不同设备上,进一步降低了单个设备所需的内存量。

总的来说,随着ZeRO优化级别的提升,可以支持的模型大小和训练速度都能得到显著提升,但同时也可能需要更复杂的通信和更高的网络带宽。

ZeRO-1,也称为ZeRO-DP(ZeRO-Data Parallelism),是ZeRO三个优化级别中的第一个。它主要目标是优化数据并行训练中的冗余梯度,减少显存(GPU内存)占用。

在传统的数据并行训练中,每个GPU都会保存一份模型的完整副本,包括所有的参数、梯度和优化器状态。这意味着模型的大小受限于单个GPU的内存,限制了可训练模型的规模。

ZeRO-1通过以下方式来减少内存占用:

  • 将梯度分片:在计算梯度时,并不在每个GPU上存储所有梯度的副本。相反,每个GPU只计算分配给它的参数的梯度。然后,这些梯度片被交换并汇总到所有GPU,用于模型更新。
  • 优化通信:ZeRO-1采用高效的通信策略来减少梯度聚合所需的数据量。

这个优化级别允许系统以较低的显存开销扩展到更大的模型,因为它没有存储冗余的梯度副本。这使得即使是显存较小的GPU也能训练大型模型,只要它们合作共享信息。

然而,ZeRO-1并没有解决参数和优化器状态的冗余问题,这些在ZeRO的更高优化级别中得到处理。因此,ZeRO-1特别适用于那些受限于GPU显存而无法扩展梯度大小的场景。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

samoyan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值