ZeRO-2(P_os+g):分布式梯度、优化器状态: ZeRO-2 是 ZeRO(Zero Redundancy Optimizer) 优化的第二个阶段,它在 ZeRO-1 的基础上进一步优化了梯度的存储方式。在 ZeRO-2 中,除了优化器状态被分片存储之外,梯度也被分布式存储,每个 GPU 只存储部分梯度,而不是完整的梯度。这进一步减少了内存消耗,并在大规模模型...
看到这里,也许你有点感觉了,ZeRO的思想就是:万物皆可切,万物皆可抛。所以现在,我们把参数也切开。每块GPU置维持对应的optimizer states,gradients和parameters(即W)。 数据并行的流程如下:(1)每块GPU上只保存部分参数W。将一个batch的数据分成3份,每块GPU各吃一份。(2)做forward时,对W做一次All-Gather,取回分布...
ZeRO(Zero Redundancy Optimizer)是一种去除冗余的分布式数据并行(Data Parallel)方案,分为Stage 1, Stage 2, Stage 3,而Deepspeed就是论文中ZeRO方法的Microsoft官方的工程实现。 ZeRO-Offload为解决由于ZeRO而增加通信数据量的问题,提出将GPU转移到CPU ZeRO-Infinity同样是进行offload,ZeRO-Offload更侧重单卡场景,而ZeR...
要为DeepSpeed模型启用ZeRO优化,我们只需要将zero_optimization键添加到DeepSpeed JSON配置中。有关zero_optimization键的配置的完整描述,请参见此处(https://www.deepspeed.ai/docs/config-json/#zero-optimizations-for-fp16-training)。 训练一个1.5B参数的GPT2模型 我们通过展示ZeROStage 1的优点来演示它使得在八个...
(1)预训练时,optimizer占用8倍参数量的显存空间,是最耗费显存的,所以肯定先从这种“大户”下手啦!前面的DP和DDP,每块显卡都保存了完整的optimizer,互相都有冗余,能不能消除这个冗余了?比如集群有3块显卡,每块显卡只存1/3的optimizer状态?这就是ZeRO-1的思路!举个栗子:transformer不论decoer还是encoder,不是由一...
DeepSpeed 通过先进的 ZeRO 优化器有效地训练非常大的模型。在2020年2月,我们在 DeepSpeed 中发布了 ZeRO 的一部分优化,该优化执行优化器状态切分。我们将其称为 ZeRO-1。在2020年5月,我们在 DeepSpeed 中扩展了 ZeRO-1,包括来自 ZeRO 的其它优化,包括梯度和激活切分,以及连续内存优化。我们将此版本称为 ZeRO-...
第三档就是Zero3 Pos+g+p ,p 就是Parameter,所以Zero3连模型参数也给拆分了,这个如果N特别大,可以认为显存无限趋近于0了。 看起来Zero几乎是面临显存限制时的最好解法,在不考虑通信的前提下。 现在需要把通信的代偿计算进来,可以先说明结论,Zero1和Zero2与传统的数据并行所占用的通信量是一至的。
看起来Zero几乎是面临显存限制时的最好解法,在不考虑通信的前提下。 现在需要把通信的代偿计算进来,可以先说明结论,Zero1和Zero2与传统的数据并行所占用的通信量是一至的。 传统的DDP这样的数据并行,在每一步计算梯度以后,需要通过All-reduce来计算梯度的均值,分为ReduceScatter加上AllGather这两部分吗,这个时候每张...
ZeRO Stage 1: 划分optimizer states。优化器参数被划分到多个memory上,每个momoey上的进程只负责更新它自己那部分参数。ZeRO Stage 2: 划分gradient。每个memory,只保留它分配到的optimizer state所对应的梯度。这很合理,因为梯度和optimizer是紧密联系在一起的。只知道梯度,不知道optimizer state,是没有办法优化模型参...