混合精度训练方法是啥

GPU
小华
2026-10-04

混合精度训练(Mixed Precision Training)是一种在深度学习训练过程中,同时使用不同数值精度(如 FP16、FP32、BF16 等)来加速训练、减少显存占用,同时尽量保持模型精度的方法。

一、为什么要用混合精度

  • FP32(单精度):稳定,但占用显存大、计算慢
  • FP16(半精度):速度快、显存省,但容易溢出/舍入误差
  • BF16:动态范围同 FP32,比 FP16 更稳定

混合精度 = 该用低精度就用低精度,关键地方保留高精度

二、核心思想

  1. 用 FP16 / BF16 做前向和反向计算(快、省显存)
  2. 用 FP32 保存模型权重和优化器状态(保证数值稳定)
  3. 通过一些技巧避免低精度问题

三、典型训练流程(以 FP16 为例)

  1. 权重副本(Master Weight)
  • 模型有 FP16 权重(用于计算)
  • 同时保留 FP32 权重(用于更新)
  1. 前向传播
  • 输入、激活用 FP16
  • 得到 loss(可能用 FP32 防溢出)
  1. 反向传播
  • 梯度用 FP16 计算
  1. 梯度处理
  • 梯度可能乘以 Loss Scaling(放大 loss,防梯度下溢)
  1. 参数更新
  • 梯度转回 FP32
  • 更新 FP32 权重
  • 再转回 FP16 用于下一步

四、关键技术点

1. Loss Scaling(损失缩放)

  • FP16 最小数太小,小梯度变 0
  • 训练时:
loss *= scale
反向后 gradient /= scale
  • 动态或静态 scaling

2. Master Weights

  • 优化器内部用 FP32
  • 避免更新误差累积

3. 数值敏感层用 FP32

  • softmax、loss、BatchNorm 统计量
  • 某些 softmax / exp 操作

五、常见精度组合

类型计算权重特点
FP16 + FP32FP16FP32常见,需 loss scaling
BF16 + FP32BF16FP32更稳定,几乎不用 scaling
TF32(GPU)TF32FP32NVIDIA 自动

六、框架支持

  • PyTorch
  • torch.cuda.amp(Automatic Mixed Precision)
  • TensorFlow
  • tf.keras.mixed_precision
  • MindSpore / PaddlePaddle
  • 都有 AMP 支持

七、优点总结

✅ 训练速度提升(1.5–3×)
✅ 显存占用降低(可达一半)
✅ 大模型可训

八、缺点 / 注意

⚠ 数值不稳定(尤其 FP16)
⚠ 需要调 loss scale

⚠ 某些算子不支持低精度

如果你愿意,我也可以:

  • 用 PyTorch 代码示例讲
  • 对比 FP16 vs BF16
  • 结合 大模型训练(LLM)讲混合精度
亿速云提供售前/售后服务

售前业务咨询

售后技术保障

400-100-2938

7*24小时售后电话

官方微信小程序