首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DistributedDataParallel的批量大小、时间和学习率

DistributedDataParallel的批量大小、时间和学习率
EN

Stack Overflow用户
提问于 2022-04-22 01:40:29
回答 1查看 903关注 0票数 2

我读过这些线程[1] [2] [3] [4]这篇文章

我想我了解了DDP的批处理大小和时间是如何工作的,但我不确定学习的速度。

假设我有一个100 *8图像的数据集。在非分布式场景中,我将批处理大小设置为8,因此每个时期将执行100个梯度步骤。

现在我在一个多节点的多gpu场景中,有2个节点和4个gpu(所以世界大小是8)。

我知道我需要传递8/8= 1的批处理,因为每个更新都会聚合来自8个GPU的梯度。在每个工作人员中,数据加载程序仍将加载100个批,但每个示例都是这样。因此,整个数据集每一个时代准确地解析一次。

我查过了一切看起来都是这样的。

但是学习率呢?根据官方医生

当一个模型在带有batch=N的M个节点上训练时,如果损失在一批实例中被相加(不是通常的平均)(因为不同节点之间的梯度是平均的),则与在一个具有batch=M*N的节点上训练的相同模型相比,梯度将小M倍。..。但在大多数情况下,您只需将单个GPU上的DistributedDataParallel包装模型、DataParallel包装模型和普通模型视为相同的模型(例如,对等效批处理大小使用相同的学习速率)。

我知道梯度是平均的,所以如果损失在样本上是平均的,什么都不会改变,而如果是夏天,我们需要说明这一点。但是,“节点”是指跨越所有集群节点(世界大小)的GPU总数还是仅指集群节点?在我的例子中,M是2还是8?我所链接的线程中的一些帖子说,梯度除以“GPU的数量”。梯度究竟是如何聚合的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-09 02:27:31

请参阅以下讨论:

https://github.com/PyTorchLightning/pytorch-lightning/discussions/3706

“据我所知,学习速度与批次大小成比例,这样梯度的样本方差就会保持接近不变。”

由于DDP平均所有设备的梯度,我认为LR应该按有效批次大小(即batch_size * num_accumulated_batches * num_gpus * num_nodes )进行比例缩放。

在这种情况下,假设batch_size=512、num_accumulated_batches=1、num_gpus=2和num_noeds=1的有效批次大小为1024,因此LR应该按sqrt(2)进行缩放,而不是单个批处理大小为512的gpus。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71962572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档