超出认知的数据压缩 用1-bit数据来表示32-bit的梯度 语音识别分布式机器学习 梯度压缩 论文精读
说明
介绍 1 − b i t 1-bit 1−bit论文内容。
原文链接:1-bit stochastic gradient descent and its application to data-parallel distributed training of speech DNNs | Semantic Scholar
ABS
实验证明在分布式机器学习的过程中能够通过将同步所传递的梯度进行量化(从 32 32 32位到 1 1 1位),同时加上量化容错机制能够很好的加快整个训练过程。最值得注意的时,模型的收敛情况并没有收到影响。
本文将该发现与 S G D , A d a G r a d SGD,AdaGrad SGD,AdaGrad, 自动批量选择, 双缓冲区,模型并行技术相结合设计了。意料之外的是,量化甚至能让精度有一个很小的提升。
不同的模型在使用该方法后加速效果明显。
1 Introduction and Related Work
现在上下文相关的深度神经网络模型基本都是通过反向传播进行训练(常用的例如 S G D SGD SGD),而上述的模型的训练是非常耗时的。
注:上下文相关的神经网络应该是指类似与解决翻译问题所用的模型。
使用分布式训练上述的模型已经取得了一定成功。(这里介绍了一部分相关工作,这里不进行赘述)
在分布式训练中,一个非常重要的问题就是带宽瓶颈的问题:即各个节点训练一定时间之后需要进行数据的发送(这不管是模型并行还是数据并行都会发生),而这个过程交换的数据量往往取决于模型的大小,而现在使用的模型一般都比较大,所以网络的带宽成为了分布式机器学习的一个瓶颈。
缓解这个方法一般有两类方法:
- 增加批量大小,这样每轮会进行的计算会增加,而参与通信的时间会相对减少;
- 减少每一次通信的数据交换量。
本文提出的方法属于第二种,同时本文更多关注的是将量化方法应用于数据并行的分布式训练中。
2 Data-Parallel Deterministically Distributed SGD Training
通常采用 B P BP BP进行模型的训练,过程可以被概述为下列的两个方程:
KaTeX parse error: Undefined control sequence: \part at position 114: …^{t+N-1}\frac {\̲p̲a̲r̲t̲ ̲F_{\lambda}(o(\…
上述过程对应反向传播求导和梯度下降进行更新。
2.1 Data-Parallel Distributed SGD
上述的方程可以进行分布式计算,只需要将方程 ( 2 ) (2) (2)的梯度计算部分按照节点的个数,让每个处理一部分数据,然后进行梯度的计算,计算完成后,相加即可得到某个时刻的梯度。
p e r f e c t o v e r l a p perfect\ overlap perfect overlap:选取合适的工作节点个数能够让计算和数据交换进行最优的并行化,也就是通信资源和计算资源同时饱和。
T c a l c ( K ^ ) = T c o m m ( K ^ ) T_{calc}(\hat K)=T_{comm}(\hat K) Tcalc(K^)=Tcomm(K^)
也就是选取 K K K让每轮的通信时间和计算时间相等,这样当通信完成是下一轮的计算也完成可以继续进行通信。
计算时间可以被分解成固定的计算时间和可变的计算时间两部分。固定的计算时间一般是完成一些必要的操作时间所花费的时间,而可变计算时间往往会根据模型的大小,批量大小发生改变。
F i g u r e 1 Figure\ 1 Figure 1展示了当节点个数下降到通信时间与计算时间相等时获得的加速。
K ^ \hat K K^可以通过如下公式进行计算:
K ^ = N / 2 ∗ T c a l c f r m + C ∗ T c a l c p o s t 1 Z T c o m m f l o a t − T c a l c u p d \hat K = \frac {N/2*T^{frm}_{calc}+C*T^{post}_{calc}}{\frac 1 ZT^{float}_{comm}-T^{upd}_{calc}} K^=Z1Tcommfloat−TcalcupdN/2∗Tcalcfrm+C∗Tcalcpost
各参数的含义:(设模型的大小为 M M M)
- N N N:批量的大小。
- T c a l c f r m T^{frm}_{calc} Tcalcfrm:计算梯度所花费的时间,大约为 M F L O P S \frac M {FLOPS} FLOPSM。
- C C C:一个常量,使用特殊方法处理所携带的常数。
- T c a l c p o s t T^{post}_{calc} Tcalcpost:后续进行处理所需要的时间,例如使用 A d a G r a d , m o m e n t u m AdaGrad, momentum AdaGrad,momentum需要花费的额外时间(需要和 C C C相乘才能获取实际时间),大约为 M r \frac M r rM, r r r为内存的带宽。
- Z Z Z:数据传输之前的压缩率,在本文中将 32 32 32位压缩成 1 1 1位,那么 Z = 32 Z=32 Z=32。
- T c o m m f l o a t T_{comm}^{float} Tcommfloat:不压缩梯度进行通信所需要花费的时间,大约为 M b \frac M b bM, b b b为两个结点之间的网络带宽。
- T c a l c u p d T^{upd}_{calc} Tcalcupd:参数服务器将受到的梯度用于更新所需要的时间,大约为 M r \frac M r rM。
上面的公式的理解:
分母是实际进行通信的时间,分子计算所有 N N N个数据会花费的时间,而前面的推断需要让每个结点的计算时间和通信时间相等,由于在分布式机器学习中每个结点拥有的数据量是相同的,所以分子的计算时间除以 K K K就是每个结点的计算时间,让两者相等并将 K K K移到方程的一边即可得到上面的公式。上面计算时间的计算出现了一个除以 2 2 2,这在下一小节会解释。
2.2 Double Buffering with Half Batches
上一节的公式里面出现了除以 2 2 2是因为使用了双缓冲区。整个过程将每一个批量会分成大小相等的两部分放入缓冲区中,当前一部分计算完成后,开始计算后一部分,这个时候前一部分即可进行通信,当后一部分计算完成的时候,即可进行通信,此时又可以从缓冲区读取下一个批量的前一部分,所以每次实际上只计算了整个批量的一半,所以上面会出现除以 2 2 2。
2.3 Potential Faster-Than-Fixed-Cost Communication
当通信时间降到固定计算时间之下时,那么此时上面的计算公式将不再适用。此时整个系统的限制在于固定的计算时间,通信很难饱和。此时在使用双缓冲区就没有什么意义了,因为此时的通信带宽是足够的,而双缓冲区是为了缓解通信的压力。
2.4 Relation to Hogwild/ASGD
异步更新能够增加并行度,但是并没有改变基础性的东西。
3 1-Bit SGD with Error Feedback
将需要交换的数据进行压缩,将其压缩为一位的数据,这样能够减少数据的交换量,从而减少通信的瓶颈。
不过如果只是简单的将数据压缩成一位,然后任由 S G D SGD SGD进行缺失数据的修正,那么这是很容易导致模型发散的。
为了防止模型的发散提出了错误反馈机制,该机制并不会将丢失的精度给丢弃掉,而是会对其进行记录下一次更新的时候需要同时考虑之前丢失的精度。
整个过程可以用下面的公式来表述:
G q u a n t ( t ) = Q ( G ( t ) + Δ ( t − N ) ) Δ ( t ) = G ( t ) − Q − 1 ( G q u a n t ( t ) ) \begin{aligned} &G^{quant}(t) = Q(G(t)+\Delta(t-N))\\ &\Delta(t)=G(t)-Q^{-1}(G^{quant}(t)) \end{aligned} Gquant(t)=Q(G(t)+Δ(t−N))Δ(t)=G(t)−Q−1(Gquant(t))
参数说明:
- G G G:本轮计算出来的梯度。
- Q Q Q:量化函数,具体的,如果输入大于 0 0 0,则量化成 1 1 1,输出小于 0 0 0,则量化成 0 0 0,这样就可以将原本需要用 32 32 32位表示的梯度只用 1 1 1位进行表示。
- G q u a n t G^{quant} Gquant:量化后的梯度。
- Q − 1 Q^{-1} Q−1:反量化函数,输入只能是 0 0 0或者 1 1 1,当输入是 1 1 1的时候输出是 1 1 1,当输入是 0 0 0的时候,输出是 − 1 -1 −1。
- Δ \Delta Δ:梯度误差。
上述的过程就是压缩之后会记录压缩误差,压缩误差在下一轮的时候继续参与压缩。
3.1 Aggregating the Gradients
本文使用的聚合算法的复杂度关于结点个数是 O ( 1 ) O(1) O(1)(这里的描述有一点奇怪,但是大概的意思就是每个结点聚合的数据量为所有梯度的一部分)。
具体的过程如下:
- 如果有 K K K个结点,那么每个结点会处理 1 K \frac 1 K K1的梯度。
- 每个结点会从其他的 K − 1 K-1 K−1个结点接收属于自己处理的梯度部分。
- 收到后结点聚合自己负责的这一部分梯度。
- 聚合完成后分发给其他所有结点。
4 System Description
根据最佳节点个数的计算公式,至少存在三种方法能够提升并行度:(也就是通过改变变量让公式的结果变大)
- 提升 N N N:增加每轮处理的批量个数。
- 增加 Z Z Z:增加压缩度。
- 减少固定计算时间(固定计算时间减少意味着相同的计算时间中有更多的时间用于了梯度的计算)
本文的压缩算法属于第二种方法。
对于方法一本文的实验发现 N N N的增加是有一个限制的,当增大的太多时,整个模型可能会发散。同时本文发现一个成熟的模型能够处理的 N N N的值要大一些。
为了防止模型发散的情况,本文后面的实验会隔一定的时间增大 N N N而不是一开始就将 N N N设置的很大,这样能够防止模型发散或是准确率下降严重。
除了这些之外,学习率也是采用递减的方式。
最后使用了 A d a G r a d AdaGrad AdaGrad进行优化,这样模型会收敛的更快,同时这也使得批量大小能够进一步的增加。
本文的系统可以在三个不同的地方使用 A d a G r a d AdaGrad AdaGrad:
- 在本地梯度量化之前;(可能会导致不一致性,但是可能对量化有益)
- 聚合结束后的数据交换期间;(可能会与量化冲突)
- 使用动量平滑后;(可以减少内存的使用和固定计算时间但是效果不好,因为峰值被动量磨平了)
作者发现 A d a G r a d AdaGrad AdaGrad在量化后动量平滑前使用效果最好。
为了也利用方法 3 3 3,本文在使用数据并行的同时,在多 G P U GPU GPU上做了模型并行。
5 Experimental Results
实验的细节可以在原文中找到。
论文的实验做的都是语音识别相关的,所以并没有证明所有方面都适合该方法。
5.1 Cost Measurements
这一部分主要测量几个耗时。
T c o m m f l o a t T^{float}_{comm} Tcommfloat大约为 3 − 10 m s 3-10ms 3−10ms$。
T c a l c p o s t + T c a l c u p d = 18.2 m s T^{post}_{calc}+T^{upd}_{calc}=18.2ms Tcalcpost+Tcalcupd=18.2ms。
T c a l c u p d ≈ 9 T^{upd}_{calc}\approx9 Tcalcupd≈9。
T a b l e 1 Table\ 1 Table 1给出了 T c a l c f r m T^{frm}_{calc} Tcalcfrm与批量大小的关系。
5.2 Effect of 1-Bit Quantization
T a b l e 2 Table\ 2 Table 2展示了不同的模式下的三种方式的对比,可以看出 1 − b i t 1-bit 1−bit的效果并没有受到太大的影响。
5.3 When to do AdaGrad?
T a b l e 3 Table\ 3 Table 3展示了在不同环节使用 A d a G r a d AdaGrad AdaGrad进行优化对于准确率的影响,可以看出应该在动量平衡之前使用错误率会更低,作者指出这可能是因为动量平滑减少了梯度的标准差从而导致 A d a G r a d AdaGrad AdaGrad的效果不好。
p a r t i a l g r a d i e n t s partial\ gradients partial gradients代表量化前各个结点自身的梯度, a g g r e g a t e g r a d i e n t aggregate\ gradient aggregate gradient代表量化后聚合的梯度。
5.4 Impact of MB-Size Selection and Double Buffering
这一部分讲的是选取特别大的批量的时间耗时。从 T a b l e 3 Table\ 3 Table 3中每一栏花费的时间可以得到一些信息。
第二行的时间比第一行小主要是因为:第一行的实验选取了较大的批量大小。
第四行增加到了四个结点进行数据进行,同时每个结点进行两个 G P U GPU GPU的模型并行导致整个的时间下降到 8.1 h 8.1h 8.1h.
第五行相比于第四行的下降则是因为第四行的实验每 24 h 24h 24h选择一次新的批量大小,而第五行每 72 h 72h 72h选择一次。
第六行与第五行对比可以发现在这种情况下并没有进一步带来速度的提升,不过当使用双重缓冲区了之后自动选择的批量大小将会有所下降。
第七行代表的是什么意思本人并没有看懂。
T a b l e 4 Table\ 4 Table 4展示了固定不同的批量大小下双重缓冲对于速度的影响。
5.5 Combination with Model Parallelism
下图展示了不同的数据并行与模型并行的速率,可以发现在显卡数量相同的情况下,只有 8 × 2 8\times2 8×2的时候模型并行提升了速率,在大多数情况下模型并并没有提升速率,这代表着在大多数情况下模型并行没有数据并行高效,这是因为如果使用模型并行则不能很好的利用缓存机制,模型并行的时候,每交换一次数据缓冲就会失效,而如果是更多的使用数据并行,那么就会减少一定缓存失效的次数。
5.6 Training a Production-Scale Model
表格中的 r e a l i g n realign realign代表将数据进行对齐。
6 Conclusion
将通信传播的通信量从 32 32 32位降为 1 1 1位,同时提出误差反馈机制保证模型的收敛。
一位的量化能够大大降低通信量从而减少通信所带来的瓶颈。
超出认知的数据压缩 用1-bit数据来表示32-bit的梯度 语音识别分布式机器学习 梯度压缩 论文精读相关推荐
- 【大数据】Hadoop—— 三大核心组件理论入门 | 完全分布式集群搭建 | 入门项目实战
文章目录 前言 大数据概述 时代背景 4V特点 大数据思维 核心技术 储存 计算 相关技术 云计算 物联网 Hadoop简介 简介 版本之分 项目生态结构 安装和部署 HDFS 简介 集群结构 实现目 ...
- 大数据的新机遇:我的分布式机器学习故事
from :http://www.thebigdata.cn/JiShuBoKe/13723.html 一.前言 从毕业加入Google 开始做分布式机器学习,到后来转战腾讯广告业务,至今已经七年了. ...
- 联邦学习【分布式机器学习技术】【①各客户端从服务器下载全局模型;②各客户端训练本地数据得到本地模型;③各客户端上传本地模型到中心服务器;④中心服务器接收各方数据后进行加权聚合操作,得全局模型】
随着计算机算力的提升,机器学习作为海量数据的分析处理技术,已经广泛服务于人类社会. 然而,机器学习技术的发展过程中面临两大挑战: 一是数据安全难以得到保障,隐私数据泄露问题亟待解决: 二是网络安全隔离 ...
- 你在数据预处理上花费的时间,是否比机器学习还要多?
你在数据预处理上花费的时间,是否比机器学习还要多? 本文作者:三川 2017-05-31 19:05 导语:IBM 模型架构专家,向大家介绍一个新出世的 Python 数据预处理神器--nuts-ml ...
- 分布式机器学习系统笔记(一)——模型并行,数据并行,参数平均,ASGD
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 文章索引::"机器学 ...
- 最新人工智能、大数据与复杂系统一月特训班_机器学习入门到精通
课程简介:从Alpha-GO到无人驾驶,人工智能AI结合大数据发挥出惊人功效的场景越来越多.如何从零开始真正入门这个领域?人工智能.大数据与复杂系统一月特训班可以帮到您! 混沌巡洋舰讲师团 来自巴黎高 ...
- 2021年全国大学生数据统计与分析竞赛赛题B—基于机器学习的用户消费行为预测(上)
2021年全国大学生数据统计与分析竞赛赛题B-基于机器学习的用户消费行为预测(上) 一.赛题B:用户消费行为价值分析 二.基于机器学习的用户消费行为预测 1.数据简介及清洗 (一)数据简介 (二)数据 ...
- pandas使用melt函数将宽表变换为窄表、id_vars参数指定原宽表聚合数据列、value_vars参数指定需要被压缩的数据列(单个、多个)、var_name指定压缩后数据列的名称
pandas使用melt函数将宽表变换为窄表.id_vars参数指定原宽表聚合数据列.value_vars参数指定需要被压缩的数据列(单个.多个).var_name指定压缩后数据列的名称.value_ ...
- 耐基梅隆大学教授邢波:Petuum,大数据分布式机器学习平台
2014年12月12-14日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中科院计算所与CSDN共同协办,以推进大数据科研.应用与产业发展为主旨的 2014中国大数据技术大会 (Big ...
最新文章
- 吴忠强:刷LeetCode的正确姿势!
- 搞死了 报错【libc-client.a: could not read symbols: ...
- escape、encodeURI 、encodeURIComponent 编码与解码
- 大话设计模式—观察者模式
- ASP.NET与ASP.NET Core用户验证Cookie并存解决方案
- 信息学奥赛C++语言:插队问题
- 合并模块和安装文件的区别
- LQR、Stochastic Bandits、Bayesian Bandits、Contextual Bandits与基于模型的强化学习浅析
- 【优化算法】可变步长LMS算法(VSS-LMS)【含Matlab源码 317期】
- android mt4 macd,超准确的4小时MACD交易策略
- 体育直播android,500体育直播
- Via浏览器怎么查看网页源码
- SQL查询语句(从单表到多表、从简单到复杂)
- EventBus 最简易的使用方式
- css3加载中loading代码js特效大全
- 相机镜头上的所有字母,首字母缩写和数字代表什么?
- Centos7 更改Apache默认网站目录
- 关于SPING与EJB的胡言乱语
- python中文文本分词_SnowNLP:?中文分词?词性标准?提取文本摘要,?提取文本关键词,?转换成拼音?繁体转简体的 处理中文文本的Python3 类库...
- 服务器ip多有什么作用是什么,使用多ip服务器有什么优势呢?
热门文章
- LOOP GROUP BY 分组循环的使用方法小栗子
- Maven项中的webapp下的静态页面无法访问报404(记录自己的错误)
- 解密马云“永不放弃”字条的接头暗号
- 用JavaScript实现树的遍历
- 信息提取中分块或表达式
- 如何把一个微信公众号运营到可以养活自己?
- python中from是什么意思_听说你还在找python中import与from方法?
- Linux下使用VisualVm通过JMX连接远程机器
- 2021年中国智慧菜场行业研究报告 附下载
- matlab表示函数波形,MATLAB绘制典型型号波形