В четвёртой главе перевода руководства по масштабированию LLM рассматриваются четыре основных подхода к распределённой тренировке трансформеров. Автор, инженер, работающий с большими моделями, объясняет, как эффективно использовать несколько ускорителей, когда модель не помещается в память одного чипа. Основная цель — добиться, чтобы производительность системы росла пропорционально числу ускорителей, но на практике этому мешают накладные расходы на синхронизацию и передачу данных.

Первый и самый простой метод — параллелизм данных (Data Parallelism). Он заключается в том, что батч данных разбивается на части и распределяется по ускорителям, каждый из которых хранит полную копию модели. После прямого и обратного проходов выполняется операция AllReduce для усреднения градиентов и обновления весов. Этот подход эффективен, когда модель целиком помещается в память ускорителя, и масштабируется почти линейно. Однако для тренировки современных LLM, например модели с 3 миллиардами параметров, требуется не менее 30–60 ГБ памяти, что делает параллелизм данных неприменимым для больших моделей.

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

Третий метод — тензорный параллелизм (Tensor Parallelism). Он разбивает матрицы весов слоя по нескольким ускорителям, так что каждый ускоритель хранит часть матрицы. Это позволяет уменьшить требования к памяти на одно устройство, но требует частых операций AllGather и ReduceScatter для обмена данными между ускорителями. Тензорный параллелизм эффективен внутри одного узла, где шина данных быстрая, но его сложно масштабировать на несколько узлов из-за задержек.

Четвёртый метод — конвейерный параллелизм (Pipeline Parallelism). Он распределяет слои модели по разным ускорителям: каждый ускоритель обрабатывает только часть слоёв. Это снижает требования к памяти, но приводит к простоям, когда один ускоритель ждёт данные от другого. Для смягчения этой проблемы используются микробатчи и техника pipeline bubbles, но полностью избежать простоев не удаётся.

На практике часто применяют комбинации этих методов. Например, 3D-параллелизм сочетает тензорный, конвейерный и параллелизм данных, что позволяет балансировать между памятью и пропускной способностью. Выбор конкретной стратегии зависит от размера модели, доступного оборудования и требований к скорости тренировки. Автор подчёркивает, что важно понимать, когда остановиться: с ростом числа ускорителей накладные расходы растут, и дальнейшее масштабирование становится невыгодным.