混合精度训练在计算密集环节(矩阵乘、卷积)使用 FP16/BF16 半精度,同时保留一份 FP32 主权重用于优化器更新。FP16 显存减半、带宽需求减半,还能利用 GPU Tensor Core 的半精度算力,吞吐可提升 2-3 倍。

不损失精度的三个关键机制:一,FP32 master weights,更新累积在高精度副本上,避免小梯度在半精度下被舍入为零;二,损失缩放(loss scaling),把 loss 乘以大系数 S 使梯度进入 FP16 可表示范围,反向后再除回,FP16 动态范围小(约 6e-5 到 65504)容易下溢,缩放必不可少;三,对数值敏感的运算(softmax、归一化、损失归约)保持 FP32。

现代实践更多用 BF16:动态范围与 FP32 相同(8 位指数),基本无需 loss scaling,是大模型训练默认。易错点:以为混合精度只是简单把权重转 FP16 存储。追问方向:FP8 训练(如 DeepSeek-V3)的难点?显存中参数、梯度、优化器状态各占多少?