Оптимизация обучения

Mixed Precision

Смешанная точность

актуальноТекущий рабочий стандарт

Обучение в fp16 или bf16 при накоплении в fp32: двукратная экономия памяти и заметное ускорение.

Ключевые тезисы

  • fp16 требует масштабирования потерь, чтобы малые градиенты не обнулялись; bf16 — нет.
  • Мастер-копия весов и накопление градиентов остаются в fp32.
  • На современных ускорителях bf16 — практический дефолт для обучения больших моделей.
Тема также относится к главам:Глубокое обучениеОбучение

Подробный разбор

2 подтем — раскройте любую, чтобы увидеть объяснение, формулы, примеры и интерактивные графики.

1

fp16 против bf16

Разный компромисс между точностью и диапазоном.

fp16bf16fp32
Бит на мантиссу10723
Диапазон экспонентыузкийкак у fp32полный
Нужен loss scalingданетнет
Где используетсястарые GPUсовременное обучениеэталон

bf16 жертвует точностью мантиссы ради диапазона — и это оказалось правильным выбором для обучения: переполнение опаснее, чем округление.

2

Как включить

И на что смотреть.

scaler = torch.amp.GradScaler()
with torch.autocast(device_type="cuda", dtype=torch.bfloat16):
    loss = model(batch)
scaler.scale(loss).backward()
scaler.unscale_(optimizer)
torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)
scaler.step(optimizer); scaler.update()
  • Экономия памяти около 40–50%, ускорение 1.5–3× на современных ускорителях.
  • Появление NaN обычно означает переполнение в fp16 — переходите на bf16.
  • Нормализации и softmax внутри autocast считаются в fp32 автоматически.

Связанные темы

Стабильность обучения нейросетей