为了最小化通信负载,我们可以利用神经网络的结构。在每一次迭代中,每一个 GPU 都会运行前向传播来计算错误,然后再运行反向传播来为该神经网络的每一个参数计算梯度。反向传播是从输出层开始计算梯度,然后向输入层移动,这意味着输出层参数的梯度在更早的层的梯度之前是显著可用的。因为该 allreduce 能一次操作该网络的参数的一个子集,所以我们可以在其输出层参数上开始 allreduce,同时还能计算其它梯度。这样做使得该计算可以和反向传播步骤中的其它计算一起进行,所以可以减少每个 GPU 用于等待通信完成的总时间。 比如,假设有一个类似于 [2] 中的语言模型,但带有大约 3 亿个可学习的参数(因此总梯度大小为 1.2 GB)。使用 allreduce,每个 GPU 必须发送和接收大约 2.4 GB 的数据。使用一种 CUDA-aware MPI 实现(比如 OpenMPI),我们可以使用 GPUDirect RDMA 在 GPU 之间传输数据,带宽大约为 10 GB/s;但是,在我们的集群中的节点之间的连接更慢——Infiniband 提供了大约 6 GB/s 的带宽。因为 Infiniband 连接是这里的限制因素,那么单次迭代就需要大约 每秒 2.4 GB/6.0 GB ≈ 每次迭代 400 ms 因为更深入到网络中的层一开始就有可用的梯度,所以我们可以在整个反向传播通过完成之前就开始进行数据传输,所以其真正的开销可能会少于 400 ms;通信和计算之间的这种重叠可能会随被优化的神经网络的本质而发生改变。 我们实现了之前提到的语言模型,并且在我们从单个 GPU(没有通信开销)扩展到 40 个 GPU 时测试了每次迭代所用的时间。这 40 个 GPU 被布置成了 5 个节点,每个节点 8 个 GPU,它们之间通过 Infiniband 连接。我们以 32 的批大小对该语言模型运行了 300 迭代,然后计算了其每秒所处理的样本的数量。
对于一个有 3 亿个参数的语言模型,每秒所处理的样本的数量会随同时进行同步训练的 GPU 的数量而线性增长。 如你所见,整个系统的吞吐量会随 GPU 的数量线性扩展;但超过一个特定的点之后,增加更多 GPU 并不会导致每次迭代的显著减速。在 40 个 GPU 上运行该模型的时间是每次迭代 650-700 ms,而在单个 GPU 上该数字为大约 370 ms。因为据我们估计通信大约需要 400 ms,所以我们通过将反向传播和数据传输重叠起来进行而为每次迭代节省了 70-120 ms 的时间。 总结 来自于高性能计算领域的 Ring Allreduce 技术让我们可以高效地在跨多设备和多节点的神经网络上对梯度进行平均。通过在训练过程中使用这种带宽优化算法,你可以极大地减少通信负载并扩展到远远更多的设备,同时仍能保留同步随机梯度下降的确定性和可预测的收敛性。该算法并不特定于任何网络架构和深度学习框架,能够为数据并行训练的效率提供显著的和直接的好处,同时其部署实现也是相当直接和容易的。 为了让你能更轻松地使用这些技术,今天我们也发布了一个演示该 allreduce 算法的 C 语言库:,你可以将其嵌入到任何使用 MPI 的应用中。此外,我们也已经将该 allreduce 整合到 TensorFlow 中(可在 tensorflow.contrib.mpi 模块获取文档)。 C 语言 baidu-allreduce:https://github.com/baidu-research/baidu-allreduce TensorFlow-allreduce:https://github.com/baidu-research/tensorflow-allreduce 我们希望其它深度学习框架也能在合适的地方使用类似的技术;通过使用这些工具,你可以轻松有效地将你的神经网络模型扩展到许多机器,而且不论你选择的是什么框架。 参考文献 1.Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton.「ImageNet classification with deep convolutional neural networks.」Advances in neural information processing systems. 2012. 2.Jozefowicz, Rafal, et al.「Exploring the limits of language modeling.」arXiv preprint arXiv:1602.02410 (2016). 3.Amodei, Dario, et al.「Deep speech 2: End-to-end speech recognition in english and mandarin.」arXiv preprint arXiv:1512.02595 (2015). 4.Patarasuk, Pitch, and Xin Yuan.「Bandwidth optimal all-reduce algorithms for clusters of workstations.」Journal of Parallel and Distributed Computing 69.2 (2009): 117-124. 5.Hannun, Awni, et al.「Deep speech: Scaling up end-to-end speech recognition.」arXiv preprint arXiv:1412.5567 (2014). February 21st, 2017 原文链接: ©本文为机器之心编译,转载请联系本公众号获得授权。 ?------------------------------------------------ 加入机器之心(全职记者/实习生):[email protected] 投稿或寻求报道:[email protected] 广告&商务合作:[email protected] (责任编辑:本港台直播) |