一句话定义
训练效率常用的两种手段:混合精度用低精度做前向/反向、FP32 保存主权重;梯度检查点只存少量激活,反向时重算,用计算换显存。
为什么需要它
大模型训练同时受算力、显存带宽和激活显存限制。混合精度减少数据搬运和矩阵乘成本;梯度检查点减少保存的中间激活,让更长序列或更大 batch 成为可能。
怎么工作
混合精度
- 前向/反向用 FP16 或 BF16,矩阵乘更快、显存更省。
- 主权重和优化器状态保留 FP32,避免更新被低精度吞掉。
- 用 loss scaling 防止 FP16 梯度下溢;BF16 范围更大,通常更稳。
梯度检查点
- 前向只保存少量检查点,不保存全部中间激活。
- 反向传播时从检查点重算需要的激活。
- 显存下降,训练时间增加;适合长序列、大 batch、显存受限。
关键取舍
- 混合精度依赖硬件和算子支持;不是所有层都能安全低精度。
- BF16 比 FP16 范围大、通常更稳,但硬件支持要看卡。
- 梯度检查点用计算换显存;重算比例越高,时间代价越大。
- 两者可以叠加,但要先确认瓶颈是带宽、算力还是显存。
- 混合精度通常结合 loss scaling 和 FP32 主权重;检查点适合长序列、大 batch。先测瓶颈再调。
常见误区
- 混合精度一定更快:没有低精度算子或数值不稳定时可能更慢。
- 梯度检查点没有成本:它增加反向计算,训练时间会上升。
- 梯度检查点等于梯度累积:前者省激活显存,后者省 batch 显存,解决不同问题。
用在哪里
- 长上下文、大 batch、显存不足的训练。
- 混合精度几乎是现代 LLM 训练的默认配置。
- 先用 profiler 找瓶颈,再决定省显存还是省带宽。