原文:https://zhuanlan.zhihu.com/p/79030485
从事分布式深度学习相关工作的同学,应该都频繁地用到了AllReduce(规约)操作。
但是对于训练框架中集成的AllReduce相关操作,其背后实现的原理是什么?
除了最近几年名声大噪的Ring AllReduce是否还有其他的AllReduce算法?
他们各自的性能开销如何?如何取舍?
本文尝试从一个较为全面的角度来展现AllReduce算法的前世今生,既分析经典算法,也介绍发展中的新秀。
MPI中的AllReduce算法
其实说到AllReduce,很多人脑海里的第一反应都是MPI_AllReduce。作为集合通信中的元老,和高性能计算领域的通信标准,在MPI_AllReduce这个通信原语背后,MPI中实现了多种AllReduce算法。
以openMPI源码为例,里面实现了多种allreduce的算法。具体的算法选择在
ompi/mca/coll/tuned/coll_tuned_decision_fixed.c