互连与集合通信:拓扑如何决定调度上限
多 GPU 系统的性能上限往往不在 GPU 里,而在 GPU 之间:同一组 8 张卡,放对地方和放错地方,通信能力差一个数量级。
微架构讲的是卡内;本章讲卡间与机器间。它是Ray/KubeRay 拓扑约束与调度问题域的物理前提,也解释了MIG与共享方案的一个关键限制:实例间 P2P 关闭。
带宽金字塔
| 路径 | 带宽(数量级) | 相对显存带宽 | 类比 |
|---|---|---|---|
| HBM 显存 | 3.35 TB/s | 1× | 本地内存 |
| NVLink(卡间,双向合计) | 900 GB/s | ~0.27× | 机柜内专线 |
| PCIe Gen5 x16 | 64 GB/s | ~0.02× | 节点内普通总线 |
| InfiniBand 400G | ~50 GB/s | ~0.015× | 跨节点网络 |
要点:NVLink 只存在于同一台服务器内部(经 NVSwitch 芯片把 8 卡全互联);跨机器只能走网卡。同样的 8 卡张量并行,放一台 HGX 里和拆到两台机器,通信能力差近 10 倍。
读拓扑表:nvidia-smi topo -m
GPU0 GPU1 ... NIC0 NIC1
GPU0 X NV18 PIX PIX
GPU1 NV18 X PIX PIX
Legend: NV18 = 18 条 NVLink 直连 | PIX = 同一 PCIe 交换机
PXB = 同主机跨 PCIe 交换机 | PHB/SYS = 经过 CPU / 跨 NUMA三类读法:
- GPU↔GPU 全是 NV18:NVSwitch 全互联,任意 8 卡组合都好;
- GPU↔NIC 的 PIX/PXB:哪块网卡离哪块 GPU 近,而 GPUDirect RDMA(网卡 DMA 直达显存,免主机中转)依赖这个亲和;云环境开启 ACS 会强制绕 CPU,是“本地快云上慢”的经典原因;
- 异常格子:本该 NV 的位置出现 PHB/SYS,说明拓扑降级,训练吞吐会无声下跌。
环形 AllReduce:通信量的小学数学
数据并行训练每步要把各卡梯度归约(AllReduce)。NCCL 的环形算法把数据切块沿环传递,每卡发送量为:
每卡发送量 = 2 × (N-1)/N × 数据量 ≈ 2 倍数据量(与卡数几乎无关)这个“常数发送量”是数据并行能扩展到几百卡的数学根基。工程上只需两个结论:
- 环的速度由最差一段决定:环上任何一步跨机器,整环被拉到网卡带宽。所以 NCCL 启动日志(
NCCL_DEBUG=INFO)里的Via NVL(好)与Via SYS/PCIe(坏)值得纳入部署验收; - nccl-tests 的 busbw 才是可比指标:
busbw = algbw × 2(N-1)/N归一化了环系数,单节点 H100 大消息应达 430–480 GB/s(NVLS 开启后 700+);只有 200 左右说明掉到了 PCIe。
拓扑对调度的三条硬规则
- 张量并行(TP)留在同一 NVSwitch 域内:TP 每层通信,小而频,跨机即灾难。推理 TP=4/8 的部署同理。
- 跨 MIG/vGPU 实例的并行是陷阱:MIG 实例间(以及多数 vGPU 形态下)P2P/NVLink 不可用,跨实例的 TP 会退化到 PCIe 甚至主机中转。多实例节点只服务 TP=1 的模型分档。
- Kubernetes 原生不感知这些:调度器只数卡数,选哪几张卡发生在 kubelet 侧且拓扑盲。现实践是节点级独占(大任务整节点)、注入有序的
CUDA_VISIBLE_DEVICES,以及未来由DRA把“同一 NVSwitch 域的 4 张卡”变成可声明约束。
NVLink 数字必须带上世代标签
NVIDIA 当前的 NVLink 页面描述了 Rubin 的第六代 NVLink:每 GPU 3.6 TB/s、72 GPU 域共 260 TB/s 聚合带宽;Blackwell 页面则是第五代 NVLink、72 GPU 域 130 TB/s。这些数字不可互换。一份严肃的架构文档总会写清代数、平台、方向约定,以及数字是每链路、每 GPU 还是聚合值;把它与世代、模块与产品语言的五层词汇一起写进采购清单。
GPUDirect:在受支持处消除多余拷贝
GPUDirect 系列技术减少 GPU 显存与网卡、存储等对端设备之间的拷贝。GPUDirect RDMA 可让网络适配器经由受支持的软硬件路径直接向显存搬数据;GPUDirect Storage 面向存储与显存之间经由加速路径的数据搬运。注意它们是端到端特性:需要验证固件、驱动、内核模块、PCIe 布局、权限、容器能力和库行为。“网卡支持 RDMA”不能证明应用正在使用显存直传。
rank 映射与扩展效率
一个分布式进程拥有 rank 和设备分配,从 rank 到 GPU、从 GPU 到网卡、从 GPU 到对端链路的映射影响每一次集合通信的路径。正确性也许能在糟糕的映射下幸存,性能不会。应用可以完美调优于单节点域,却在跨节点域上无法扩展,所以基准计划必须至少有三条基线:单 GPU、单服务器全部 GPU、同一工作负载跨两台及以上服务器。结果可以用一行诊断式表达:
扩展效率 = 单设备耗时 / (N × N 设备耗时)它是诊断工具而非经济模型:请在旁边同时记录通信占比、排队时间、失败和每次完成运行的成本(见容量经济)。
常见误区
| 误区 | 真相 |
|---|---|
| 8 GPU 的 Pod,K8s 会放好 | 原生调度拓扑盲,可能跨 4 台机器 |
| NVLink 900GB/s 是任意两卡之间 | 是每卡聚合双向带宽,经 NVSwitch 仲裁 |
| 万兆以太网也能跑分布式训练 | 能跑,AllReduce 慢一个数量级,卡在等网络 |
| MIG 实例间还能 NVLink 通信 | 默认关闭,跨实例 TP 是性能陷阱 |
| 加了 GPU 的节点网络就够了 | RDMA 亲和、peermem、ACS 是一组独立的主机级前置条件 |
总结
互连层给平台的结论可以压缩成一句:通信留在金字塔上层。训练的数据并行可以跨机(环形算法发送量是常数),张量并行必须同机同域;共享与切分方案会改变 P2P 可用性,因此“切分后能否并行”是选型时必须显式回答的问题(见决策轴)。把拓扑表纳入节点档案、把 NCCL 路径纳入部署验收,是成本最低的两项治理动作。