Почему одну модель тренируют тысячи ускорителей

Современные языковые модели не помещаются в память одного ускорителя: для тренировки трёхмиллиардной модели нужно не меньше 30–60 ГБ видеопамяти, а в процессе обучения требования к памяти вырастают в 10–20 раз. Поэтому обучение распределяют между десятками и сотнями чипов. Главная задача такого масштабирования — чтобы производительность росла пропорционально числу ускорителей, а не упиралась в накладные расходы на синхронизацию. В свежей главе о масштабировании LLM разобраны четыре стратегии параллелизма.

Параллелизм данных — простой старт

Идея предельно проста: батч режется на части и раздаётся ускорителям, каждый хранит полную копию модели и считает свой кусок градиентов. В конце операция AllReduce собирает локальные градиенты в глобальные и обновляет веса на всех устройствах. Применять его стоит всегда, когда модель целиком влезает в ускоритель: масштабируется почти линейно, а синхронизацию можно делать асинхронно. Ограничение одно — память: тренируемый трансформер занимает на порядок больше места, чем финальные веса.

FSDP и ZeRO: без дублирования

Fully-Sharded Data Parallelism, известный как ZeRO-шардинг, устраняет главный недостаток обычного параллелизма данных — избыточность. Вместо полных копий модели веса, градиенты и состояния оптимизатора распределяются по ускорителям: в ZeRO-1 шардируются только состояния оптимизатора, в ZeRO-2 добавляются градиенты, а в ZeRO-3 — и сами веса. Перед умножением матриц нужные веса собираются через AllGather, после обновления — снова раскидываются. Каждое устройство хранит только то, что нужно его шарду — поэтому подход считается основным для моделей среднего размера.

Тензорный параллелизм и конвейеры

Тензорный параллелизм (Megatron-шардинг) меняет оси разбиения матриц и заставляет ускорители обмениваться не весами, а активациями. Эффективен он, когда активаций меньше, чем весов, — чего добиваются комбинацией с FSDP: связка FSDP+TP выходит вычислительно-ограниченной уже при батче примерно в сто токенов. Конвейерный параллелизм, напротив, режет модель по слоям и размещает их на разных GPU. Он пересылает минимум данных и хорошо работает на медленных шинах, но страдает от «конвейерного пузыря» — простоя устройств в ожидании конца цепочки. Лечат его микробатчингом, как в DeepSeek V3.

Выбор стратегии — компромисс между памятью, скоростью шины и простотой реализации. Чаще используют комбинацию методов — так тренировка гигантской модели становится предсказуемым процессом.