MLOps и инструменты
94 просмотра
All-Reduce
All-Reduce
All-Reduce — коллективная операция, суммирующая данные со всех GPU и раздающая результат каждому. Основной примитив синхронизации градиентов в Data Parallelism.
Содержание
Что такое All-Reduce
All-Reduce — операция, при которой каждый GPU имеет свой тензор, и после операции каждый получает сумму всех тензоров.
До: GPU 0: [1,2,3] GPU 1: [4,5,6] GPU 2: [7,8,9]
После: GPU 0: [12,15,18] GPU 1: [12,15,18] GPU 2: [12,15,18]
В ML
В Data Parallel обучении: каждый GPU вычисляет локальные градиенты → All-Reduce усредняет → все обновляют веса одинаково.
Алгоритмы
| Алгоритм | Шагов | Применение |
|---|---|---|
| Ring All-Reduce | 2(N-1) | Стандарт для NVLink |
| Tree All-Reduce | 2 log N | Малые данные |
| Reduce-Scatter + All-Gather | 2 | Основа FSDP/ZeRO |
Производительность
| Конфигурация | Bandwidth |
|---|---|
| 8× H100 NVLink | ~450 GB/s |
| 2 узла × 8 GPU, NDR IB | ~50 GB/s |
| 2 узла × 8 GPU, 100G Ethernet | ~12 GB/s |
import torch.distributed as dist
tensor = torch.randn(1000).cuda()
dist.all_reduce(tensor, op=dist.ReduceOp.SUM)
tensor /= dist.get_world_size()
Связанные термины
Используется в
Использует
Необходим для
Включает