博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深度梯度压缩:减小分布式训练的通信带宽
阅读量:5170 次
发布时间:2019-06-13

本文共 1213 字,大约阅读时间需要 4 分钟。

论文:

译文:深度梯度压缩:减小分布式训练的通信带宽

摘要

大规模分布式训练需要通信带宽用于梯度交换,这在节点较多时,限制了训练的可扩展性,而且网络带宽比较贵。如果是在移动设备上进行分布式训练(如联合学习),情况会变得更加糟糕,高延迟,低吞吐还断断续续的网络连接。本文,我们发现分布式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减少了分布式训练的通信带宽需求,提高了可扩展性。 

 

注:有在移动设备上做分布式训练的场景?

 

转载于:https://www.cnblogs.com/yangwenhuan/p/11413310.html

你可能感兴趣的文章
九度0J 1374 所有员工年龄排序
查看>>
微信小程序图片使用示例
查看>>
Ubuntu16.04+cuda8.0rc+opencv3.1.0+caffe+Theano+torch7搭建教程
查看>>
1.开发准备
查看>>
centos su命令
查看>>
CLR:基元类型、引用类型和值类型
查看>>
dubbo序列化hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决...
查看>>
jQuery中的事件绑定的几种方式
查看>>
泥塑课
查看>>
setImageBitmap和setImageResource
查看>>
springMVC4 注解配置实例
查看>>
单片机编程
查看>>
Filter in Servlet
查看>>
Linux--SquashFS
查看>>
Application Pool Identities
查看>>
2017-3-24 开通博客园
查看>>
【MySQL性能优化】MySQL常见SQL错误用法
查看>>
Vue2全家桶之一:vue-cli(vue脚手架)超详细教程
查看>>
Struts 2 常用技术
查看>>
树形DP
查看>>