PyTorch训练(四):Ring-Allreduce【分布式训练模式】

本文深入探讨了在深度学习中使用PyTorch进行分布式训练的策略,特别是Ring-Allreduce方法。解释了数据并行SGD的基本原理,分析了直接通信策略的局限性,接着详细介绍了Ring-Allreduce的去中心化环形通信模式,展示其在减少通信成本和提高训练效率方面的优势。
摘要由CSDN通过智能技术生成

当将神经网络的训练并行化到许多GPU上时,你必须选择如何将不同的操作分配到你可用的不同GPU上。在这里,我们关注一种称为数据并行随机梯度下降( SGD )的技术。与标准SGD一样,梯度下降是通过数据子集(小批次)完成的,需要多次迭代才能在整个数据集上进行。然而,在数据并行训练中,每个GPU都有整个神经网络模型的完整副本,对于每次迭代,只分配了小批次中样本的子集。对于每次迭代,每个GPU在其数据上运行网络的前向传播,随后进行误差反向传播,以计算损耗相对于网络参数的梯度。最后,GPU相互通信以平均由不同GPU计算的梯度,将平均梯度应用于权重以获得新权重。GPU都在锁定步骤的迭代中前进,一旦GPU完成了迭代,它必须等待所有其他GPU完成它们的迭代,这样权重才能被正确更新。这相当于在单个GPU上执行SGD,但是我们通过在多个GPU之间分发数据并并行执行计算来获得加速。

当你只有两个GPU和以兆字节数据衡量的参数时,这些GPU的通信方式可能并不重要。然而,当你的模型有数十亿个参数时,梯度可能需要几十亿字节的空间(因为每个参数都有一个梯度值),并且你正在协调几十个GPU,通信机制变得至关重要。

例如,考虑最直接的通信机制。每一个GPU都计算其子集的小批次上的梯度。然后,每个GPU将其梯度发送到单个GPU,该GPU取所有梯度的平均值,并将平均值发送回所有其他GPU。

在直接从单个GPU发送和接收数据的机制中,单个GPU必须从所有GPU接收所有参数,并将所有参数发送到所有GPU。系统中的gpu越多,通信成本就越大。

让我们评估一下这种通信策略如何在真实模型上运行,例如以百度深度语音2 为模型的语音识别网络,具有三亿个可训练参数。 每个参数四个字节的三亿个参数大约是1.2千兆字节的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值