博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Baidu All Reduce
阅读量:5170 次
发布时间:2019-06-13

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

Baidu All Reduce,即Ring All Reduce。Ring All Reduce技术在高性能计算领域很常用,2017年被百度用于深度学习训练。

朴素All Reduce的通信时间随GPU节点数线性增长。Ring All Reduce的通信时间跟GPU节点数无关,只受限于GPU间最慢的连接。 

Ring All Reduce包含两步:scatter reduce和all gather

1)scatter reduce:GPU交换数据,每个GPU得到最后结果的一部分(chunk)

假设要实现数组间对应元素求和,GPU节点数为N,每个GPU都有一个相同size的数组。

1、每个GPU把自己的数组划分成N份

2、每个GPU做N-1次迭代,每次迭代:GPU向它的右相邻节点发送一个chunk,同时从它的左相邻节点接收一个chunk并跟本地对应chunk累加。每次迭代每个GPU发送和接受的chunk都不一样。第N个GPU,一开始发送chunk N并且接收chunk N-1,然后不断向后处理。每一次迭代都把上一次迭代收到的chunk,发送出去。 

2)all gather:GPU交换chunk,每个GPU得到最后结果。

经过scatter reduce,每个GPU的某些chunk已经是最后结果了。all gather类似scatter reduce(也是N-1次迭代的发送和接收),但不是把接收到的chunk跟本地chunk累加,而是覆盖本地chunk 第N个GPU,一开始发送第N+1个chunk,并且接收chunk N。在之后的迭代中,总是把上一次迭代接收到的chunk,发送出去。 

每个GPU的通信数据量:D = 2(N-1)S/N

通信时间:T = 2(N-1)S/(NB),可以看出,跟GPU节点数无关

每次训练迭代(跟上面的迭代不是一回事),每个GPU前向传播计算误差,然后反向传播计算每个weight的梯度。反向计算梯度是从输出层的权值到输入层的权值,意味着,前面层的梯度没算出来时,后面层的梯度已经可用。因为All Reduce可以操作参数子集,所以在一些梯度还没算出来时,就可以开始All Reduce了。通信和计算之间的overlap取决于网络的实际优化情况。

 

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

你可能感兴趣的文章
第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
查看>>
AO中的空间关系
查看>>
上海航信电子发票对接
查看>>
Java学习笔记(六)数据的操作(增、删、改的操作)
查看>>
前端性能优化
查看>>
leetcode 108 将有序数组转换为二叉搜索树 (Convert Sorted Array to Binary Search Tree)
查看>>
c 语言申明头文件和实现分开简单例子
查看>>
flex弹性布局学习总结
查看>>
web标准
查看>>
vue项目下,webpack.js/package.json配置
查看>>
[POJ3177]Redundant Paths
查看>>
文字和表单(checkbox/radio)元素垂直对齐方法,兼容Firefox和IE。
查看>>
课后阅读2
查看>>
ETL开发面试
查看>>
Spring静态资源解决方案
查看>>
MYSQL中的存储过程
查看>>
三、Oracle 游标、存储过程、存储函数、触发器
查看>>
7.28-说说对javaweb的感想吧
查看>>
[九省联考2018] 一双木棋 chess
查看>>
swiper控件(回调函数)
查看>>