torch.cuda.amp(推荐)适合 PyTorch ≥ 1.6
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
for x, y in dataloader:
x, y = x.cuda(), y.cuda()
optimizer.zero_grad()
with autocast(dtype=torch.float16): # 或 torch.bfloat16
loss = model(x, y)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()✅ 关键配置点:
autocast:自动选层用 FP16GradScaler:防止 FP16 梯度下溢accelerate config
accelerate launch train.py配置里选:
fp16 / bf16{
"fp16": {
"enabled": "auto",
"loss_scale": 0,
"loss_scale_window": 1000
}
}或 BF16:
{
"bf16": { "enabled": "auto" }
}training_args = TrainingArguments(
per_device_train_batch_size=16,
fp16=True, # 或 bf16=True
...
)--fp16
--bf16from tensorflow.keras.mixed_precision import set_global_policy
set_global_policy('mixed_float16')⚠️ 注意:
float32| 硬件 | 推荐 |
|---|---|
| V100 | FP16 |
| A100 / H100 | BF16 |
| 3090 / 4090 | FP16 / BF16 |
GradScaler(FP16)如果你愿意,可以告诉我:
我可以给你一份完整可直接跑的配置。