预训练工程模块四 · 训练显存计算计算约 16 分钟
训练显存计算:参数、梯度、优化器态、激活
为什么训 1B 模型光静态就要约 16GB
学完这节你能:
- 列出训练显存的四大来源
- 算出每参数的字节数
- 理解激活为什么随 batch×seq 增长
推理只要放参数;训练还要放梯度、优化器状态、激活。用混合精度 + Adam 训练时,前三项有一个好记的账。
| 来源 | 字节/参数(混合精度+Adam) |
|---|---|
| FP16 参数 | 2 |
| FP16 梯度 | 2 |
| Adam:FP32 主权重 | 4 |
| Adam:一阶动量 m | 4 |
| Adam:二阶动量 v | 4 |
| 合计(不含激活) | ≈ 16 字节/参数 |
▪ 手算
1B 参数:静态显存 ≈ 1e9 × 16 B = 16 GB(还没算激活!)
激活 ≈ 正比于 batch × 序列长度 × 层数 × d,可用梯度检查点大幅压缩
这就是为什么单卡训不动大模型,必须上 ZeRO/张量并行把这些切开。
🔑 记「16 字节/参数」这条线:参数 2 + 梯度 2 + Adam 12 = 16。1B→16GB、7B→112GB,远超单卡,逼出并行与 ZeRO。
自测混合精度+Adam 训练,约需多少字节/参数(不含激活)?
自测变式(换数字再算):混合精度+Adam 训练一个 3B 参数模型,静态显存(不含激活)约为:
// 带走一句话
训练显存四来源:参数+梯度+优化器态(Adam 占大头)+激活;混合精度+Adam≈16 字节/参数,1B≈16GB。
独立练习
做到这些,才算完成本节
- 分别估算 FP32+Adam 与混合精度+Adam 的参数、梯度和优化器状态显存。
- 运行 AMP 示例并记录 autocast dtype、GradScaler scale 变化以及溢出时是否跳步。
- 替换例题中的数值,从头独立算一遍。
- 用数量级、边界值或反向计算检查结果是否合理。
学习记录
记录本节阅读进度
建议先独立回答自测。读完记录不等于已经掌握。