Обучение моделей
20 просмотров
MFU
Model FLOPs Utilization
MFU (Model FLOPs Utilization) — метрика эффективности использования GPU при обучении, показывающая отношение теоретических FLOPS модели к пиковым FLOPS ускорителя. MFU 50%+ считается хорошим результатом.
Что такое MFU
MFU (Model FLOPs Utilization) — ключевая метрика производительности при обучении LLM. Показывает, какую долю от теоретической пиковой производительности GPU вы реально используете.
MFU = Model_FLOPS / Theoretical_Peak_FLOPS
MFU vs HFU
| Метрика | Что считает | Точность |
|---|---|---|
| MFU | Только теоретические FLOPS модели (forward + backward) | Приблизительная |
| HFU | Реальные FLOPS (включая activation recomputation) | Точная |
Если вы используете gradient checkpointing (пересчёт активаций), HFU > MFU, потому что фактически FLOPS больше.
Пример расчёта
# H100 BF16 peak: 989 TFLOPS
# Измеренная скорость обучения: 450 TFLOPS
MFU = 450 / 989 = 0.455 # 45.5%
# Автоматический подсчёт FLOPS (PyTorch)
from torch.utils.flop_counter import FlopCounterMode
flop_counter = FlopCounterMode(mods=model, display=False)
with flop_counter:
model(**input).sum().backward()
total_flops = flop_counter.get_total_flops()
# TFLOPS = total_flops / time_seconds / 1e12
Ориентиры
| MFU | Оценка | Типичная ситуация |
|---|---|---|
| > 55% | Отличный | Хорошо оптимизированный кластер |
| 40-55% | Хороший | Большинство production-обучений |
| 25-40% | Средний | Есть узкие места |
| < 25% | Плохой | Проблемы с сетью, IO или конфигурацией |
Что снижает MFU
- Сеть — медленный All-Reduce (InfiniBand < NDR, плохие кабели)
- Pipeline bubble — простой GPU при Pipeline Parallelism
- DataLoader — GPU ждёт данных от CPU/диска
- Gradient checkpointing — пересчёт активаций (но экономит VRAM)
- Чекпоинты — синхронное сохранение на медленное хранилище
- Communication overhead — TP требует All-Reduce на каждом слое
Как измерить
Большинство фреймворков логируют TFLOPS:
- Megatron-LM: throughput_per_gpu_tflops в логах
- DeepSpeed: FLOPS_per_gpu в логах
- Ручной замер: FLOPS / iteration_time / 1e12