限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

浅谈 Tensorflow 分布式架构:ring all-reduce 算法

  • 2019-12-02
  • 本文字数:1177 字

    阅读完需:约 4 分钟

浅谈Tensorflow分布式架构:ring all-reduce算法

首先还是先回顾下参数同步更新和异步更新的区别:


同步更新模式下,所有 GPU 在同一时间点与参数服务器交换、融合梯度;异步更新模式下,所有 GPU 各自独立与参数服务器通信,交换、融合梯度。


  • 异步更新通信效率高速度快,但往往收敛不佳,因为一些速度慢的节点总会提供过时、错误的梯度方向。可通过上一篇介绍的 Stale Synchronous Parallel Parameter Server 方法缓解该问题。

  • 同步更新通信效率低,通常训练慢,但训练收敛稳定,因为同步更新基本等同于单卡调大 的 batch size 训练。

  • 但是传统的同步更新方法(各个 gpu 卡算好梯度,求和算平均的方式),在融合梯度时,会产生巨大的通信数据量,这种通信压力往往在模型参数量很大时,显得很明显。因此我们需要找到一种方法,来解决同步更新的网络瓶颈问题。其中最具代表性的一种方法就是:ring all-reduce。


##parameter server 框架下同步更新方式,网络瓶颈定量分析


这边假设有 1 个 server 端(存放参数),10 个 worker 端(计算梯度),模型是 Deep Speech 2,参数量 300M,相当于 1.2 G 的大小的内存数据(300M * sizeof(float))。假设网络带宽 1G bytes/s (万兆网卡),10 卡同步更新,需要 10.8 s 完成参数 Send。在单 ps 节点、有限带宽环境下,通信时间随着 GPU 数量的增加而线性增长,很难想象一个 10 卡的集群每训练一个 batch 都需要等待 10 ~ 20s 来同步参数!通信时延几乎完全覆盖掉了 GPU 并行计算节节省下的计算时间。当然也可以通过一些技巧来缓解通信压力,比如增加 server 的个数。

Ring Allreduce 框架下同步更新算法

定义 GPU 集群的拓扑结构:



每个 GPU 只从左邻居接受数据、并发送数据给右邻居。


算法主要分两步:


  1. scatter-reduce:会逐步交换彼此的梯度并融合,最后每个 GPU 都会包含完整融合梯度的一部分。

  2. allgather:GPU 会逐步交换彼此不完整的融合梯度,最后所有 GPU 都会得到完整的融合梯度


scatter-reduce


举例:数组求和



Step1:将数组在每个 GPU 上都分块



Step2:N-1 轮的 scatter-reduce,每一轮中,每个 GPU 将自己的一个 chunk 发给右邻居,并接收左邻居发来的 chunk,并累加。






Allgather

和 scatter-reduce 操作类似,只不过将每个 chunk 里面的操作由累加值变为替换。







通信代价分析:每个 GPU 在 Scatter Reduce 阶段,接收 N-1 次数据,N 是 GPU 数量;每个 GPU 在 allgather 阶段,接收 N-1 次 数据;每个 GPU 每次发送 K/N 大小数据块,K 是总数据大小;所以,Data Transferred=2(N−1)*K/N ,随着 GPU 数量 N 增加,总传输量恒定。也就是理论上,随着 gpu 数量的增加,ring all-reduce 有线性加速能力。


下面一篇文章,将给大家介绍 tensorflow 中是如何实现 ring all-reduce 算法的。


参考文献:


https://zhuanlan.zhihu.com/p/34172340


http://andrew.gibiansky.com/


本文转载自 Alex-zhai 知乎账号。


原文链接:https://zhuanlan.zhihu.com/p/69797852


2019-12-02 16:243771

评论

发布
暂无评论
发现更多内容

聪明人的训练(十二)

Changing Lin

4月日更

积极研发区块链技术落地应用业务 这家A股上市企业试水云算力挖矿

CECBC

区块链

思维导图学《Java性能权威指南》

Yano

Java 性能 思维导图

混音新手必备软件:FL Studio,用它简单制作混音

奈奈的杂社

极智网络告警关联规则挖掘

鲸品堂

方法论 解决方案

区块链电子政务——不动产综合服务平台

电微13828808271

大数据前置知识-服务器及磁盘

大数据技术指南

大数据 4月日更

跟着源码学IM(八):万字长文,手把手教你用Netty打造IM聊天

JackJiang

Netty 即时通讯 IM

程序员去大公司面试,我的头条面试经历分享,搞懂这些直接来阿里入职

欢喜学安卓

android 程序员 面试 移动开发

SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践

阿里巴巴云原生

Java 运维 云原生 中间件 Arthas

Hadoop的发展及其架构

五分钟学大数据

hadoop 4月日更

专业开发者眼中的HarmonyOS:专访资深软件工程师李宁

Geek_283163

华为

“区块链+电子商务”,电商能否再创辉煌?

电微13828808271

Redis单线程已经很快,为何6.0要引入多线程?有啥优势?

Java架构师迁哥

BERT和GAN咋压缩,且看咱PaddleSlim新利器—— OFA

百度大脑

百度 飞桨

视频云全球创新挑战赛 —— 视频目标分割经典算法解析

阿里云CloudImagine

阿里云 计算机视觉

面试官:请说说什么是BFC?大白话讲清楚

蛙人

CSS 大前端

android开发面试题,字节跳动Android三面凉凉,手慢无

欢喜学安卓

android 程序员 面试 移动开发

攻击区块链网络的都有哪些方式方法

CECBC

区块链

回归主流:区块链新大门的“密钥”

CECBC

区块链

如何将区块链打造为城市底层基础设施

CECBC

区块链

企业如何做数字化转型?想要资产状况及时把控,它的作用至关重要!

一只数据鲸鱼

数字化 数据可视化 资产管理

一文读懂容器存储接口 CSI

阿里巴巴云原生

容器 云原生 k8s 存储 调度

用 JavaScript 实现三次贝塞尔动画库 - 前端组件化

三钻

JavaScript 大前端 动画 组件化

情指勤指挥调度平台搭建,公安重点人员管控平台搭建

Javacv 音视频小工具 - 下载抖音无水印视频

张音乐

Java 音视频 ffmpeg 抖音 javacv

技术人如何调研和选型第三方 SDK?全文干货

融云 RongCloud

EGG Network阿凡提 公链EFTalk全球首创POTP二叉交叉共识机制

币圈那点事

阿里高级架构师纯手打832页Java全栈知识点笔记,吃透后成功七面上岸滴滴!

Java架构追梦

Java 阿里巴巴 架构 面试 成长笔记

26天吃透算法笔记,面试字节,面试官朝我比了个“ok”

比伯

Java 编程 架构 算法 技术宅

交易所跟单软件搭建,合约跟单系统开发

浅谈Tensorflow分布式架构:ring all-reduce算法_语言 & 开发_Alex-zhai_InfoQ精选文章