混合精度训练(Mixed Precision Training)是指在训练深度学习模型时,同时使用 FP16(半精度)和 FP32(单精度),以加快训练速度、减少显存占用,同时尽量保持模型精度。
关键三步:
torch.cuda.amp(最常用)from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
optimizer.zero_grad()
with autocast():
output = model(input)
loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()✅ 自动处理:
torch.nn.apex(旧方案)from apex import amp
model, optimizer = amp.initialize(
model, optimizer, opt_level="O1"
)⚠️ 已不推荐,优先用 ampfrom tensorflow.keras.mixed_precision import set_global_policy
set_global_policy('mixed_float16')TF 会自动:
training_args = TrainingArguments(
fp16=True
)| 参数 | 建议 |
|---|---|
| loss_scale | 动态(默认) |
| batch size | 可增大 2–4 倍 |
| learning rate | 通常不变 |
| optimizer | Adam / AdamW |
✅ 检查:
✅ 解决:
clip_grad_norm_✅ 可能原因:
✅ 解决:
O1 而非 O3✅ 非常适合:
❌ 不适合:
混合精度 = FP16 加速 + FP32 保稳 + Loss Scaling
如果你愿意,我可以:
直接告诉我你的使用场景即可。