torch.cuda.amp(推荐,PyTorch ≥ 1.6)import torch
from torch.cuda.amp import autocast, GradScaler
model = model.cuda()
optimizer = torch.optim.Adam(model.parameters())
scaler = GradScaler()
for data, target in dataloader:
data, target = data.cuda(), target.cuda()
optimizer.zero_grad()
# 前向使用混合精度
with autocast():
output = model(data)
loss = loss_fn(output, target)
# 反向 + 更新
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()✅ 关键点:
autocast():自动选择 float16 / float32GradScaler:防止 float16 梯度下溢Trainer(
precision=16,
accelerator="gpu",
devices=1
)或:
Trainer(precision="16-mixed")from tensorflow.keras.mixed_precision import set_global_policy
set_global_policy("mixed_float16")然后正常写模型即可。
✅ 注意:
float32tf.keras.optimizers.legacy.Adamtf.keras.mixed_precision.set_global_policy("mixed_float16")
model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation="relu"),
tf.keras.layers.Dense(10, dtype="float32")
])--fp16或:
training_args = TrainingArguments(
fp16=True,
...
)GradScalerfloat32✅ 收益:
⚠️ 风险:
如果你告诉我:
我可以给你更具体的配置示例。