微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

深度学习-参数服务器中的梯度聚合

如何解决深度学习-参数服务器中的梯度聚合

我对参数服务器和执行的梯度聚合有一些疑问。我的主要资料是《深入学习深度学习》一书[1]。我假设是BSP模型,即我们在每个微型批处理之后进行同步。我不确定这是属于数据科学领域还是AI StackExchange社区,所以我在这里认设置了...

[1]上的图12.7.1建议采用以下方法: 假设批次大小为32。如果我们有一个GPU和128个训练数据点,则每个时期有4个迷你批次。每次迷你批处理后,我们都会更新模型(即有4次更新)。因此,我们必须计算四个梯度(每个小批量一个)。

对于多GPU情况,假设有两个GPU和128个训练数据点。我们为每个GPU注入一个小批量,让它们计算梯度,求和并用总和更新模型。因此,从BSP的角度来看,涉及两个步骤而不是四个步骤。

我的问题如下:

  1. 我对参数服务器工作方式的描述正确吗?特别是,我不确定是否每个GPU是否保持相同的批处理大小32,还是必须将批处理大小除以GPU的数量

  2. 为什么我们对梯度求和而不是对它们求平均值?这让我更加困惑,因为在PyTorch [2]的distributedDataParallel文档中,有以下语句:

当模型在M个具有批次= N的节点上训练时,与在单个节点上具有批次= M * N训练的相同模型相比,梯度将小M倍(因为不同节点之间的梯度>平均)。与本地培训对象相比,要获得在数学上等效的培训过程时,应该考虑到这一点。

这里有两点令人困惑:

2.1。它指出梯度是平均的,这与d2l书中指出的对梯度求和的结果不符。

2.2。到目前为止,我一直认为,在小批量梯度下降过程中,损失函数(优化目标)会平均小批量数据点的误差。因此,如果M个节点以批处理大小N运行小批量梯度下降,并且取其梯度的平均值,则我们应该收到一个数量级相同的数字,就好像1个节点以批大小为N M,因为单个节点将n m个数据点的误差函数平均为损失函数,而对于M个节点,我们仅取平均值的平均值。

我不确定PyTorch的distributedDataParallel类是否可以视为参数服务器(特别是因为它们甚至都提供了有关如何在PyTorch [3]中构建参数服务器的指南),但是它映射到了这本书作为参数服务器。

解决我的困惑提供的任何帮助均深表感谢。非常感谢!

亲切的问候, 马克西米利安

[1] https://d2l.ai/chapter_computational-performance/parameterserver.html

[2] https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html

[3] https://pytorch.org/tutorials/intermediate/rpc_param_server_tutorial.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。