异步随机梯度下降算法是训练模型的好方法,在实际使用中也被证明有效,只要控制好梯度过时的问题。有些实现方法是介于异步SGD和同步实现之间,取决于超参数的使用。
带有中心参数服务器的异步SGD可能存在通讯的瓶颈(而同步的方法可以采用tree-reduce或是类似的算法来避免这类通讯瓶颈),使用N个参数服务器,每个参数服务器负责一部分参数,这是一种直截了当的解决方式。
最后,去中心化异步随机梯度下降法是一个好方向,但是还需要进一步研究的支持用它替代‘标准’的异步SGD。
何时使用分布式深度学习
分布式的深度学习并不总是最佳的选择,需要视情况而定。
分布式训练并不是免费 —— 由于同步、数据和参数的网络传输等,分布式系统相比单机训练要多不少额外的必要开销。若要采用分布式系统,我们则希望增添机器带来的收益能够抵消那些必要开销。而且,分布式系统的初始化(比如搭建系统和加载数据)和超参数调优也比较耗时。因此,我们的建议非常简单:继续用单机训练网络模型,直到训练时间过长。
有两种原因可能导致网络模型的训练时间过长:网络规模太大或是数据量太大。事实上,若这两者不匹配(大模型配小数据,小模型配大数据)这可能导致欠拟合和过拟合 —— 都将导致最终训练得到的模型缺少泛化能力。
在某些情况下,应该首先考虑多GPU系统(如Deeplearning4j的Parallel-Wrapper就能很方便地在单机上实现以数据并行化方式训练模型)。
另一个需要考虑的因素是网络传输与计算量的比值。当传输与计算的比值较低时,分布式训练的效率往往较高。小的、浅层的网络由于每次迭代的计算量较小,并不适合分布式训练。带有参数共享的网络(比如CNN和RNN)是分布式训练的理想对象:因为它们每个参数的计算机远远大于多层感知机或是自编码器。
第二篇提要:在Apache Spark上使用Deeplearning4j进行分布式深度学习
在我们分布式深度学习系列文章的第二、第三篇中,我们会介绍使用Apache Spark的Deeplearning4j的参数平均法实现,以及借用一个端到端的例子讲解如何用它在Spark集群上训练神经网络模型。
参考文献
[1] Kai Chen and Qiang Huo. Scalable training of deep learning machines by incremental block training with intra-block parallel optimization and blockwise model-update filtering. In 2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), pages 5880–5884. IEEE, 2016.
[2] Jeffrey Dean, Greg Corrado, Rajat Monga, Kai Chen, Matthieu Devin, Mark Mao, Andrew Senior, Paul Tucker, Ke Yang, Quoc V Le, et al. Large scale distributed deep networks. In Advances in Neural Information Processing Systems, pages 1223–1231, 2012.
[3] Suyog Gupta, Wei Zhang, and Josh Milthrope. Model accuracy and runtime tradeoff in distributed deep learning. arXiv preprint arXiv:1509.04210, 2015.
[4] Qirong Ho, James Cipar, Henggang Cui, Seunghak Lee, Jin Kyu Kim, Phillip B. Gibbons, Garth A Gibson, Greg Ganger, and Eric P Xing. More effective distributed ml via a stale synchronous parallel parameter server. In C. J. C. Burges, L. Bottou, M. Welling, Z. Ghahramani, and K. Q. Weinberger, editors, Advances in Neural Information Processing Systems 26, pages 1223–1231. Curran Associates, Inc., 2013.
[5] Forrest N Iandola, Khalid Ashraf, Mattthew W Moskewicz, and Kurt Keutzer. Firecaffe: near-linear acceleration of deep neural network training on compute clusters. arXiv preprint arXiv:1511.00175, 2015.
[6] Augustus Odena. Faster asynchronous sgd. arXiv preprint arXiv:1601.04033, 2016.
[7] Nikko Strom. Scalable distributed dnn training using commodity gpu cloud computing. In Sixteenth Annual Conference of the International Speech Communication Association, 2015. http://nikkostrom.com/publications/interspeech2015/strom_interspeech2015.pdf .
[8] Hang Su and Haoyu Chen. Experiments on parallel training of deep neural network using model averaging. arXiv preprint arXiv:1507.01239, 2015.
[9] Wei Zhang, Suyog Gupta, Xiangru Lian, and Ji Liu. Staleness-aware async-sgd for distributed deep learning. IJCAI, 2016.