概念界定
优化中的数值稳定性关注低精度训练、梯度缩放、溢出检测和参数更新中的数值问题。它是混合精度大模型训练能否稳定运行的重要基础。
背景与问题
大模型训练为了节省显存和提升吞吐,常使用 fp16 或 bf16。低精度会带来溢出、下溢和舍入误差。优化过程中的梯度尤其容易受到这些问题影响。
定义与记号
Loss scaling 常用于 fp16 训练:
scaled_loss = loss · scale先对放大的 loss 反向传播,再在更新前把梯度缩放回来:
grad = scaled_grad / scale这样可以减少梯度下溢风险。
直观解释
如果梯度太小,fp16 可能表示不出来,直接变成 0。loss scaling 就像先把信号放大,计算完梯度后再缩回去。
基本性质
- bf16 范围比 fp16 更接近 fp32,通常更稳定。
- fp16 常需要 loss scaling。
- 梯度溢出时通常跳过当前 step 或降低 scale。
- 某些累加和优化器状态仍常使用 fp32。
常见误解
- 误解:低精度训练只影响速度和显存。
- 正确理解:低精度也会影响稳定性和误差累积。
- 误解:loss scaling 改变了训练目标。
- 正确理解:正确缩放回梯度后,目标不变,只是改善数值表示。