为什么基于deepspeed进行十亿到百亿参数规模的语言模型训练的时候 单卡训练建议采用ZeRO-2的方式而多卡训练采用ZeRO-3的方式

30 阅读2分钟

DeePSpeed 是一个微软开发的深度学习优化库,旨在使大规模模型的训练变得更为容易和高效。其中,ZeRO(Zero Redundancy Optimizer)是 DeePSpeed 中的一种优化技术,用于提高大规模模型训练的效率。ZeRO 有三种不同的阶段,ZeRO-1、ZeRO-2 和 ZeRO-3,每个阶段都提供了不同程度的优化。

  1. ZeRO-2:在 ZeRO-2 阶段,优化器状态、梯度和参数都是分片的,这意味着每个GPU只保存整个模型的一部分。这种分片方式允许在单个GPU上训练非常大的模型,因为模型的存储和管理分布在多个GPU上。ZeRO-2 通过消除冗余的参数存储来减少内存需求,同时仍然允许有效的梯度更新。
  2. ZeRO-3:ZeRO-3 是 ZeRO 系列中最先进的优化阶段,它不仅分片了优化器状态、梯度和参数,还分片了激活(activations)和远程参数(remote parameters)。这意味着每个GPU不仅存储模型的一部分,还负责计算模型的一部分输出。ZeRO-3 可以进一步减少内存需求,并提高多GPU环境下的训练效率。 为什么在单卡训练时可以采用 ZeRO-2,而在多卡训练时可以采用 ZeRO-3:
  • 单卡训练:在单卡训练时,由于只有有限的内存资源,因此需要最大化内存效率。ZeRO-2 通过分片参数、梯度和优化器状态来减少内存占用,使得单个GPU能够处理更大的模型。虽然 ZeRO-3 也适用于单卡训练,但由于其额外的复杂性(如激活和远程参数的分片),ZeRO-2 可能已经足够满足单卡训练的需求,并且实现起来更为简单。
  • 多卡训练:在多卡训练时,内存限制不再那么严格,因为多个GPU提供了更多的内存资源。ZeRO-3 可以通过分片激活和远程参数来进一步提高内存效率和训练速度。多卡训练可以充分利用 ZeRO-3 的优势,因为它可以分散计算和存储负载,同时减少GPU之间的通信开销。 总之,选择 ZeRO-2 还是 ZeRO-3 取决于训练配置(如GPU数量)和模型大小。ZeRO-2 适用于单卡或内存受限的多卡训练,而 ZeRO-3 更适合具有足够GPU资源的多卡训练,以实现更高的训练效率。