Distributed Training
Распределённое обучение распределяет обучение модели между несколькими GPU или машинами с помощью параллелизма по данным, шардам, тензорам или конвейеру. Рассматриваются DDP, FSDP и масштабирование.
Распределенное обучение распределяет работу по обучению одной модели между несколькими процессорами — обычно GPU или TPU на одной машине либо в облаке или локальном кластере. Это позволяет быстрее завершить обучение или вообще обучить модель, которая не помещается в память одного устройства. Устройства обмениваются градиентами, активациями или фрагментами параметров через высокоскоростные соединения с помощью библиотек для обмена данными, таких как NVIDIA NCCL. Так обучают современные фундаментальные модели и большие языковые модели; распределенное обучение также ускоряет обычное обучение моделей обнаружения объектов на рабочих станциях с несколькими GPU.
Как работает распределённое обучение#
Параллелизм по данным — наиболее распространенная стратегия. Каждый GPU хранит полную копию модели, обрабатывает свою часть каждого пакета обучающих данных и участвует в операции all-reduce, которая усредняет градиенты, чтобы каждая копия применяла одинаковое обновление методом градиентного спуска. DistributedDataParallel (DDP) в PyTorch выполняет этот обмен параллельно с обратным проходом. Общий размер пакета равен размеру пакета на один GPU, умноженному на количество GPU, поэтому скорость обучения обычно нужно масштабировать соответствующим образом: Goyal и соавторы обучили ResNet-50 на ImageNet за один час на 256 GPU с пакетом из 8,192 изображений, используя линейное масштабирование и фазу разогрева. Эффективность масштабирования с 8 до 256 GPU составила около 90%.
Параллелизм по данным с разделением на фрагменты снижает затраты памяти на копии модели. ZeRO и Fully Sharded Data Parallel (FSDP) в PyTorch распределяют параметры, градиенты и состояния оптимизатора между GPU и собирают полные веса каждого слоя только на время его вычисления. Поэтому при добавлении GPU необходимый объем памяти на каждом GPU уменьшается.
Параллелизм по модели разделяет саму нейронную сеть. Тензорный параллелизм распределяет отдельные матричные умножения между GPU, конвейерный параллелизм назначает последовательные слои разным GPU и передает между ними микропакеты, контекстный параллелизм разделяет длинные последовательности, а параллелизм экспертов размещает экспертов модели смеси экспертов на разных GPU. Такие платформы, как Megatron-LM, сочетают эти методы с параллелизмом по данным, чтобы обучать модели с сотнями миллиардов параметров.
Практика обучения на нескольких GPU#
Основные накладные расходы связаны с коммуникацией: трафик all-reduce растёт вместе с размером модели, поэтому GPU, соединённые NVLink внутри одного узла, масштабируются лучше, чем узлы, связанные более медленными сетями. Статистики пакетной нормализации рассчитываются отдельно для каждого GPU, если слои не преобразованы в синхронизированную пакетную нормализацию; это важно, когда доля пакета на каждом GPU мала. Ultralytics YOLO26 поддерживает обучение на нескольких GPU через DDP: передача нескольких ID устройств запускает по одному процессу на GPU с помощью torch.distributed.run, использует бэкенд NCCL в CUDA и равномерно распределяет между GPU значение batch.
from ultralytics import YOLO
# Загрузи предварительно обученную модель YOLO26
model = YOLO("yolo26n.pt")
# Обучай на GPU 0 и 1 с DDP; при batch=32 каждый GPU обрабатывает по 16 изображений на шаг
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, batch=32, device=[0, 1])Примеры применения в реальных условиях#
- Большие языковые модели: Meta обучила Llama 3 405B на 16K GPU H100, объединив тензорный, конвейерный, контекстный параллелизм и параллелизм по данным в то, что авторы называют 4D-параллелизмом.
- Автономные транспортные средства: команды, занимающиеся восприятием, обучают модели обнаружения и сегментации на обширных архивах записей с камер, лидаров и радаров автопарков. Для этого нужны крупные кластеры GPU.
- Анализ медицинских изображений: трехмерные снимки КТ и МРТ высокого разрешения перегружают память одного GPU. Распределение пакетов или фрагментов модели между GPU позволяет обучать модели на более объемных снимках.
Распределенное обучение и смежные понятия#
- Федеративное обучение: федеративное обучение тоже выполняется на множестве устройств, но ради конфиденциальности данные остаются на телефонах, в больницах или у других клиентов, а на центральный сервер передаются только обновления модели. При распределенном обучении данные собираются в одном кластере, чтобы максимизировать скорость.
- Разделенное обучение: разделенное обучение делит модель между клиентом и сервером, чтобы исходные данные не покидали клиента; за конфиденциальность приходится платить дополнительным обменом данными.
- Накопление градиентов: накопление градиентов суммирует градиенты нескольких небольших пакетов перед одним обновлением. Так на одном GPU можно получить те же вычисления, что и для большого пакета, но это занимает больше времени. При параллелизме по данным эти пакеты обрабатываются одновременно на нескольких GPU.










