张芷铭的个人博客

DeepSpeed是微软开源的分布式训练优化框架,通过ZeRO技术实现千亿级模型训练,单卡显存占用降至传统方法的1/N。

核心价值

维度说明
显存效率ZeRO分片策略,单卡显存降至1/N
训练加速混合精度+通信优化,GPU利用率提升30%+
扩展性单机多卡到千卡集群,近线性加速

ZeRO技术原理

阶段分片内容显存下降支持规模
ZeRO-1优化器状态约4倍10B+
ZeRO-2梯度+优化器状态约8倍100B+
ZeRO-3参数+梯度+优化器状态1/N1T+

显存公式

  • 传统数据并行:$\Theta(\Psi + K\Psi + L\Psi)$
  • ZeRO-3:$\Theta(\frac{\Psi}{N} + \frac{K\Psi}{N} + \frac{L\Psi}{N})$

扩展显存优化

技术说明
梯度检查点时间换空间,显存降低2-4倍
CPU/NVMe Offloading卸载到CPU/NVMe,V100单卡训练13B模型
混合精度FP16/BF16计算,显存减半

3D并行策略

并行类型说明
数据并行(DP)数据拆分至多GPU
流水线并行(PP)模型按层切分
张量并行(TP)单层参数切片

三者叠加通信效率提升2-7倍。

配置示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "train_batch_size": 32,
  "train_micro_batch_size_per_gpu": 4,
  "gradient_accumulation_steps": 8,
  "fp16": {"enabled": true},
  "zero_optimization": {
    "stage": 3,
    "offload_optimizer": {"device": "cpu"}
  }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import deepspeed

model_engine, optimizer, _, _ = deepspeed.initialize(
    model=model,
    optimizer=optimizer,
    config="ds_config.json"
)

for batch in dataloader:
    loss = model_engine(batch)
    model_engine.backward(loss)
    model_engine.step()

场景推荐配置

场景推荐配置
显存受限(24GB GPU)ZeRO-3 + Offload + FP16
训练速度优先ZeRO-2 + BF16 + 梯度累积
千亿模型训练DeepSpeed + Megatron-LM,3D并行

注意事项

问题解决方案
配置复杂性从ZeRO-1开始逐步升级
检查点兼容性先导出完整权重 model.save_checkpoint()
RTX 40系列设置export NCCL_P2P_DISABLE=1
推理场景纯推理建议用vLLM,吞吐量更优

Comments