Mixed Precision
Mixed Precision Training
Mixed Precision — техника обучения нейросетей с использованием нескольких форматов данных (FP32 + FP16/BF16) одновременно, ускоряющая обучение в 2-3× при минимальной потере точности.
Что такое Mixed Precision
Mixed Precision Training — техника, при которой основные вычисления (forward + backward) выполняются в пониженной точности (FP16 или BF16), а критические операции (обновление весов, loss) — в FP32.
Форматы данных
| Формат | Бит | Диапазон | Применение |
|---|---|---|---|
| FP32 | 32 | ±3.4×10³⁸ | Master weights |
| FP16 | 16 | ±65504 | Forward/backward |
| BF16 | 16 | ±3.4×10³⁸ | Forward/backward (лучше для ML) |
| TF32 | 19 | ±3.4×10³⁸ | Ampere+ автоматически |
| FP8 | 8 | E4M3: ±448 | Hopper+ инференс |
BF16 vs FP16
BF16 (Brain Float 16) имеет тот же диапазон, что FP32 (8 бит экспоненты), но меньшую точность. Не требует loss scaling и стабильнее при обучении.
FP16 имеет узкий диапазон — требуется loss scaling для предотвращения underflow градиентов.
Использование в PyTorch
# Automatic Mixed Precision (AMP)
scaler = torch.amp.GradScaler()
for batch in dataloader:
optimizer.zero_grad()
with torch.autocast(device_type="cuda", dtype=torch.bfloat16):
output = model(batch)
loss = criterion(output)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
Экономия ресурсов
- VRAM: 2× меньше для активаций
- Скорость: 2-3× быстрее на Tensor Cores
- Качество: практически без потерь при BF16
Рекомендация: всегда используйте BF16 на GPU Ampere+ (A100, H100). FP16 с loss scaling — только на старых GPU (V100).