第 87 题:如何计算all-reduce的通信量?公式是什么?
题目
如何计算all-reduce的通信量?公式是什么?
完整讲解
一、All-Reduce 的语义
All-reduce:(P) 个节点各有一个 tensor,归约(如 sum)后每个节点得到相同的全局结果。等价于 reduce-scatter(每节点得结果的一个分片)+ all-gather(拼成完整结果)。
二、通信量(以 Ring 为例)
- 数据总量:(P) 份,每份 (N) 元素(如 float32 则 (4N) 字节)。归约后每节点需得到完整结果,即 (N) 元素。
- Ring all-reduce:先 reduce-scatter((P-1) 步,每步传 (N/P)),再 all-gather((P-1) 步,每步传 (N/P))。每节点总发送/接收量 各为 (2 \cdot (P-1) \cdot (N/P) \approx 2N)(当 (P) 较大时),即 约 (2N) 元素(或 (8N) 字节 for fp32)的「单卡流量」。
- 公式:单卡通信量 (\approx 2 \times (P-1)/P \times N \approx 2N)(元素数);字节数再乘 4(fp32)或 2(fp16)。有时也说「all-reduce 通信量 = (2(P-1)N/P) 每卡」,与上述一致。
三、时间估算
时间 (\approx) 通信量 / 带宽。若带宽为 (B)(字节/秒),单卡发送 (2N \times 4) 字节,则时间约 (8N/B)(fp32)。实际还有 latency、算法与拓扑影响,可用 (T \approx \alpha \cdot \log P + \beta \cdot 2N) 粗估((\alpha) 延迟项、(\beta) 与带宽相关)。
面试要点
- All-reduce 语义:P 份数据归约后每节点得同一结果;等价 reduce-scatter + all-gather。
- Ring 下每卡通信量 ≈ (2(P-1)N/P \approx 2N) 元素(单卡发送+接收各约 2N)。
- 时间 ≈ 通信量/带宽;fp32 时字节数 = 8N(每卡)。
记忆要点
- 每卡通信量 ≈ 2N 元素(ring);字节 = 2N×精度。
- 公式:(2(P-1)N/P) 每卡;P 大时趋近 2N。
- 时间 = 量/带宽 + 延迟项。