概念定义
ZeRO(Zero Redundancy Optimizer)是一种革命性的内存优化技术,通过在数据并行进程间分片存储模型状态(优化器状态、梯度和参数),消除冗余存储,从而大幅降低每个GPU的内存占用。详细解释
传统数据并行训练中,每个GPU都需要存储完整的模型参数、梯度和优化器状态,造成严重的内存冗余。以Adam优化器为例,每个参数需要存储:参数本身(FP16,2字节)、梯度(FP16,2字节)、动量(FP32,4字节)和二阶动量(FP32,4字节),总计12字节——是模型参数大小的6倍。 ZeRO通过将这些状态在多个GPU间分片存储,每个GPU只保存部分状态,需要时通过通信获取其他部分。这种方法在保持数据并行计算效率的同时,将内存占用降低了数个数量级,使得在有限的GPU资源上训练超大规模模型成为可能。工作原理
ZeRO的三个阶段
Stage 1:优化器状态分片(Pos)
Stage 2:梯度分片(Pos+g)
Stage 3:参数分片(Pos+g+p)
内存计算公式
ZeRO-Offload扩展
实际应用
2025年典型配置
- 单GPU微调40B+模型:ZeRO-3 + CPU Offload
- 8×A100训练175B模型:ZeRO-3 + NVMe Offload
- 512GPU训练2T参数模型:ZeRO-3 + 3D并行
DeepSpeed集成示例
性能优化技巧
- 通信重叠:计算与通信并行,隐藏通信延迟
- 梯度累积:减少通信频率
- 参数预取:提前获取下一步需要的参数
- 混合精度:配合BF16/FP8进一步降低内存
扩展性分析
- 线性扩展:内存占用随GPU数量线性降低
- 通信开销:ZeRO-3增加约1.5倍通信量
- 带宽要求:建议使用InfiniBand或高速NVLink
- CPU内存:Offload需要充足的系统内存