Автокаст считает часть ops в float16/bfloat16, loss scaling (GradScaler для fp16) сохраняет мелкие градиенты; master-веса часто держат в fp32.
Разбор
torch.autocast(device_type='cuda', dtype=...).
- bf16 на новых GPU часто без scaler.
- Не все ops безопасны в half — autocast решает.
- Численные NaN — смотреть scale и overflow.
Пример
scaler = GradScaler()
with autocast('cuda'):
loss = criterion(model(x), y)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
Итог
AMP ускоряет и экономит память ценой аккуратной численной схемы.