参考这篇文章:
https://blog.csdn.net/dpppBR/article/details/80445569
谈一下我的理解,在GPU的机器学习过程中,传统的做法有类似MapReduce的地方,把数据分成若干个小块,每个小块在一个GPU上训练(Map),然后把训练得到的神经网络参数汇总到一台机器计算参数的平均值(Reduce),最后又会把计算好的参数返还给。
这看起来很合理,但是实际过程中一个神经网络的参数可能有上万个之多,数据量非常庞大,把这些参数汇总到一台Reducer上就要花费巨大的时间。而AllReduce正是为了解决这个问题而诞生的。
通过把所有节点组成一个环形,每台节点都会经手数据,最后每个节点上就有了全部的参数,所以从这个角度看过去所有的参数汇总到了每一台节点上,每一台节点都是reducer。故称Ring AllReduce。