Обучение моделей
49 просмотров
Data Parallelism
Data Parallelism
Data Parallelism — стратегия распределённого обучения, при которой копия модели размещается на каждом GPU, а батч данных разделяется между ними. Градиенты синхронизируются через All-Reduce.
Что такое Data Parallelism
Data Parallelism (DP) — самая простая форма распределённого обучения. Каждый GPU хранит полную копию модели и обрабатывает свою часть батча. После вычисления градиентов они усредняются между всеми GPU через All-Reduce.
Как работает
Батч данных: [A B C D E F G H]
GPU 0: модель + [A B] → градиенты_0
GPU 1: модель + [C D] → градиенты_1
GPU 2: модель + [E F] → градиенты_2
GPU 3: модель + [G H] → градиенты_3
All-Reduce: усредняем (grad_0 + grad_1 + grad_2 + grad_3) / 4
Каждый GPU обновляет свои веса одинаковым средним градиентом
→ модели остаются синхронизированными
Реализации в PyTorch
| Метод | Описание | Ограничения |
|---|---|---|
DataParallel (DP) |
Один процесс, копирование модели | GPU 0 — узкое место |
DistributedDataParallel (DDP) |
Процесс на каждый GPU | Модель должна помещаться в 1 GPU |
FSDP |
Шардинг весов + DP | Сложнее настройка |
DeepSpeed ZeRO |
Шардинг optimizer/grad/params | Аналог FSDP |
Масштабирование
Идеальный Data Parallelism даёт линейное ускорение: 8 GPU → 8× быстрее. На практике:
- 2-4 GPU: ~95% эффективности (NVLink)
- 8 GPU (1 узел): ~90% (NVLink)
- 16-64 GPU (multi-node): 70-85% (зависит от сети)
Когда использовать
- Модель помещается в VRAM одного GPU
- Нужно ускорить обучение, увеличив effective batch size
- Самый простой способ утилизировать несколько GPU
# DDP — стандартный Data Parallelism в PyTorch
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP
dist.init_process_group("nccl")
model = DDP(model.to(local_rank), device_ids=[local_rank])