混合精度通常使用:
关键问题:
torch.cuda.amp(最常用)from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
optimizer.zero_grad()
for x, y in dataloader:
optimizer.zero_grad()
with autocast():
output = model(x)
loss = criterion(output, y)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()✅ 特点:
Trainer(
precision=16,
accelerator="gpu",
devices=1
)✅ 自动处理:
tf.config.optimizer.set_experimental_options(
{"auto_mixed_precision": True}
)
policy = tf.keras.mixed_precision.Policy("mixed_float16")
tf.keras.mixed_precision.set_global_policy(policy)⚠️ 注意:
float32{
"fp16": {
"enabled": true,
"loss_scale": 0,
"loss_scale_window": 1000
}
}或:
{
"bf16": {
"enabled": true
}
}✅ 建议:
| GPU | 建议 |
|---|---|
| V100 | FP16 |
| T4 | FP16 |
| A100 | BF16 |
| H100 | BF16 |
print(torch.cuda.amp.is_autocast_available())出现 NaN:
PyTorch 用torch.cuda.amp,大模型用 DeepSpeed/BF16,A100 以上优先 BF16,V100 用 FP16 + loss scaling。
如果你愿意,可以告诉我:
我可以给你精确可复制的配置代码。