05. Communication Topologies | 通信拓扑与分布式基石 (Communication & Distributed Topology)
难度: Hard | 标签: 系统架构, 分布式训练, 通信机制 | 目标人群: 核心 Infra 与算子开发
在 讨论题 03:GPU 物理架构与内存层级 中,我们探讨了单卡内部由 SRAM 和 HBM 构成的访存层级。然而,千亿参数大模型的计算和显存需求远超单卡的承载极限。 当我们跨入多机多卡的集群环境时,单机的访存受限 (Memory Bound) 将演变为集群间的通信瓶颈 (Communication Bottleneck)。本节我们将从大模型最核心的 3D 并行策略 出发,结合 NVIDIA A100/H100 的底层物理拓扑,解析软硬件是如何协同工作的。
如果先记一组带宽直觉,可以先抓住下面这几个数量级:
| 互连 | 典型带宽 | 备注 |
|---|---|---|
| PCIe Gen5 x16 | 128 GB/s(双向) | 仍然是通用主机总线 |
| A100 NVLink 3.0 | 600 GB/s(双向) | 单机 8 卡内高频通信主力 |
| H100 NVLink 4.0 | 900 GB/s(双向) | 更适合把 TP 放在机内 |
| 400Gb/s InfiniBand | 50 GB/s(单向,约 25 GB/s 双向等效吞吐) | 跨机通信常见上限量级 |
这也是为什么“机内 NVLink vs 机外 IB”不是一个小差异,而是一个会直接改变并行策略的物理约束。
本节如何和实战篇配合
这一节没有单独的 Notebook,而是和后面的实战页一起配合学习:
- 先看本文,建立 3D 并行、NVLink / IB、All-Reduce / All-Gather / Reduce-Scatter 的直觉
- 再去实战篇看张量并行和分布式通信原语,确认这些概念在代码里怎么落地
- 如果后面要做多卡训练调优,这一页负责告诉你为什么通信会成为瓶颈,实战篇负责告诉你怎么验证瓶颈和收益
这节的目标不是让你立刻会写分布式代码,而是让你在面对 TP、PP、DP 时,先能判断通信拓扑是否允许这样部署。
相关阅读:
请前往实战篇进行相关代码练习:../02_PyTorch_Algorithms/24_Tensor_Parallelism_Sim.ipynb../04_CUDA_and_System_Optimization/19_Distributed_Communication_Primitives.ipynb
Q1:什么是大模型训练中的 3D 并行 (3D Parallelism) 策略?请简述 DP、TP 和 PP 的基本概念。
点击展开查看解析
当一个模型大到一张 GPU 装不下,且训练数据多到一张 GPU 算不完时,业界(如 Megatron-LM 等)通常采用三种维度的切分方式(俗称 3D 并行)来将任务分摊给整个集群:
- 数据并行 (Data Parallelism, DP) —— 切分数据
- 概念:每张 GPU 上都有一份完整的模型副本。我们将海量的训练数据切分成多个小批次 (Mini-batches),分发给不同的 GPU 同时计算。
- 特点:最基础的并行方式。计算完后,所有 GPU 需要同步一次梯度,以保证大家的模型更新方向一致。
- 张量并行 (Tensor Parallelism, TP) —— 切分算子 (层内)
- 概念:如果一层 Transformer 的矩阵乘法太大,我们就把这个大矩阵“切块”。多张 GPU 分别计算矩阵的一部分,最后将结果拼接起来。
- 特点:它是在“层内部”进行的细粒度切分,因此 GPU 之间需要极高频率地交换中间计算结果。
- 流水线并行 (Pipeline Parallelism, PP) —— 切分网络层 (层间)
- 概念:将一个深达上百层的神经网络“拦腰截断”。例如 GPU 1 负责前 10 层,GPU 2 负责第 11-20 层。像工厂流水线一样,GPU 1 算完后把结果传递给 GPU 2。
- 特点:属于粗粒度切分,只有在相邻层的 GPU 之间才需要传递激活值 (Activations)。
一个便于记忆的对比表:
| 策略 | 切分对象 | 通信频率 | 单次通信量 | 常见物理层 | 典型场景 |
|---|---|---|---|---|---|
| DP | 数据 | 每个 iteration 一次 | 全量梯度,约 2P bytes 量级 | 跨机可行 | 所有训练 |
| TP | 层内参数 / 激活 | 每层、每 micro-batch 多次 | 激活张量,约 B × S × H × bytes 量级 | 机内 NVLink | Megatron-LM |
| PP | 层间激活 | 每个 micro-batch 边界一次 | 单层激活,约 B × S × H × bytes 量级 | 跨机也可行 | 大模型分层部署 |
其中 P 代表参数量,B 是 batch size,S 是 sequence length,H 是 hidden dim,bytes 是数据类型字节数。
从工程上看,TP 和 PP 的单次消息量可能同量级,但 TP 的通信频率更高,所以它更依赖机内高速互连。
Q2:以 A100/H100 服务器为例,机内与机外通信的物理拓扑和带宽存在怎样的显著差距?
点击展开查看解析
要将上述的 3D 并行策略部署到真实的物理机房中,我们需要先认清一个明确的硬件现实:节点内和节点间的数据传输由两套不同的物理网络承载。
机内通信 (Intra-node Communication):
- 硬件基石:NVIDIA 主板上的 NVLink 互连技术和 NVSwitch 全互联交换芯片。它允许单台服务器内的 8 张 GPU 绕过 CPU,实现点对点直连。
- 理论带宽:A100 双向互连带宽可达 600 GB/s;H100 更是提升至 900 GB/s。
- 特点:延迟极低,带宽极大。8 张显卡在物理拓扑上就像是一张拥有超大显存的“统一 GPU”。
机外通信 (Inter-node Communication):
- 硬件基石:跨服务器交换依赖于网卡,通常使用 InfiniBand (IB) 网络或支持 RDMA 的以太网 (RoCE)。
- 理论带宽:主流 400Gb/s IB 的单向吞吐量约为 50 GB/s,按双向等效看通常只有 25 GB/s 左右。
- 特点:受限于网卡、物理交换机及光纤距离,跨机通信带宽受到严格制约。
核心结论:机内 NVLink 与机外网络(如 IB)的带宽差距通常达到 12 倍到 18 倍。这个物理层面的“带宽悬崖”是决定 3D 并行策略如何放置的重要约束。
Q3:硬件拓扑的“带宽悬崖”是如何决定张量并行 (TP) 与流水线并行 (PP) 的部署边界的?
点击展开查看解析
构建分布式训练系统的核心设计原则是:让高频、大数据量的通信走高速的 NVLink,让低频、小数据量的通信走机外网络。
TP 通常优先放在机内:
- TP 在每一层的前向和反向计算中,矩阵切块运算结束后往往需要立即同步结果,否则无法进行后续计算。
- 如果跨物理机执行 TP,较低的跨机带宽会让 GPU 长时间阻塞等待,整体算力利用率明显下降。因此,TP 维度通常优先限制在单台物理机内部,常见规模会受单机互联拓扑约束。
PP 和 DP 适合跨机分布:
- PP 仅在切分层的边界交接微批次 (Micro-batch) 时,发生一次点对点的发送与接收。且传输的数据仅为单层的激活值张量,体积远小于动辄几 GB 的参数。
- DP 虽然要同步全量梯度,但它只在整个反向传播结束时才执行一次,频率相对较低(并且可以与反向传播计算进行 Overlap 隐藏通信时间)。
- 因此,流水线并行和数据并行通常作为跨机扩展的主要手段,以容忍跨机网络的带宽上限。
一个便于部署时快速判断的决策树:
TP 维度应该多大?
├─ 单机 8 卡 → TP ≤ 8,通常 TP=8 最能吃满 NVLink
├─ 需要跨机 → TP 尽量不要跨机,优先改成 PP / DP
└─ 多机但有特殊 NVLink 互联平台 → 仍要看拓扑,不要默认 TP 可以无限扩展
PP 和 DP 怎么放?
├─ PP → 可跨机,因为单次激活传输量较小,频率也较低
└─ DP → 适合跨机扩展,并尽量和反向传播做 overlapQ4:在上述并行策略下,请简述最常用的三种集合通信原语:All-Reduce, All-Gather, Reduce-Scatter 的区别。
点击展开查看解析
当我们在宏观上决定了 TP/PP/DP 的部署位置后,底层的通信库(如 NCCL)会通过以下核心通信原语 (Primitives) 来执行实际的数据搬运:
假设当前通信组内有 4 张 GPU,每张卡上持有一段局部数据:
All-Reduce (全规约):
- 操作:将所有卡上大小相等的张量按照指定的运算(通常是求和
Sum)进行合并,然后将合并结果完整地广播回所有卡上。 - 应用场景:数据并行 (DP) 汇总梯度;张量并行 (TP) 同步局部矩阵乘加的结果。
- 量级例子:以 7B 参数模型、FP16 梯度为例,单卡梯度大小约为
14 GB,8 卡 DP 做一次 All-Reduce 时,每卡累计发送/接收量可到28 GB量级。若放在 900 GB/s 的机内 NVLink 上,时间可能是几十毫秒量级;若落到 50 GB/s 级别的跨机网络上,时间会被拉长到数百毫秒级别。
- 操作:将所有卡上大小相等的张量按照指定的运算(通常是求和
All-Gather (全收集):
- 操作:每张卡拥有一个被切分的张量片段。各卡相互交换片段,最终每张卡都拼接并持有一份完整的大张量。
- 应用场景:序列并行 (Sequence Parallelism) 中收集被分布处理的文本序列;ZeRO-3 获取切片的模型权重。
Reduce-Scatter (规约并散布):
- 操作:Reduce + Scatter 的组合。首先对所有卡的张量按位置求和,然后将求和结果均匀切分,每张卡只接收并保存自己对应的切片部分。
- 应用场景:ZeRO-2 计算并保存切片的梯度。
系统洞察:在 A100/H100 节点内部,NCCL 会充分利用 NVSwitch 的全互联特性,使得这些集合通信原语的执行效率逼近机内物理硬件的极限带宽。
⚠️ 常见误区
NVLink很快,不代表所有多卡通信都会自动加速;通信库和拓扑没配好,仍然可能退化到PCIe。TP维度越大不一定越好;TP 越大,通信频率和同步成本越高。PP不是没有通信,而是通信次数更少、单次更小。All-Reduce不只可以做求和,也可以在不同算法里承担平均、规约等变体。机外带宽看起来也不低,但对 DP 这种大块梯度同步来说,几十 GB 级别的单轮通信仍然很容易成为瓶颈。
