H100 · 多 GPU 系统(Multi GPU)
H100 · 多 GPU 系统(Multi GPU)
本文档基于课程讲义《9. Multi GPU.pdf》(Lesson 9,27 页)整理, 系统介绍 H100 的多 GPU 互联体系:NVLink / NVSwitch / ConnectX-7 / SuperPOD / Rail 网络 / P2P。 前置阅读:
H100-架构介绍.md(NVLink、GPC)、H100-Kernel-Design.md(调度)。
目录
- 为什么需要多 GPU
- NVLink 与 NVSwitch
- H100 DGX 节点与 SuperPOD
- NVLink 4.0 细节
- NVSwitch 3 与 ConnectX-7
- OSFP 笼与存储网络
- Rail 对齐系统
- 三层网络:Leaf / Spine / Core
- Quantum-2 QM9700 交换机
- 自适应路由与 SHIELD
- P2P 通信与 UVA
- 总结与学习衔接
1. 为什么需要多 GPU
问题:用 H100 训练一个 1T 参数的模型、10T token:
- 经验观测:每 token 每参数约需 6 次运算(FLOPs)(前向 + 反向 + 更新)。
- 总 FLOPs =
6 × 10^12 × 10^13 = 6 × 10^25。 - 假设每秒 1000 TFLOPS → 需 约 1900 年!
这就是为什么需要多 GPU:把多块 GPU 连起来,获得更高吞吐、跑更大模型。两项技术支撑:
- NVLink Gen 4:绕过 CPU 的 GPU 直连,900 GB/s 双向带宽,比 PCIe Gen 5 快 7 倍。
- NVSwitch:让节点内每块 GPU 都能以全速与其它任何 GPU 通信。
2. NVLink 与 NVSwitch
- 传统计算里,GPU 是离散单元,靠较慢的 PCIe 通道通信。
- H100 范式转变:创建一张 “mesh”,让每块 GPU 都能以极高速度访问其它 GPU 的内存。
- 8 GPU 集群可表现为单一的内存+算力池。
- 架构可从单服务器 8 GPU 扩展到 256 GPU 集群(NVLink Switch System),以原生芯片速度通信。
3. H100 DGX 节点与 SuperPOD
3.1 DGX H100 节点
- 8 块 SXM5 形态的 H100。
- 板上含 4 个第三代 NVSwitch。
- GPU 与交换机经第四代 NVLink 连接,每 GPU 900 GB/s 带宽。
- 8 个 ConnectX-7 网卡(NIC):专用于把网络任务从主 CPU 卸载出去的处理器。
- 4 个 OSFP 笼(Octal Small Form-factor Pluggable)。
3.2 H100 SuperPOD
- 约 127–128 块 GPU,组织成 4 个 SU(Scalable Unit,可扩展单元),每个 SU 有 32 个 DGX H100 节点。
- “32” 这个数能用标准交换机端口数(通常每交换机 64 端口)做出完美平衡的 Level 1 网络。
- 设计基础:单个 DGX H100 节点有 8 个独立的 ConnectX-7 计算网络接口(HCA),每 GPU 一个。
4. NVLink 4.0 细节
- 每块 H100 有 900 GB/s 双向带宽,约比 PCIe Gen5 快 7 倍;让 GPU 在 HBM 之间通信、跳过 CPU 路径。
- H100 用 18 条独立 NVLink “link” 达到该速度。
- 与上代不同,第四代 NVLink 更注重密度:每条 link 只用 2 对高速差分对(从 4 对降下来), 能在同样空间塞更多 link。
5. NVSwitch 3 与 ConnectX-7
5.1 NVSwitch 3
- 标准 8-GPU HGX 板上用 4 块 NVSwitch 连接全部 8 块 H100;每块交换机接 4–5 个 NVLink 端口。
- 交换机构成完全无阻塞的互联:每块 GPU 能同时以全 900 GB/s 与任何 GPU 通信,无需排队等通道清空。
- NVIDIA 把 NVSwitch 装进外部托盘(NVLink Switch System),可把最多 256 块 H100(32 个机架)连成一个 SuperPOD。
- NVSwitch 自带 ALU,可在交换机内做加法/归约——这是带来巨大性能提升的最重要特性之一。
5.2 ConnectX-7
- 服务器箱内 GPU 靠 NVLink(900 GB/s)通信;数据一旦要出箱到另一台服务器,就撞上 ConnectX-7。
- 一个 DGX 里有 8 个计算网络接口(ConnectX-7)。
- 这是瓶颈:训练速度取决于你如何高效应对这个 18 倍的带宽骤降。ConnectX-7 的存在就是为了最小化”出箱”的代价。
- ConnectX-7 让网络在 CPU 不知情的情况下读写 GPU 内存。
- 网卡与网络交换机协作,在飞行中(in flight)对梯度求和——把网络流量从 O(N)(随集群规模线性增长)变成 O(1)(恒定)。 这是大规模训练能线性扩展的唯一原因。
6. OSFP 笼与存储网络
6.1 OSFP 笼(计算网络)
- 4 个物理笼提供 8 条独立的 400Gb/s 网络链路(共 3.2 Tb/s),靠 “Twin-port” 双端口技术实现。
- 它们内部连到 8 块 ConnectX-7 网卡。
- 支持 GPUDirect RDMA:让不同 DGX 节点的 GPU 互聊,不占用系统 CPU。
- 这 4 个 OSFP 笼专用于计算网络(Compute Fabric)——存储流量不走这些线缆。
6.2 存储网络(Storage Fabric)
- 用于把海量数据集载入 GPU、保存 checkpoint。
- 用单独的 PCIe 卡(装在机箱后部标准 PCIe 槽),不是 OSFP 笼。
- 通常是 Fat Tree 或标准 leaf-spine;不同于 “Rail” 网络,任何 DGX 节点都要能连到任何存储阵列。
7. Rail 对齐系统
- 标准网络里,一台服务器可能用一条线缆承载它所有组件的流量。DGX SuperPOD 里,网络被物理拆成 8 条并行、隔离的网络——这就是 “Rails”。
- 节点内有 8 块 GPU(编号 0–7):Rail 1 连接集群里每台节点的 GPU 0 到同一组交换机,Rail 2 连接每台节点的 GPU 1 到另一组交换机,以此类推。
- Rail 1 的流量在叶交换机层绝不干扰 Rail 2 —— 在整个集群上形成 8 个独立连接平面。
- Rail 系统利用 NVIDIA SHARP 技术,把数据操作卸载到网络交换机本身。
8. 三层网络:Leaf / Spine / Core
SuperPOD 用 3 层(Leaf、Spine、Core)把 SU 连起来:
| 层 | 作用 |
|---|---|
| Layer 1: Leaf(叶) | 连接节点 |
| Layer 2: Spine(脊) | 连接 SU 之间 |
| Layer 3: Core / Super-Spine(核/超脊) | 最大规模扩展 |
这些层就是一堆 Quantum-2 InfiniBand 交换机连在一起。
8.1 Leaf 层
- 线缆从 DGX H100 服务器后部物理引出。
- Rail 隔离:8 个独立交换机”平面”——Rail 1 交换机只连每节点的第 1 张网卡(GPU 0),Rail 8 只连第 8 张(GPU 7)。
- Leaf 交换机处理本地 SU 内流量:若 Node 1 的 GPU 0 要跟(同 SU 的)Node 2 的 GPU 0 通信, 流量走
Node → Leaf → Node,无需上更高层。 - QM9700 用 SHARPv3(比上代强 32 倍),可处理复杂 AI 数学。
8.2 Spine 层
- 连接 Leaf 交换机,让 SU-1 的节点与 SU-2 的节点通信。
- Spine Groups(脊组):脊交换机也按 rail 对齐分组——Spine Group 1 只连”处理 Rail 1”的 Leaf 交换机。
- 隔离:保证 Rail 1 的流量绝不”泄漏”到 Rail 2 的线缆(否则拥堵)。
- 例:SU-1 的 GPU 0 → SU-2 的 GPU 0:
Node(SU1) → Leaf(Rail1) → Spine(Group1) → Leaf(Rail1) → Node(SU2)。
8.3 Core / Super-Spine 层
- 超大规模集群(如 ≥127 节点)时加第三层。
- 连接多个 Pod(SU 的集群)。
- 这一层常改用 800G 光模块减少线缆数,再逻辑拆回两条 400G 链路。
9. Quantum-2 QM9700 交换机
- 提供超高带宽、低延迟的 GPU-GPU 互联。
- 64 个 400Gb/s 端口。
- 前面板 32 个 OSFP 笼;每个 OSFP 笼实际承载两条独立 400Gb/s 链路 →
32 笼 × 2 链路 = 64 逻辑端口。 - 64 端口恰好匹配 32 节点的 SU:
- 32 端口(下行):连 SU 内 32 个节点(如 Rail 1 连所有 32 节点的 GPU 0);
- 32 端口(上行):连”上”到 Spine(Layer 2)以访问其它 SU。
10. 自适应路由与 SHIELD
10.1 Leaf 层的自适应路由
- 上游流量(去其它 SU)时,自适应路由至关重要。
- 数据包从 GPU 到 leaf、需去另一 SU 时,要上 spine;非阻塞/超订阅 fat-tree 里有多个可选 spine。
- 不用静态 hash(固定把某流送到同一 spine,可能碰撞),Quantum-2 硬件监控所有上行端口的队列深度与拥塞, 按每包/每消息动态把包送到最不拥塞的 spine 链路。
- 即便去 spine 的某条路堵了,流量也能从其它路顺畅走。
10.2 Spine 层的自适应路由
- 标准 2 层 fat-tree 里,从某 spine 到某 leaf 通常只有一条”下行”路径。
- 但自适应路由对故障处理和并行链路多路径仍重要。
- 若朝某 leaf 的缓冲满了,spine 传递反压;Quantum-2 的自适应特性(如 SHIELD)帮助隔离该拥塞, 避免扩散到 spine 里其它未受影响的流量。
10.3 SHIELD(硬件故障切换)
- 传统 InfiniBand:线缆断/链路抖动时,软件控制器要 5–30 秒算新路由表并推给所有交换机——直接毁掉整轮训练。
- SHIELD 把恢复逻辑直接搬进交换机硬件 ASIC:
- 链路 down 时,交换机不丢包,而是立刻在本地硬件表里找替代有效路径;
- 找到就更新自己的表避开坏节点、走健康邻居;
- 找不到就向邻居发硬件信号,让其以后不再把流量发过来。
11. P2P 通信与 UVA
11.1 P2P(Peer-to-Peer)
- P2P CUDA 机制让两块 GPU 不经 CPU 通信。
- 可显式 P2P 内存拷贝,或 P2P 直接访问;整个传输走 NVLink。
- 这一切由 UVA(统一虚拟寻址) 支撑。
11.2 UVA
- UVA 让 CPU 与 GPU 共享单一虚拟地址空间。
- UVA 之前:CPU、GPU 各有自己的指针,需手工管理哪个指针指向哪块物理内存。
- UVA 之后:系统仅凭指针值就能确定数据物理上在哪(系统 RAM 还是 H100 的 HBM3)。
- 必须用
cudaDeviceEnablePeerAccess启用 Peer 访问,否则这功能无法工作。
11.3 cudaDeviceEnablePeerAccess 与 cudaMemcpyPeer
cudaDeviceEnablePeerAccess:- 单向:若需双向拷贝或两侧 kernel 互访内存,必须在两块设备上都调用。
- 不启用 → 可能回退到更慢的 PCIe 路径。
- H100 服务器上,若可用会自动用 NVLink(900 GB/s),否则用 PCIe Gen5。
cudaMemcpyPeer:让两块独立 GPU 之间直接传输数据、不经过主机(CPU)内存。- 用 NVLink 拷贝前必须启用
cudaDeviceEnablePeerAccess。
- 用 NVLink 拷贝前必须启用
11.4 原始 P2P 的真相
- H100 HGX 板上不是 8 块 GPU 连成一条线,而是经 NVSwitch 连成复杂 mesh。
- 纯 P2P 要手工管理走哪条链路:GPU 0 跟 GPU 7 通信是直连还是经 GPU 3 跳?
- 虽然 H100 有 900 GB/s 双向 NVLink,但若从 SM 直接发普通 LD/ST 跨 NVLink 结构, 很可能只用一条或几条 NVLink lane,很难打满带宽——”用吸管喝消防栓的水”。
- 这就是为什么需要 NCCL 这类库来管理多 GPU 连接。
12. 总结与学习衔接
12.1 核心脉络速记
| 概念 | 一句话 |
|---|---|
| 为什么多 GPU | 1T 参数 × 10T token = 6×10²⁵ FLOPs,单卡 1900 年 |
| NVLink 4.0 | 900 GB/s 双向、7× PCIe、18 link、2 差分对 |
| NVSwitch 3 | 无阻塞全互联、内置 ALU 做 in-switch 归约 |
| ConnectX-7 | 出箱瓶颈(18× 带宽降)、GPUDirect、in-flight 梯度求和 O(N)→O(1) |
| SuperPOD | 4 SU × 32 节点、127–128 GPU、Rail 对齐 8 平面 |
| 三层网络 | Leaf(连节点)/ Spine(连 SU)/ Core(连 Pod) |
| SHARP / SHIELD | 交换机内做归约 / 硬件级故障切换(5–30s → 即时) |
| P2P / NCCL | UVA + peer access + memcpyPeer;原始 LD/ST 打不满带宽,需 NCCL |
12.2 与本课程其他内容的衔接
| 本文概念 | 对应后续专题 |
|---|---|
| 多 GPU 通信原语 / 集合通信 | 《10. Multi GPU Part 2》 |
12.3 一句话记忆
单卡算力不够 → 用 NVLink/NVSwitch 把 GPU 连成”单一内存+算力池”(节点内 900 GB/s), 出箱靠 ConnectX-7 + Rail 三层网络 + SHARP 在交换机里做归约、SHIELD 在硬件里做故障切换; 编程上靠 UVA + P2P(peer access/memcpyPeer),但真正打满带宽要用 NCCL。
参考来源:
9. Multi GPU.pdf(Lesson 9,27 页)。
