GPU Perf Playbook
phtphtpht/gpu-perf-playbookПрактическое руководство и Claude-скилл для отладки медленного обучения, OOM-ошибок, плохого масштабирования на несколько GPU и узких мест LLM-инференса. Включает чеклисты, деревья решений и профилировочные команды.
Установка
git clone https://github.com/phtphtpht/gpu-perf-playbook.gitREADME
GPU Perf Playbook для PyTorch и LLM-нагрузок
Исправляй медленное обучение, низкую утилизацию GPU, OOM, плохое масштабирование на несколько GPU и узкие места LLM-инференса.
English | 中文

Этот репозиторий предназначен для инженеров, которые уже знают, что их модель должна работать быстрее, но нуждаются в практическом пути к поиску и устранению узкого места.
Используй двумя способами:
- Читай плейбук, когда нужен приоритизированный чеклист оптимизации GPU.
- Установи включённый Claude-скилл, когда хочешь, чтобы Claude автоматически рассуждал на основе того же плейбука.
Если это сэкономит тебе время на отладку — поставь звезду репозиторию, чтобы больше людей его нашли.
Что это помогает исправить
- Циклы обучения, которые медленны несмотря на топовые GPU
- GPU, ожидающие CPU или
DataLoader - OOM из-за активаций, состояния оптимизатора или вариативности форм тензоров
- Многогпу-задачи с плохой эффективностью масштабирования
- LLM-инференс-стеки с плохой задержкой, пропускной способностью или стратегией KV-кэша
- Код-ревью, где баги производительности скрываются за «корректным» кодом
Философия: сначала измерь, классифицируй узкое место, примени наименьшее значимое исправление, затем проверь результат.
Что входит в репозиторий
| Материал | Зачем нужен |
|---|---|
| Оптимизация обучения | P0/P1-дефолты для PyTorch-обучения: AMP/bf16, torch.compile, пайплайны данных, память, чекпоинтинг |
| Оптимизация инференса | TTFT/ITL, KV-кэш, непрерывная батчинг, квантизация, компромиссы при сервинге |
| Распределённое обучение | DDP, FSDP/ZeRO, перекрытие коммуникаций, топологическая осведомлённость, тюнинг NCCL |
| Ядра и низкий уровень | Triton, FlashAttention, фьюжн, доступ к памяти, roofline-анализ |
| Профилирование и инструменты | Nsight Systems, Nsight Compute, PyTorch Profiler, MFU, диагностика |
| Антипаттерны и чеклист | 12 распространённых ошибок, промпты для ревью PR, pre-commit проверки |
| Claude-скилл | Загружаемый пакет скилла для Claude.ai |
Установка в Claude за 60 секунд
- Скачай
skill/best-gpu-perf.skill. - Открой
Claude.ai -> Settings -> Skills. - Нажми
Add Skillи загрузи файл.
Затем попробуй такие промпты:
My training is slow on A100. Give me the highest-ROI things to check first.Review this PyTorch training loop for GPU performance issues.I'm hitting OOM on a 7B model. Walk me through the memory budget and likely fixes.My multi-GPU scaling falls off after 4 GPUs. What should I profile?Help me optimize LLM inference latency and throughput for a vLLM-style stack.
Если хочешь кастомизировать скилл, исходник находится в skill/SKILL.md. Пересобери упакованный артефакт командой:
./scripts/build_skill.sh
С чего начать
| Если твоя проблема... | Читай сначала |
|---|---|
| Медленное обучение | docs/training.md |
| Медленный инференс / низкая пропускная способность | docs/inference.md |
| Плохое масштабирование DDP/FSDP | docs/distributed.md |
| Горячие точки ядер / вопросы фьюжна | docs/kernel.md |
| Нужны команды профилировщика и помощь с интерпретацией | docs/profiling.md |
| Нужен быстрый чеклист для ревью | docs/checklist.md |
Для кого это
- PyTorch-инженеры, которым нужно ускорить обучение без переписывания всего с нуля
- LLM-инфра и сервинг-инженеры, отлаживающие задержку, пропускную способность или поведение KV-кэша
- Исследователи, которым нужен дефолтный чеклист оптимизации перед написанием кастомных ядер
- Ревьюеры, которые хотят отлавливать регрессии производительности в PR
Структура репозитория
docs/: тематические справочные руководстваskill/SKILL.md: исходник Claude-скиллаskill/best-gpu-perf.skill: упакованный артефакт скилла для загрузкиscripts/build_skill.sh: пересобирает упакованный скилл из исходников репозитория
⚡ Быстрый старт: чеклист P0
Прежде чем делать что-либо ещё, убедись, что в твоём коде есть всё перечисленное. Это низкорисковые, высокодоходные практики, применимые почти к каждому PyTorch-проекту:
import torch, os
from torch.utils.data import DataLoader
# 1. Enable TF32 (free speed on Ampere+)
torch.set_float32_matmul_precision("high")
# 2. DataLoader: don't let GPU wait for data
loader = DataLoader(
dataset,
batch_size=batch_size,
num_workers=4, # NOT 0
pin_memory=True, # Faster CPU→GPU transfer
persistent_workers=True, # Don't re-fork every epoch
)
# 3. Compile the model
model = torch.compile(model.cuda())
# 4. Fused optimizer
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4, fused=True)
# 5. Training loop with AMP + best practices
for batch in loader:
batch = {k: v.cuda(non_blocking=True) for k, v in batch.items()}
optimizer.zero_grad(set_to_none=True) # Not zero_grad()
with torch.autocast("cuda", dtype=torch.bfloat16): # 6. Mixed precision
loss = model(**batch)
loss.backward()
optimizer.step()
# ❌ Don't: print(loss), loss.item() every step, loss.cpu()Также проверь:
- Скрытые размерности / размер словаря кратны 64
- Attention использует
F.scaled_dot_product_attention, а не ручное QK^TV - Eval использует
@torch.inference_mode() - Нет
.item()/.cpu()/print(tensor)в горячем пути обучения
👉 Полный чеклист с 12 антипаттернами и шаблоном PR → docs/checklist.md
🧭 Деревья решений
Моё обучение медленное
ГПУ утилизация < 50%?
├─ CPU на 100%? → ...
(полное дерево решений доступно в репозитории)