INTERSPEECH 2015 | Scalable Distributed DNN Training Using Commodity GPU Cloud Computing
一般来说,全连接层的前向和后向传递所需的计算量与权重的数量成正比。此外,数据并行训练中所需的带宽与可训练权重的数量成比例。因此,随着每个节点计算速度的提高,所需的网络带宽也随之增加。这篇文章主要是根据阈值进行梯度的稀疏化和量化操作,从而降低分布式训练中的通信开销。稀疏化指的是只传输那些比较重要的梯度(例如绝对值较大的梯度),而量化则是使用较少的比特来表示原始梯度,二者的差别由下图描述[1]:

本文提出的梯度压缩方法基于以下两个观点:(1)很多加速SGD的方法,包括minibatch SGD、动量法、双缓冲以及异步SGD,都可以在某种程度上视为延迟更新的变体;(2)节点上的子梯度是非常稀疏的,这就意味着只有少量的权值需要更新,换句话说,我们只需要传递那些对权值更新产生较大作用的梯度,而不再传输其余的梯度,这样就能降低带宽占用。
因为只传输那些大于某一阈值的梯度,所以我们必须记住这些梯度的索引,以在接收端对其进行重构。在实现上,我们可以使用字典存储索引和对应的梯度值。为了保证精度,我们并不直接在原始梯度上进行操作,而是操纵一个名为梯度残差的东西。在处理每个minibatch时,我们首先将上一次迭代的梯度残差与本次迭代的原始梯度相加,得到本次迭代的梯度残差。随后,对于残差向量中的每个元素,如果该元素大于正阈值,就将该元素的索引与正阈值编码进字典中,再从对应的残差元素中减去阈值;如果该元素小于负阈值,就将该元素的索引与负阈值编码进字典中,再从对应的残差元素中加上阈值。对于那些绝对值小于阈值的残差元素,我们不再传输它们。但是,随着迭代次数的增加,这些元素可能在某次迭代时就超过了阈值,从而完成一次更新。在某种程度上来说,这就是一种延迟更新策略。算法伪代码如下所示:

在实现中,我们将每个梯度(残差)元素编码为两个数字:整数元素索引和浮点梯度元素。为了进一步降低通信开销,本文使用1比特来编码梯度元素,使用31比特编码元素索引,这样就使用4个字节编码了1个整数和1个浮点数。为了保证模型精度,同样需要使用1 Bit SGD中提到的误差补偿技术。需要注意的是,本文使用的是对等结构而非参数服务器架构,而且整个训练过程中只进行梯度的传输,不进行权值的传输。为了降低GPU与OS之间的I/O瓶颈,作者还使用了CUDA中的某些字符串压缩函数。
INTERSPEECH 2015 | Scalable Distributed DNN Training Using Commodity GPU Cloud Computing的更多相关文章
- Meet Dgraph — an open source, scalable, distributed, highly available and fast graph databas
https://dgraph.io/ Meet Dgraph — an open source, scalable, distributed, highly available and fast gr ...
- Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--转
原文地址:https://dzone.com/articles/scalable-distributed-systems-using-akka-spring-boot-ddd-and-java Whe ...
- 论文阅读笔记六十四: Architectures for deep neural network based acoustic models defined over windowed speech waveforms(INTERSPEECH 2015)
论文原址:https://pdfs.semanticscholar.org/eeb7/c037e6685923c76cafc0a14c5e4b00bcf475.pdf 摘要 本文研究了利用深度神经网络 ...
- (转)分布式深度学习系统构建 简介 Distributed Deep Learning
HOME ABOUT CONTACT SUBSCRIBE VIA RSS DEEP LEARNING FOR ENTERPRISE Distributed Deep Learning, Part ...
- https ddos检测——研究现状
from: https://jyx.jyu.fi/bitstream/handle/123456789/52275/1/URN%3ANBN%3Afi%3Ajyu-201612125051.pdf 相关 ...
- 77-CCI,Commodity Channel Index,商品通道指标.(2015.7.1)
CCI,Commodity Channel Index 商品通道指标 Channel Index,商品通道指标.(2015.7.1)" title="77-CCI,Commodit ...
- 分布式系统(Distributed System)资料
这个资料关于分布式系统资料,作者写的太好了.拿过来以备用 网址:https://github.com/ty4z2008/Qix/blob/master/ds.md 希望转载的朋友,你可以不用联系我.但 ...
- [专题论文阅读]【分布式DNN训练系统】 FireCaffe
FireCaffe Forrest N. Iandola FireCaffe: near-linear acceleration of deep neural network training on ...
- Toward Scalable Systems for Big Data Analytics: A Technology Tutorial (I - III)
ABSTRACT Recent technological advancement have led to a deluge of data from distinctive domains (e.g ...
随机推荐
- nginx+php环境搭建详解(Linux)
今天在内网环境下,给linux主机安装nginx+php环境,由于是内网环境,只能手动解压缩包进行安装,在这过程中我也着实遇到了一些问题(困扰了我许久),还好最后搭建环境成功了,所以写篇博客记录一下, ...
- linux 安装 Logtash 同步mysql数据到Elasticsearch
官网下载Logtash 离线安装包 下载地址 https://www.elastic.co/cn/downloads/logstash 需要注意版本与es 对应 新建配置文件 新建文件夹 mkdir ...
- 【记录一个问题】android下opencl中的event.getProfilingInfo()测速时间并不准确
使用了类似的代码来做android下opencl的时间测试: cl::CommandQueue queue(context, devices[0], CL_QUEUE_PROFILING_ENABLE ...
- 雷柏鼠标vt350Q配对
vt350q 闲鱼捡了个垃圾vt350q,23元,无接收器,不知道好坏 鼠标线 拿到手插上线没法用,后来用了罗技anywhere2s的线可以,原来usb鼠标线是五根. 鼠标毛病 使用后发现滚轮有时候乱 ...
- GUI系统
通常情况下,一般使用QT来制作Linux系统的GUI,但是由于我们团队对于游戏有着狂热的热爱,以及有游戏的相关开发经验. 在做过ROS与Arduino通信,Unity3d与Arduino通信后,我感觉 ...
- synergy最佳解决方案——barrier
synergy最佳解决方案--barrier 不知道大家有没有一套键盘鼠标控制多台电脑的需求,主流的硬件或说软件有大神整理如下: 软件方案: Windows 之间:Mouse Without Bo ...
- python -m详解
温馨提示: 本篇演示环境是Python 3.8 先python --help看下python -m参数的解释: -m mod : run library module as a script (ter ...
- 从新建文件夹开始构建ShadowPlay Engine游戏引擎(6)
本篇序言 在经历了为期很长时间的调试以及思维纠错后,我们可以开始实现我们的内存管理模块了,我在前面说过如果各位要继续跟着学习的话可能会需要一定的计算机组成原理和操作系统的知识,不过在莽代码的过程中,我 ...
- python_f-string格式化字符串文字
一.简介 f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法. f-string在形式上是以 f 或 F ...
- Vue之JavaScript基础(闭包与原型链)
闭包 定义:能够访问另一个函数作用域的变量的函数. 作用:可以通过闭包,设计私有变量及方法 实例: function outer() { var a = '变量1' var inner = funct ...