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 ...
随机推荐
- springBoot--01--快速入门
笔记源码:https://gitee.com/ytfsL/springboot 1.1 原有Spring优缺点分析 1.1.1 Spring的优点分析 Spring是Java企业版(Java Ente ...
- MicroPython 8266 配置
MicroPython 8266 配置 刷固件 下载固件 MicroPython - Python for microcontrollers 从以上网址下载固件,本文下载的是esp8266-20210 ...
- 论文解读GCN 1st《 Deep Embedding for CUnsupervisedlustering Analysis》
论文信息 Tittle:<Spectral Networks and Locally Connected Networks on Graphs> Authors:Joan Bruna.Wo ...
- 内核内存分配器SLAB和SLUB
内核分配器的功能 在操作系统管理的虚拟内存中,用于内存管理的最小单位是页,大多数传统的架构是4KB.由于进程每次申请分配4KB是不现实的,比如分配几个字节或几十个字节,这时需要中间机制来管理页面的微型 ...
- Discuz!X ≤3.4 任意文件删除漏洞
Discuz!X ≤3.4 任意文件删除漏洞 简述 漏洞原因:之前存在的任意文件删除漏洞修复不完全导致可以绕过. 漏洞修复时间:2017年9月29日官方对gitee上的代码进行了修复 漏洞原理分析 在 ...
- Android学习笔记3
(5)练习做一个实现两个数相乘的APP ①.java代码: //MainActivity.java package com.example.hello; import android.content. ...
- golang中的pair
package main import "fmt" type Reader interface { ReadBook() } type Writer interface { Wri ...
- 开发者的瑞士军刀「GitHub 热点速览 v.22.04」
Swiss Army knife 可以说是本周的关键词了,多个项目采用该词来描述它的特性:像是能全方位解决浏览器"网络"操作的 CyberChef 方便你进行数据加密.解编码,还有 ...
- IDEA2020.1破解
IDEA2020.1破解 安装 下载idea idea官方下载地址:https://www.jetbrains.com/webstorm/download/other.html 下载破解插件 链接:h ...
- ansible roles实践——服务器初始化
1.服务器初始化可以做哪些工作 关闭selinux ntp同步时间 修改dns为自建dns 配置ssh互信 修改yum源 设置主机名 内核参数优化 安装jdk 2.roles编写