Чтобы ускорить deep learning модель, не надо blindly пробовать трюки из твиттера. Сначала пойми, где узкое место. Вся производительность упирается в три компонента: compute (время на реальные вычисления GPU, FLOPS), memory (перенос тензоров внутри GPU), overhead (всё остальное — Python, диспетчеризация PyTorch, запуск CUDA-ядер).
Если модель загружена большими матричными умножениями (matmul) — ты в compute-bound режиме. Увеличивать FLOPS бесполезно, надо только менять операции или покупать более мощное железо (Tensor Cores у NVIDIA). Если тратишь время на пересылку данных (memory-bound), то добавление FLOPS не поможет — нужно уменьшать memory traffic. Если маленькие тензоры и много времени уходит на Python и фреймворк — overhead-bound.
GPU специализированы: A100 выдаёт 19.5 TFLOPS на обычных операциях и 312 TFLOPS на Tensor Cores. Нематричные операции (LayerNorm, активации) составляют лишь 0.2% всех FLOPS, но занимают много времени из-за memory bandwidth. Простой torch.cos загружает данные из DRAM, делает крошечное вычисление и пишет обратно — почти всё время уходит на memory transfers.
Решение — operator fusion: объединять последовательные операции в один CUDA kernel, чтобы не пересылать данные в глобальную память между ними. x.cos().cos() с fusion выполняется как один kernel, ускоряясь вдвое. Но в eager-mode PyTorch это невозможно — нужны компиляторы: NVFuser, XLA, или ручные ядра на Triton.
Overhead — главный враг. Python делает 32 млн сложений в секунду, а A100 — 312 триллионов. Фреймворк PyTorch добавляет ещё слои dispatch. К счастью, при больших тензорах CPU успевает нагенерировать ядра, пока GPU считает, и overhead скрыт. Проблема возникает с маленькими тензорами: GPU простаивает. Как проверить? Увеличиваешь batch size — если время растёт нелинейно, ты overhead-bound. Помогает трассировка (jit.trace, FX, jax.jit) или CUDA Graphs, но они жертвуют гибкостью.
Итог: если compute-bound — используй Tensor Cores или дай Nvidia больше денег. Memory-bound — fusion. Overhead-bound — tracing, fusion, не используй Python. Понимание основ всегда полезнее слепых экспериментов.