Логотип Тераферма Тераферма Регистрация

4 октября 2026 г. · Анатолий Крылов, редактор Тераферма

Обучение на нескольких GPU: DDP, FSDP и выбор 2, 4 или 8 карт

Модель нейросети, разделённая между четырьмя ускорителями с синхронизацией, — обучение на нескольких GPU

Обучение на нескольких GPU нужно, когда модель с оптимизатором не помещается в память одной карты или обучение длится слишком долго. Для полного обучения модели 7B требуется около 112 ГБ памяти без учёта активаций, поэтому её обучают на 2–4 ускорителях A100 или H100 с FSDP. Две карты ускоряют работу обычно в 1,6–1,9 раза, а не вдвое.

Нужно ли вам несколько GPU

Начните с проверки двух условий.

Модель не помещается. Полное обучение с оптимизатором Adam в смешанной точности требует около 16 байт на параметр: 2 байта на веса в bf16, 2 на градиенты, 4 на копию весов в FP32 и 8 на два состояния оптимизатора. Сверху идут активации, которые зависят от размера батча и длины последовательности.

Размер модели Память на обучение (без активаций) Минимальная конфигурация
1B ~16 ГБ 1 × RTX 4090 / RTX 5090
3B ~48 ГБ 1 × A100 80 ГБ
7–8B ~112–128 ГБ 2 × A100 / 2 × H100
13B ~208 ГБ 4 × A100 / 4 × H100
34B ~544 ГБ 8 × A100 / 8 × H100
70B ~1,1 ТБ 8 × H200 или несколько серверов

Обучение слишком долгое. Если модель помещается, но эпоха идёт сутки, а результат нужен к утру, несколько карт сокращают время. Здесь важно посчитать, окупается ли ускорение.

Если вы дообучаете модель через LoRA или QLoRA, дополнительные видеокарты почти никогда не нужны: адаптеры занимают малую долю памяти. Подробнее — в статье дообучение LoRA на арендованной GPU.

DDP: параллелизм по данным

DistributedDataParallel считается самым простым и быстрым способом распределения. Каждый GPU получает полную копию модели и свою часть батча. После обратного прохода процессы усредняют градиенты и делают одинаковый шаг оптимизатора.

Плюсы: минимум изменений в коде, высокая эффективность, стабильность.

Минусы: не экономит память. Если модель не помещается в одну видеокарту, DDP не поможет.

Запуск обычного PyTorch-скрипта на четырёх картах:

torchrun --nproc_per_node=4 train.py

В самом скрипте нужно инициализировать процессную группу, обернуть модель в DistributedDataParallel и использовать DistributedSampler для данных. Если вы работаете через Hugging Face Trainer или Accelerate, всё это делается автоматически.

DDP подходит, когда модель с оптимизатором помещается в память одного GPU, а нужна скорость.

FSDP и DeepSpeed ZeRO: шардирование модели

Когда модель не помещается, её состояние нужно разрезать между устройствами.

FSDP (Fully Sharded Data Parallel) встроен в PyTorch. Каждый GPU хранит только свою долю весов, градиентов и состояний оптимизатора. Перед вычислением слоя нужные веса собираются со всех устройств, после вычисления снова освобождаются. В итоге расход памяти на одном GPU падает примерно во столько раз, сколько их в системе.

DeepSpeed ZeRO решает ту же задачу и имеет три стадии:

  • ZeRO-1 шардирует только состояния оптимизатора;
  • ZeRO-2 добавляет градиенты;
  • ZeRO-3 шардирует ещё и веса, аналогично полному FSDP.

ZeRO также умеет выгружать часть данных в оперативную память или на NVMe-диск. Это позволяет обучать модели больше суммарной видеопамяти, но ценой заметного замедления.

На практике для моделей 7–13B хорошо работают оба варианта. FSDP проще, если вы уже пишете на чистом PyTorch, DeepSpeed удобен со сложными конфигурациями и выгрузкой. Оба поддерживаются в Accelerate и Hugging Face Trainer через конфигурационный файл.

Тензорный и конвейерный параллелизм делят сами слои или их последовательность между GPU. Они нужны для моделей на десятки и сотни миллиардов параметров и обычно используются через Megatron-LM. Для большинства задач до 13B хватает FSDP или ZeRO.

Видеокарты при распределённом обучении постоянно обмениваются данными: градиентами в DDP, весами и градиентами в FSDP. Скорость этого обмена определяет, насколько эффективно масштабируется обучение.

Связь между GPU Пропускная способность Где встречается
NVLink 4 (SXM) до 900 ГБ/с на устройство H100 SXM, H200
NVLink 3 (SXM) до 600 ГБ/с на устройство A100 SXM
PCIe 4.0 x16 ~32 ГБ/с в каждую сторону RTX 3090, RTX 4090, A100 PCIe
PCIe 5.0 x16 ~64 ГБ/с в каждую сторону RTX 5090, H100 PCIe

Разница на порядок объясняет, почему восемь H100 SXM масштабируются почти линейно, а восемь игровых карт через PCIe — заметно хуже, особенно с FSDP.

Ориентиры по эффективности для DDP (доля от идеального ускорения):

  • 2 карты: 80–95%;
  • 4 карты: 70–90%;
  • 8 карт: 60–90% в зависимости от связи и размера модели.

Чем больше модель и батч на карту, тем меньше доля времени на обмен и тем лучше масштабирование. Маленькие модели на восьми картах могут ускоряться всего в 4–5 раз.

Как выбрать: 2, 4 или 8 карт

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

2 карты — первый шаг, когда одной не хватает. Подходят для полного обучения моделей 7–8B с FSDP на A100 или H100 и для ускорения DDP-обучения моделей, которые помещаются в одну видеокарту. Проще всего в отладке.

4 карты — комфортная конфигурация для моделей 7–13B. Дают запас памяти под больший батч и длинные последовательности, что само по себе ускоряет обучение.

8 карт — для моделей 13–34B, длинных прогонов и случаев, где время дороже денег. Имеет смысл в основном на серверных ускорителях с NVLink.

Пример расчёта для полного обучения модели 7B (условно 100 часов на одной H100, если бы она помещалась):

Конфигурация Тариф, ₽/час Эффективность Время Стоимость
2 × H100 510 ~90% ~56 ч ~28 560 ₽
4 × H100 1 020 ~85% ~29 ч ~29 580 ₽
8 × H100 2 040 ~80% ~16 ч ~32 640 ₽

Для сравнения возьмём ту же задачу на A100. Если одна A100 в этой задаче медленнее H100 примерно в 2,5 раза, четырём A100 понадобится около 75 часов при тарифе 408 ₽/час, то есть порядка 30 600 ₽. По деньгам почти паритет с H100, но результат будет готов через трое суток, а не через одни. Поэтому A100 разумны, когда сроки свободные, а H100 — когда важна скорость итераций.

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

Частые проблемы и их решение

Распределённое обучение добавляет класс ошибок, которых нет на одном GPU. Вот самые распространённые.

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

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

Скорость не растёт с числом карт. Посмотрите загрузку каждой в nvidia-smi. Если она скачет от 0 до 100%, видеокарты ждут данных: увеличьте число воркеров DataLoader и держите датасет на локальном SSD. Если загрузка ровная, но низкая, узкое место — обмен между ними; помогут больший батч на GPU и накопление градиентов.

Результаты отличаются от обучения на одной карте. При DDP эффективный батч равен батчу на устройство, умноженному на число устройств. Если вы перешли с одного GPU на восемь и не поменяли learning rate, обучение может идти иначе. Пересчитайте гиперпараметры под новый эффективный батч или используйте накопление градиентов, чтобы сохранить прежний.

Чекпоинт не загружается на другом числе карт. Шардированные чекпоинты FSDP привязаны к конфигурации. Для переноса используйте распределённый формат сохранения, который умеет перешардировать состояние, или конвертируйте чекпоинт в полный формат после обучения.

Практические советы

  1. Отладьте на одной карте. Запустите скрипт на маленькой модели и одном GPU, затем на двух. Только после этого переходите на восемь.
  2. Проверьте связь между картами. Команда nvidia-smi topo -m показывает, соединены ли они через NVLink или PCIe.
  3. Сохраняйте шардированные чекпоинты. В FSDP сохранение полной модели с одного устройства медленное; используйте распределённые чекпоинты.
  4. Следите за загрузкой. Если GPU загружены ниже 80%, увеличьте батч или проверьте загрузку данных.
  5. Заложите диск. Чекпоинты модели 7B с оптимизатором весят больше 100 ГБ каждый.

Серверы с несколькими GPU доступны в каталоге: A100 для экономичного обучения и H100 для максимальной скорости. Если ещё не определились с моделью карты, сравните варианты в рейтинге видеокарт для обучения нейросетей.

Вопросы по теме

Когда нужно обучение на нескольких GPU?

В двух случаях: модель вместе с оптимизатором не помещается в память одной карты, или обучение на ней идёт неприемлемо долго. Если ни того, ни другого нет, один GPU проще и дешевле.

Чем DDP отличается от FSDP?

DDP держит полную копию модели на каждом устройстве и делит между ними данные — это быстро, но не экономит память. FSDP разрезает веса, градиенты и состояния оптимизатора между картами, поэтому позволяет обучать модели, которые не помещаются на одну видеокарту.

Во сколько раз ускоряется обучение на двух картах?

Обычно в 1,6–1,9 раза, а не ровно вдвое: часть времени уходит на обмен градиентами. На серверных ускорителях с NVLink эффективность выше, на игровых видеокартах через PCIe — ниже.

Сколько видеопамяти нужно для полного обучения модели 7B?

С Adam в смешанной точности — около 16 байт на параметр, то есть порядка 112 ГБ без учёта активаций. На практике это две H100 или A100 по 80 ГБ с FSDP, а с запасом под батч — 4.

Подберите GPU

20 моделей с поминутной оплатой в рублях.