深度梯度压缩:减小分布式训练的通信带宽
论文:https://arxiv.org/pdf/1712.01887.pdf
译文:深度梯度压缩:减小分布式训练的通信带宽
摘要
大规模分布式训练需要通信带宽用于梯度交换,这在节点较多时,限制了训练的可扩展性,而且网络带宽比较贵。如果是在移动设备上进行分布式训练(如联合学习),情况会变得更加糟糕,高延迟,低吞吐还断断续续的网络连接。本文,我们发现分布式SGD中99.9%的梯度交换都是多余的,然后提出深度梯度压缩(DGC),极大地减少了通信带宽。为了保留压缩过程中的精度,DGC采用了四种方法:
1、动量纠正(momentum correction)
2、本地梯度裁剪(local gradient clipping)
3、动量因子掩蔽(momentum factor masking)
4、热身训练(warm-up training)
我们已经把DGC应用到图像分类、语音识别和语言模型,并且基于各种数据集,包括Cifar10、ImageNet、Penn Treebank和Librispeech Corpus。在这些场景,DGC的梯度压缩比例有270倍到600倍,而且不会损失准确率。ResNet50的梯度大小从97MB减少到0.35MB,以及DeepSpeech从488MB减少到0.74MB。DGC可以在1Gbps以太网和移动设备中进行分布式训练。
介绍
大规模分布式训练可以训练更深更大的模型。SGD被广泛应用于分布式训练。通过增加训练节点,以及利用数据并行,相同大小的训练数据,forward-backward的总体计算时间会大幅减少。但是,梯度交换比较耗时,特别是RNN的计算/通信比较小。因此,当分布式训练规模变大时,网络带宽会变成主要瓶颈。在移动设备上,带宽问题会变得更加严重。
深度梯度压缩
1、梯度稀疏化:
我们只发送重要梯度(稀疏更新),来减少通信所需的带宽。只有那些大于某个阈值的梯度会被发送(注:梯度跟权值不是一一对应的吗?那些没传的梯度,权值怎么更新?)。为了防止丢失信息,我们本地累加剩余的梯度,最终这些梯度大到可以发送。因此,我们是立马发送大梯度,最终发送所有的梯度,如算法1所示。
系统的性能以及分析
实现DGC需要筛选top k梯度。给定稀疏率99.9%,我们就需要从几百万权值中,挑选出top 0.1%。时间复杂度是O(n),其中n是梯度个数。我们采用抽样来减少top k的选择时间。先抽样0.1% ~ 1%,再在样本上筛选top k梯度。
结论
DGC能够把梯度压缩270倍到600倍,并且适用于很多CNN和RNN。为了不让DGC导致收敛慢,采用了动量纠正、本地梯度裁剪、动量因子掩蔽和热身训练。我们进一步提出分级阈值选择,来加速梯度稀疏化过程。DGC减少了分布式训练的通信带宽需求,提高了可扩展性。
注:有在移动设备上做分布式训练的场景?