numerical stability问题?混合精度训练的numerical stability问题?
FP16/BF16 范围与精度低于 FP32:溢出(大数变 inf)、下溢(小数变 0)、舍入误差累积。在 loss scaling、梯度、某些层 上可能表现为 loss NaN、梯度爆炸/消失、训练不稳。
Loss scaling:梯度在 FP16 下容易下溢;用 动态或静态 scale 放大梯度再做 backward,还原后再 unscale 更新;可避免梯度变 0。敏感层:LayerNorm、Softmax、loss 等保持 FP32(或 BF16)计算,仅部分 linear/matmul 用 FP16,即 混合精度 而非全 FP16。BF16:指数域与 FP32 同,范围大,不易溢出,可减少 scaling 与 cast;精度略逊 FP16,通常训练更稳。检查:训练中监控 梯度 norm、loss;若出现 NaN 可先关混合精度做 baseline,再逐层或逐 op 放宽精度定位。
torch.amp.autocast(..., enabled=False) 包一层保持 FP32。数值稳定性 与 速度 需权衡;BF16 在 A100 等上推荐为首选。| 返回模块 | 返回总览 |