码力全开 / Ring算法简述

Created Sat, 03 Jan 2026 16:01:12 +0800 Modified Sat, 03 Jan 2026 19:20:22 +0800
506 Words 1 min

Ring算法是一种基于环形拓扑结构的分布式计算算法,其核心思想是将系统中的节点(如进程或计算单元)组织成一个逻辑环,每个节点仅与环上的直接邻居节点(左邻和右邻)通信,信息沿环的固定方向依次传递,从而实现协作。

百度在2018年提出一种在深度学习场景下高效的all reduce算法,称为Ring all reduce。整个通信过程可以分为reduce-scatter和all gather两个阶段。

假设我们有如下5个节点:

GPU 0: a0 b0 c0 d0 e0
GPU 1: a1 b1 c1 d1 e1
GPU 2: a2 b2 c2 d2 e2
GPU 3: a3 b3 c3 d3 e3
GPU 4: a4 b4 c4 d4 e4

其reduce-scatter过程如下,第1步为:

GPU 0: a0 b0 c0 d0 e0+e4
GPU 1: a0+a1 b1 c1 d1 e1
GPU 2: a2 b1+b2 c2 d2 e2
GPU 3: a3 b3 c2+c3 d3 e3
GPU 4: a4 b4 c4 d3+d4 e4

而第2步为:

GPU 0: a0 b0 c0 d0+d3+d4 e0+e4
GPU 1: a0+a1 b1 c1 d1 e1+e0+e4
GPU 2: a0+a1+a2 b1+b2 c2 d2 e2
GPU 3: a3 b1+b2+b3 c2+c3 d3 e3
GPU 4: a4 b4 c2+c3+c4 d3+d4 e4

而第3步为:

GPU 0: a0 b0 c0+c2+c3+c4 d0+d3+d4 e0+e4
GPU 1: a0+a1 b1 c1 d1+d0+d3+d4 e1+e0+e4
GPU 2: a0+a1+a2 b1+b2 c2 d2 e2+e1+e0+e4
GPU 3: a0+a1+a2+a3 b1+b2+b3 c2+c3 d3 e3
GPU 4: a4 b1+b2+b3+b4 c2+c3+c4 d3+d4 e4

最后我们得到:

GPU 0: a0 b0+b1+b2+b3+b4 c0+c2+c3+c4 d0+d3+d4 e0+e4
GPU 1: a0+a1 b1 c1+c0+c2+c3+c4 d1+d0+d3+d4 e1+e0+e4
GPU 2: a0+a1+a2 b1+b2 c2 d2+d1+d0+d3+d4 e2+e1+e0+e4
GPU 3: a0+a1+a2+a3 b1+b2+b3 c2+c3 d3 e3+e2+e1+e0+e4
GPU 4: a0+a1+a2+a3+a4 b1+b2+b3+b4 c2+c3+c4 d3+d4 e4

之后就要开始进行all-gather进行广播了。而执行完一个环后,所有节点均有完整的备份。因此,Ring All Reduce进行2次环就完成整个数据的同步。

参考文章:

https://www.zhihu.com/question/57799212 https://blog.csdn.net/weixin_44966641/article/details/149980684 https://www.bilibili.com/video/BV1fg41187rc/

如果喜欢这篇文章或对您有帮助,可以:[☕] 请我喝杯咖啡 | [💓] 小额赞助