关于DDP和单卡训练的batchsize和学习率设置问题
单卡网络训练,batchsize=8,学习率=10e-4
现在改为DDP单机多卡(一个节点4个GPU)训练 就像下面的解决方案:
import torch.distributed as dist
dist.init_process_group(backend='nccl', init_method=init_method, world_size=args.nprocs, rank=local_rank)
此时,如果batch size设置为8,学习率设置为10e-4,则DPP的训练时间比单卡要少。但从loss曲线来看,收敛所需的epoch数明显比单卡要大很多。
我想问一下,如果DDP中batch size不变,是否需要提高学习率?怎么增加?
如果我想保持与单卡相同的训练效果,是否将batchsize设置为(8 / GPU数量)?
我尝试过将DDP上的batchsize设置为2,即单卡的batchsize/gpu数,但还没有结论。
DDP 中的批量大小是每个 GPU 的批量大小。使用四个 GPU,您的真实批量大小为
8*4=32
。当批量大小较大时,每个时期的批量数较少,因此梯度更新也较少。对于您的情况,您需要 4 个 epoch 的 DDP 训练才能拥有与 1 个 epoch 的单 GPU 训练相同数量的参数更新步骤。
DDP 对节点之间的梯度进行平均,因此您无需担心改变学习率(如果对梯度求和则不会出现这种情况)。