https://github.com/hiyouga/LLaMA-Factory/blob/main/examples/deepspeed/ds_z3_config.json
结论:做大模型的无脑冲ZeRo-3就完事了
在 LLaMA Factory 或其他大模型训练环境中,ZeRO(Zero Redundancy Optimizer)是一种分布式训练优化技术,主要用于高效地利用多卡资源来训练大模型。它有三个主要阶段,分别是 ZeRO-0、ZeRO-2 和 ZeRO-3,代表不同的优化程度和资源分布策略。
以下是详细解释:
1. ZeRO-0(Optimizer State Partitioning)
- 功能:将优化器状态(如梯度、动量、二阶动量等)按 GPU 划分,每张 GPU 只存储一部分优化器状态。
- 特性:
- 每个 GPU 存储自己的模型参数副本(模型参数未分布)。
- 优化器状态被分布到多 GPU 上,减少单张 GPU 的显存占用。
- 显存占用优化:中等。
适用场景:
当模型规模适中,但优化器状态较大,且显存压力主要来自优化器时。
2. ZeRO-2(Gradient Partitioning + ZeRO-0)
- 功能:在 ZeRO-0 的基础上,进一步将**梯度(gradients)**分布到多张 GPU 上。
- 特性:
- 优化器状态和梯度都被分布存储,减少单张 GPU 的显存需求。
- 每张 GPU 仍然保存完整的模型参数。
- 显存占用优化:显著减少。
适用场景:
适合较大规模的模型,尤其是梯度计算对显存占用较高时。
3. ZeRO-3(Parameter Partitioning + ZeRO-2)
- 功能:在 ZeRO-2 的基础上,进一步将**模型参数(model parameters)**本身分布到多 GPU 上。
- 特性:
- 优化器状态、梯度和模型参数都分布到多 GPU 上,显存需求最小化。
- 没有一张 GPU 需要完整存储模型参数。
- 显存占用优化:极大减少,可支持超大规模模型。
- 通信开销增加:由于参数需要在多个 GPU 间动态传输,通信成本较高。
适用场景:
适合超大规模模型训练(如 GPT-3、LLaMA),显存需求超过单卡或单节点的情况。
对比总结
特性 | ZeRO-0 | ZeRO-2 | ZeRO-3 |
---|---|---|---|
优化器状态分布 | ✅ | ✅ | ✅ |
梯度分布 | ❌ | ✅ | ✅ |
模型参数分布 | ❌ | ❌ | ✅ |
显存优化程度 | 中等 | 高 | 极高 |
通信开销 | 低 | 中等 | 高 |
适合模型规模 | 中等 | 大 | 超大 |
如何选择 ZeRO 优化级别
- 显存充足:选择 ZeRO-0 或 ZeRO-2,减少通信开销。
- 显存不足,模型超大:选择 ZeRO-3。
- 动态需求:可以从 ZeRO-0 开始逐步尝试更高级别。
此外,使用 ZeRO 时通常需要结合分布式训练框架(如 DeepSpeed 或 HuggingFace Trainer),确保工具链支持。
为什么没有zero1
没有 ZeRO-1 是因为 ZeRO 分布式优化技术的命名直接跳过了这个阶段。其设计目标是解决训练大规模深度学习模型时的显存瓶颈,阶段的划分主要是基于显存优化的渐进策略,而 ZeRO-1 的需求被包含在 ZeRO-2 中。以下是更详细的解释:
1. ZeRO 的阶段划分逻辑
ZeRO 的各阶段是为了逐步减少显存占用,优化逻辑是基于显存的三个主要组成部分:
-
优化器状态(Optimizer States)
如动量(momentum)、二阶动量(second moment),它们在计算梯度更新时被用到。 -
梯度(Gradients)
模型反向传播时计算的梯度信息。 -
模型参数(Model Parameters)
模型的权重和偏置值。
各阶段的作用:
- ZeRO-0:只优化了优化器状态的分布。
- ZeRO-2:进一步优化了梯度的分布。
- ZeRO-3:将模型参数也分布到多 GPU。
由于 ZeRO-2 包含了 ZeRO-1 的功能(梯度优化),没有必要单独定义 ZeRO-1。
2. ZeRO-1 的潜在定义
如果一定要将 ZeRO 分得更细,可以人为地假设:
- ZeRO-1:仅分布梯度,不分布优化器状态和模型参数。
- 这种方式可能会带来一些显存优化,但不如 ZeRO-2 高效。
然而,DeepSpeed 的开发团队选择直接跳过了这个中间阶段,认为 ZeRO-1 的作用被 ZeRO-2 完全覆盖,从而更简洁地定义了优化策略。
3. 为什么直接跳过?
- 避免混淆:直接定义从 ZeRO-0 到 ZeRO-2 和 ZeRO-3 的优化进阶,减少分布式训练策略的复杂性。
- 覆盖需求:实际中,梯度优化的场景通常会伴随优化器状态的优化(即 ZeRO-2)。
- 研发效率:开发人员可能认为实现和推广 ZeRO-2