Вычислительная инфраструктура

Distributed Training

Распределённое обучение

новинкаНовое или быстро растущее направление

Направления: Инженерия ИИ · Распределённый ML

Как разложить обучение на несколько : копиями модели по данным, шардами состояния или разрезанием самой модели.

Ключевые тезисы

  • Data Parallel: на каждой карте полная копия модели и свой , усредняются AllReduce после каждого шага.
  • FSDP и ZeRO шардируют веса, и состояния — модель перестаёт помещаться в одну карту, и это нормально.
  • Tensor и pipeline parallelism режут саму сеть; их включают, только когда шардирования уже не хватает.

Какую задачу решает

Одна перестаёт справляться по двум разным причинам, и лечатся они по-разному. Первая: данных много, эпоха идёт неделю — модель помещается в память, не хватает скорости. Вторая: модель просто не влезает в память карты вместе с и состояниями .

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

Прикидка памяти для 7B

Модель на 7 млрд параметров в : веса bf16 — 14 ГБ, bf16 — ещё 14 ГБ, состояния в fp32 (два плюс мастер-копия весов) — около 84 ГБ. Итого порядка 112 ГБ до единой , тогда как в карте 80 ГБ. Вывод прямой: обычный DDP здесь неприменим, нужен FSDP или ZeRO-3, шардирующий все три составляющие между картами.

Подробный разбор

2 подтемы — объяснения, формулы, примеры и интерактивные графики.

СтратегияЧто на каждой картеКогда применяют
Data Parallel (DP/DDP)полная копия модели, свой модель помещается в память одной карты
ZeRO / FSDPшард весов, и состояний модель не помещается, но слой — да
Tensor parallelчасть каждой весовочень широкие слои, быстрый интерконнект
Pipeline parallelнесколько слоёв целикомочень глубокие модели, узкая сеть между узлами

Data Parallel — база: каждый процесс считает прямой и обратный проход на своём мини-батче, после чего усредняются операцией AllReduce, и все копии модели снова совпадают. Эффективный равен батчу на карту, умноженному на число карт, поэтому обычно масштабируют вместе с ним.

# DDP: один процесс на карту — быстрее, чем старый DataParallel в один процесс
torchrun --nproc_per_node=8 train.py

# внутри train.py
dist.init_process_group("nccl")
model = DistributedDataParallel(model.to(rank), device_ids=[rank])
sampler = DistributedSampler(dataset)   # каждому процессу свой кусок данных
На практике

Старый torch.nn.DataParallel работает в одном процессе с несколькими потоками и упирается в GIL и в мастер-карту. В новом коде используют DDP, даже если карты стоят в одном узле.

  • Веса — N параметров в рабочей точности.
  • Градиенты — ещё столько же.
  • Состояния оптимизатора — у два , то есть вдвое больше весов.
  • Активации — зависят от и длины последовательности; на длинном контексте именно они и переполняют память.

Отсюда правило прикидки: обучение модели в с требует примерно 16 байт на параметр без учёта активаций. Для 7 млрд параметров это около 112 ГБ — то есть одной карты не хватит, и нужен FSDP или ZeRO.

Где применяется

  • Сокращение времени экспериментаВосемь карт вместо одной превращают неделю обучения в день — цикл становится рабочим.
  • Большие моделиЯзыковые и не помещаются в одну карту в принципе: без шардирования обучение невозможно.
  • Большой Контрастное обучение и self-supervised методы требуют батчей в тысячи объектов.
  • под задачуДаже 7B-модели на своих данных упирается в память одной карты.

Плюсы, минусы и альтернативы

Плюсы

  • Ускорение близко к линейному, пока сеть не стала узким местом.
  • Код меняется мало: DDP и FSDP оборачивают модель, обучение остаётся прежним.
  • Шардирование снимает потолок размера модели, а не только ускоряет обучение.

Минусы

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

Брать, если

  • Обучение на одной карте занимает недопустимо много времени, а данные и код уже оптимизированы.
  • Модель со всеми состояниями не помещается в память карты.

Не брать, если

  • Узкое место — загрузчик данных или предобработка: добавление карт ничего не даст.
  • Модель небольшая, а карт мало: накладные расходы на обмен съедят выигрыш.

Чем заменяют

Тема также относится к главам:Глубокое обучениеОбучение

Видеолекции

Тайм-кода именно на эту тему в записях нет. Но глава «Вычислительная инфраструктура» разобрана в курсах целиком — с той оговоркой, что место в записи придётся искать самому.

Связанные темы

Обучение на GPU

GPU Architecture85%

Архитектура GPU · Вычислительная инфраструктура

Тысячи простых ядер, сгруппированных в мультипроцессоры, и иерархия памяти, в которую упирается почти любое ускорение.

AI Accelerators85%

Ускорители: GPU, TPU, NPU · Вычислительная инфраструктура

Чем специализированный чип отличается от универсальной видеокарты и когда эта разница окупается.

GPU in PyTorch85%

GPU в PyTorch · Вычислительная инфраструктура

Как проверить доступность ускорителя, разложить тензоры по устройствам и понять, куда ушла видеопамять.

Collective Operations85%

Коллективные операции · Вычислительная инфраструктура

AllReduce, Broadcast, AllGather — примитивы, которыми процессы обучения обмениваются тензорами.

Cluster Networking85%

Сеть кластера · Вычислительная инфраструктура

Топология соединений и скорость обмена, которые определяют, доедет ли обучение до линейного ускорения.

Training Throughput85%

Ускорение обучения · Вычислительная инфраструктура

Что делать, когда число GPU фиксировано: снизить точность, накопить градиент, пересчитать активации, разгрузить загрузчик данных.

Mixed Precision85%

Смешанная точность · Оптимизация обучения

Обучение в fp16 или bf16 при накоплении в fp32: двукратная экономия памяти и заметное ускорение.

Batch size85%

Размер батча · Оптимизация обучения

Число объектов на одно обновление весов: влияет на скорость, память и качество обобщения.

Кому эта тема нужна

Профильная компетенция для роли: MLOps-инженер.

Усиливает профиль: Data Engineer, Исследователь.

Спрашивают на собеседовании: ArenadataML на платформе данных, YADROИнфраструктура обучения, Cloud.ruПлатформа обучения.

Тема в работе целиком

Разбор архитектуры, где эта тема — один из кирпичей: требования, развилки, цифры и режимы отказа.

Следующий шагТема в работе: Обучение, когда данные не влезают в узелСквозной разбор архитектуры, где эта тема — один из кирпичей: требования, бюджет, развилки и режимы отказа.Перейти →

Глава «Вычислительная инфраструктура» последний раз правилась . Нашли ошибку — напишите.