DDP
原理[1]
- 分布式数据并行时,模型(model parameters)/优化器(optimizer states)每张卡都会拷贝一份(replicas)
- DDP 始终在卡间维持着模型参数和优化器状态的同步一致性在整个训练过程中;
- Data Parallel,batch input,通过 DistributedSampler split & 分发到不同的 gpus 上
- 此时虽然模型/optimizer 相同,但因为数据输入不同,导致 loss 不同,反向传播时计算到的梯度也会不同
- 此时 ddp 如何保证卡间,model/optimizer 的同步一致性呢
- ring all-reduce algorithm
Ring AllReduce algorithm[1]
DDP 相关基本概念[1]
node, rank, world_size
代码[2]
!python -m torch.distributed.launch --use-env --nproc-per-node=2 ddp_gpus_torchrun.py --max_epochs 5 --batch_size 32
!torchrun --nproc-per-node=2 ddp_gpus_torchrun.py --max_epochs 5 --batch_size 32