关于DDP和单卡训练的batchsize和学习率设置问题

问题描述 投票:0回答:1

关于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数,但还没有结论。

python pytorch distributed-training
1个回答
0
投票

DDP 中的批量大小是每个 GPU 的批量大小。使用四个 GPU,您的真实批量大小为

8*4=32
。当批量大小较大时,每个时期的批量数较少,因此梯度更新也较少。对于您的情况,您需要 4 个 epoch 的 DDP 训练才能拥有与 1 个 epoch 的单 GPU 训练相同数量的参数更新步骤。

DDP 对节点之间的梯度进行平均,因此您无需担心改变学习率(如果对梯度求和则不会出现这种情况)。

© www.soinside.com 2019 - 2024. All rights reserved.