Reduce-Scatter:多对多的数据规约和分散 4 All-Reduce:Reduce-Scatter与All-Gather的黄金组合 核心功能:将全局数据规约后同步至所有节点,等价于Reduce-Scatter + All-Gather。 工业级实现:主流框架(如PyTorch DDP、DeepSpeed)采用Ring All-Reduce,因其通信效率与节点数无关。 4.1 All-Reduce算法对比与选型建议 当前主...
- scatter阶段,将规约后的数据分片分发到各个节点,假设分发的数据量为规约后的数据量(假设为 $m'$...
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/(...
传统数据数据并行在每一步 (step/iteration) 计算梯度后,需要进行一次 AllReduce 操作来计算梯度均值,目前常用的是 Ring AllReduce,分为 ReduceScatter 和 AllGather 两步,每张卡的通信数据量(发送+接受)近似为。 我们直接分析,每张卡只存储的优化器状态和梯度,对于来说,为了计算它这梯度的均值,需要进行一次 Reduce...
具体的 ReduceScatter 操作如下,每个设备(GPU)发送一部分数据给下一个设备,同时接收上一个设备的数据并累加。这个过程执行 K-1 步,ReduceScatter 后每个设备都包含一部分数据的 Sum: 具体的 AllGather 操作如下,每个设备(GPU)将其持有的部分结果发送给下一个设备,同时接收上一个设备的部分结果,逐步汇集完整的结果...
第一阶段通过(N-1)步,让每个节点都得到1/N的完整数据块。每一步的通信耗时是α+S/(NB),计算耗时是(S/N)*C。 这一阶段也可视为scatter-reduce。 第二阶段通过(N-1)步,让所有节点的每个1/N数据块都变得完整。每一步的通信耗时也是α+S/(NB),没有计算。这一阶段也可视为allgather。
Ring算法在做AllReduce算法时,分两个环节,分别是Reduce-scatter和AllGather。 递归加倍算法,步骤少,整合小数据时性能好,整合大数据块时性能不理想,容易出现时延抖动。 Rabenseifner算法,步骤数相对较少,发送数量量少,聚合大数据的性能较好。 上面简单总结了一下各种AllReduce算法实现,由于AllReduce算法的优化空间越来越少...
通信量和冗余显存之间的关系 上文只分析了通信量,而没有分析对设备显存的占用量。以图 3 为例,每个设备上的输入矩阵大小是 V,但经过 reduce-scatter 之后每个设备上只需要 V/p大小的显存,也就是 (p−1)V/p的空间是冗余的,因为一共有 p 个设备,所以整个集群中有 (p-1)V 的显存是可以节省下来的。注...
Reduce-scatter 是一种并行计算中的数据操作和通信原语,用于将一个输入数组的数据进行全局 reduce 操作后再进行 scatter 操作。 1.2 reduce-scatter 的作用 Reduce-scatter 主要用于并行计算中的数据并行操作,可以将一组数据分散到不同的处理单元上,并对这些数据进行局部 reduce 操作,然后将结果汇总到一个处理单元上。
每个 GPU 在Scatter Reduce阶段,接收 N-1 次数据,N 是 GPU 数量;每个 GPU 在allgather 阶段,接收 N-1 次数据;每个 GPU 每次发送 K/N 大小数据块,K 是总数据大小;所以,每个GPU的Data Transferred=2(N−1)*K/N = (2(N−1)/N)*K,随着 GPU 数量 N 增加,总传输量恒定!(我的理解是,随着N变大...