GPU 集群硬件架构——从 NVLink 到 InfiniBand / GPU Cluster Hardware from NVLink to InfiniBand
📅 创建时间:2026-06-03 🏷️ 标签:#AI-Infra #集群侧 #硬件 #NVLink #InfiniBand #拓扑 📚 前置知识:[[../training-infra/01-gpu-hardware]](GPU 硬件基础)[[../training-infra/02-distributed-training]](分布式训练) 📚 相关知识:[[07-nccl-cluster-networking]](NCCL 集群组网)[[00-cluster-infra-overview]](集群全景)
场景:作业调度器接到一个"不可能"的请求
┌─────────────────────────────────────────────────────────────┐
│ │
│ 调度器收到作业 A 的请求: │
│ 「我要跑 TP=8 的 405B 模型」 │
│ │
│ 调度器翻看当前状态: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 节点 1:8 张 H100 —— 当前空闲 │ │
│ │ 节点 2:8 张 H100 —— 运行作业 B(TP=4) │ │
│ │ 节点 3-5:各 8 张 H100 —— 空闲 │ │
│ │ 节点 6:8 张 H100 —— 运行作业 C(DP) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 调度器发现:节点 1 有 8 张 H100,正好满足 TP=8。 │
│ 但问题来了:这 8 张卡之间的连接是什么? │
│ → 如果是 NVSwitch 全互联:TP 跑满速 │
│ → 如果只有 PCIe:带宽只有 NVLink 的 1/5,性能腰斩 │
│ │
│ 调度器必须理解硬件拓扑,才能做出正确的分配决策。 │
│ │
└─────────────────────────────────────────────────────────────┘第1节:GPU 集群的物理层次
从单卡到集群的演进
┌─────────────────────────────────────────────────────────────┐
│ GPU 集群物理层次:从单卡到万卡 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Level 0:单芯片 │
│ ┌────────┐ │
│ │ H100 │ 80GB HBM3,132 个 SM,NVLink × 18 │
│ └────────┘ │
│ │ │
│ ▼ │
│ Level 1:单节点(8 卡服务器) │
│ ┌────────────────────────┐ │
│ │ GPU0 GPU1 GPU2 GPU3 │ NVSwitch 互联,900 GB/s │
│ │ GPU4 GPU5 GPU6 GPU7 │ 任意两卡双向 900 GB/s │
│ └────────────────────────┘ │
│ │ │
│ ▼ │
│ Level 2:单机柜(多台服务器) │
│ ┌──────────────────────────────┐ │
│ │ [Node1][Node2][Node3]... │ IB HDR 200/400 Gbps │
│ │ ← 同一 Leaf Switch 域 → │ 所有节点全互联 │
│ └──────────────────────────────┘ │
│ │ │
│ ▼ │
│ Level 3:Pod(多个机柜) │
│ ┌──────────────────────────────┐ │
│ │ Rack1 Rack2 Rack3 ... │ IB Spine 汇聚 │
│ │ 共享 Spine Switch │ Pod 内通信延迟 < 2μs │
│ └──────────────────────────────┘ │
│ │ │
│ ▼ │
│ Level 4:多 Pod 集群 │
│ ┌──────────────────────────────┐ │
│ │ Pod1 ← Spine ← Pod2 ← ... │ 跨 Pod 需要路由 │
│ │ 跨 Pod 带宽 = Pod 内带宽 × 系数 │
│ └──────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘关键分层参数
┌─────────────────────────────────────────────────────────────┐
│ 各层关键参数对比 │
├─────────────────────────────────────────────────────────────┤
│ │
│ │ 维度 │ 节点内 │ 跨节点 │
│ ├─────────────────┼─────────────────┼─────────────────────┤
│ │ 连接技术 │ NVSwitch │ InfiniBand / RoCE │
│ │ 带宽(双向) │ 900 GB/s │ 200~400 Gbps │
│ │ 延迟 │ < 1 μs │ 1.5~2.5 μs │
│ │ 通信模式 │ GPU Direct │ RDMA │
│ │ 拓扑 │ 全互联 │ Fat-tree │
│ │ 适合的并行策略 │ TP(张量并行) │ DP / PP │
│ │
│ 重要结论: │
│ → TP=8 要求 8 张卡全在同节点 → 必须用 NVSwitch │
│ → DP=64 跨 8 节点 → 可以用 InfiniBand │
│ → PP=4 跨节点但通信量小 → 对带宽要求不高 │
│ │
└─────────────────────────────────────────────────────────────┘第2节:节点内互联:NVSwitch
NVSwitch 的设计
┌─────────────────────────────────────────────────────────────┐
│ NVSwitch 节点内互联架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 单节点 8 卡 H100(Hopper 架构): │
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ NVSwitch Fabric │ │
│ │ │ │
│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │
│ │ │GPU 0│ │GPU 1│ │GPU 2│ │GPU 3│ │ │
│ │ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ │ │
│ │ │ │ │ │ │ │
│ │ ┌──┴────────┴────────┴────────┴──┐ │ │
│ │ │ NVSwitch 芯片(18 端口) │ │ │
│ │ └──┬────────┬────────┬────────┬──┘ │ │
│ │ │ │ │ │ │ │
│ │ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ │ │
│ │ │GPU 4│ │GPU 5│ │GPU 6│ │GPU 7│ │ │
│ │ └─────┘ └─────┘ └─────┘ └─────┘ │ │
│ └──────────────────────────────────────────┘ │
│ │
│ 带宽计算: │
│ 每个 H100 有 18 条 NVLink │
│ → 每条 NVLink 双向 50 GB/s │
│ → 每卡可用的 NVLink 数量决定同节点通信带宽 │
│ │
│ H100 SXM5:18 端口 NVSwitch,任意两卡双向 900 GB/s │
│ A100 SXM4:12 端口 NVSwitch,任意两卡双向 600 GB/s │
│ │
└─────────────────────────────────────────────────────────────┘NVLink 各代对比
┌─────────────────────────────────────────────────────────────┐
│ NVLink 各代技术参数对比 │
├─────────────────────────────────────────────────────────────┤
│ │
│ │ 规格 │ V100 │ A100 │ H100 │ H200 │
│ ├─────────────────┼──────────┼──────────┼──────────┼─────────┤
│ │ 发布时间 │ 2017 │ 2020 │ 2022 │ 2023 │
│ │ 单链路带宽 │ 25 GB/s │ 25 GB/s │ 50 GB/s │ 50 GB/s│
│ │ 每卡最大链路数 │ 6 │ 12 │ 18 │ 18 │
│ │ 每卡最大带宽(进) │ 300 GB/s│ 600 GB/s│ 900 GB/s│ 900 GB/s│
│ │ 每卡最大带宽(双向)│ 600 GB/s│ 1200 GB/s│ 1800 GB/s│ 1800 GB/s│
│ │ 单节点最大卡数 │ 8 │ 8 │ 8 │ 8 │
│ │ 每卡显存 │ 32 GB │ 80 GB │ 80 GB │ 141 GB │
│ │ NVSwitch │ 有 │ 有 │ 有(第3代)│ 有 │
│ │
│ H100 vs A100 关键差异: │
│ → H100 NVLink 带宽是 A100 的 1.5 倍 │
│ → H100 新增 DPX 指令,专门加速动态规划算法 │
│ → H100 FP8 Tensor Core:3958 TFLOPS(V100 FP16 的 6 倍) │
│ │
└─────────────────────────────────────────────────────────────┘第3节:跨节点互联:InfiniBand vs RoCE
InfiniBand 技术架构
┌─────────────────────────────────────────────────────────────┐
│ InfiniBand 网络架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ GPU 集群 InfiniBand 拓扑(典型 Fat-tree 架构): │
│ │
│ ┌───────────────────────────────────────┐ │
│ │ Spine Switch │ │
│ │ (核心层, 可能在境外) │ │
│ └──┬──────────────┬─────────────────┬──┘ │
│ │ │ │ │
│ ┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐ │
│ │ Leaf Sw 1 │ │ Leaf Sw 2 │ │ Leaf Sw N │ │
│ │ (Pod 内) │ │ (Pod 内) │ │ (Pod 内) │ │
│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │
│ │ │ │ │
│ ┌──────┴──────┐ ┌─────┴─────┐ ┌──────┴──────┐ │
│ │ [Node1][Node2]│ │[Node3]...│ │[NodeN-1][NodeN]│ │
│ └───────────────┘ └───────────┘ └───────────────┘ │
│ │
│ 各层带宽(以 64 节点 Pod 为例): │
│ → 节点到 Leaf Switch:100 Gbps × 8 = 800 Gbps 汇聚 │
│ → Leaf 到 Spine:多 Leaf 共享 Spine 上联带宽 │
│ → 跨 Pod:需要经过 Spine,延迟和带宽都会下降 │
│ │
└─────────────────────────────────────────────────────────────┘InfiniBand vs RoCE v2 对比
┌─────────────────────────────────────────────────────────────┐
│ InfiniBand HDR vs RoCE v2 对比 │
├─────────────────────────────────────────────────────────────┤
│ │
│ │ 维度 │ InfiniBand HDR │ RoCE v2 │
│ ├─────────────────┼──────────────────┼────────────────────┤
│ │ 单端口带宽 │ 200 Gbps │ 400 Gbps (NDR) │
│ │ 协议栈 │ IB 原生 │ RDMA over Converged│
│ │ │ │ Ethernet v2 │
│ │ 网络设备 │ Mellanox QM8700│ Cisco/Mellanox │
│ │ │ / BlueField-3 │ 交换机 │
│ │ 传输层 │ IB Transport │ RoCEv2 (UDP) │
│ │ 拥塞控制 │ IB DC QCN │ PFC + DCQCN │
│ │ 需要无损网络 │ 否(IB 自身保证)│ 是(PFC 必须开启)│
│ │ 运维复杂度 │ 高(独立网络) │ 低(复用以太网) │
│ │ 成本 │ 高(专用设备) │ 中(可复用网络) │
│ │ GPUDirect RDMA │ 支持 │ 支持(需要驱动) │
│ │ NCCL 兼容性 │ 原生支持 │ 原生支持 │
│ │
│ 实际选择建议: │
│ → 超大规模训练集群(如 Meta LLaMA、Google TPU):IB │
│ → 企业级混合云集群:RoCE v2(成本优先) │
│ → 有 NVIDIA SuperPOD 架构经验:IB(性能优先) │
│ │
└─────────────────────────────────────────────────────────────┘GPUDirect RDMA:绕过 CPU 的直接通信
┌─────────────────────────────────────────────────────────────┐
│ GPUDirect RDMA 通信路径对比 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 传统模式(需要 CPU 中转): │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ GPU A │ ── PCIe ─►│ CPU A │ ── IB ──►│ CPU B │── PCIe ─►│ GPU B │
│ └────────┘ └────────┘ └────────┘ │
│ │ │
│ │ 问题:CPU 内存复制成为瓶颈 │
│ ▼ │
│ GPUDirect RDMA(直接内存访问): │
│ ┌────────┐ ┌────────┐ │
│ │ GPU A │ ─────────── IB/RoCE ────────►│ GPU B │ │
│ └────────┘ └────────┘ │
│ │ │
│ │ 优势:绕过 CPU,数据直接从 GPU HBM → 网卡 │
│ ▼ │
│ 性能差异: │
│ → 传统模式:延迟 ~5-10 μs,CPU 利用率 30%+ │
│ → GPUDirect RDMA:延迟 ~2-3 μs,CPU 利用率 < 5% │
│ │
│ 适用场景: │
│ → 跨节点 AllReduce(分布式训练梯度同步) │
│ → Checkpoint 直接写入存储服务器 │
│ → 多节点间的 NVLink/NCCL 通信 │
│ │
└─────────────────────────────────────────────────────────────┘第4节:集群拓扑设计
典型 GPU 集群拓扑
┌─────────────────────────────────────────────────────────────┐
│ 典型万卡集群拓扑(Pod-based 设计) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────┐ │
│ │ 管理网络(以太网) │ │
│ │ SSH / 调度命令 / 监控数据 │ │
│ └──────────────────────────────────┘ │
│ │ │
│ ┌────────────┴────────────┐ │
│ │ │ │
│ ▼ ▼ │
│ ┌────────────────────────┐ ┌───────────────────────┐ │
│ │ Pod 1 │ │ Pod 2 │ │
│ │ ┌────┐ ┌────┐ ┌────┐ │ │ ┌────┐ ┌────┐ ┌────┐ │ │
│ │ │Node│ │Node│ │Node│ │ │ │Node│ │Node│ │Node│ │ │
│ │ │ ×16│ │ ×16│ │ ×16│ │ │ │ ×16│ │ ×16│ │ ×16│ │ │
│ │ └────┘ └────┘ └────┘ │ │ └────┘ └────┘ └────┘ │ │
│ │ ↑ │ │ ↑ │ │
│ │ │ IB HDR 400G │ │ │ IB HDR 400G │ │
│ │ ┌─────┴─────────────┐ │ │ ┌─────┴─────────────┐ │ │
│ │ │ IB Leaf Switch │ │ │ │ IB Leaf Switch │ │ │
│ │ └─────┬─────────────┘ │ │ └─────┬─────────────┘ │ │
│ └────────┼────────────────┘ └────────┼────────────────┘ │
│ │ │ │
│ └──────────────┬───────────────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ IB Spine │ │
│ │ (核心层) │ │
│ └─────────────┘ │
│ │
│ 跨 Pod 通信路径: │
│ Node-A → Leaf Sw → Spine → Leaf Sw → Node-B │
│ 延迟:Pod 内 ~2μs,跨 Pod ~5-10μs │
│ │
│ 调度拓扑感知示例: │
│ → 作业 TP=8 → 调度到同 Pod 同节点的 8 卡 │
│ → 作业 DP=64 → 分配到 8 节点,优先同 Pod │
│ → 作业 TP=8 + DP=8 → 分配到 8 节点,TP 在节点内,DP 跨节点│
│ │
└─────────────────────────────────────────────────────────────┘拓扑感知的调度策略
┌─────────────────────────────────────────────────────────────┐
│ 拓扑感知的 GPU 分配策略 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 调度器分配 GPU 时需要考虑三层拓扑: │
│ │
│ 1. NVSwitch 域(同节点 8 卡): │
│ → 带宽最高(900 GB/s),适合 TP │
│ → 所有 8 卡必须来自同一节点 │
│ │
│ 2. IB Leaf Switch 域(同一 Pod 同一 Leaf): │
│ → 带宽次高(200-400 Gbps),适合 PP 或小规模 DP │
│ → 通信延迟 ~2μs │
│ │
│ 3. Pod 域(同一 Pod 不同 Leaf): │
│ → 带宽中等,适合中等规模 DP │
│ → 通信延迟 ~3-5μs │
│ │
│ 4. 集群域(跨 Pod): │
│ → 带宽最低,适合大规模 DP 但需要容忍通信开销 │
│ → 延迟 ~10μs │
│ │
│ 实际调度中常见的"拓扑降级"问题: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 场景:申请 64 卡 TP=8 │ │
│ │ 理想情况:8 节点 × 8 卡,TP 在节点内 │ │
│ │ 实际情况: │ │
│ │ → 节点 1-4:同 Pod,TP=8 可以跨节点(IB) │ │
│ │ → 节点 5-8:跨 Pod,TP=8 跨 Pod 性能降级 50% │ │
│ │ 结果:整体 TP 通信效率不一致,部分节点被拖慢 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘第5节:存储与网络的物理约束
存储网络的特殊性
┌─────────────────────────────────────────────────────────────┐
│ GPU 集群中的存储网络 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 训练集群有两套网络基础设施(通常): │
│ │
│ 计算网络(IB / RoCE): │
│ → 用于 GPU 之间 NCCL 通信 │
│ → 要求:极低延迟(< 5μs)、无损、RDMA │
│ → 带宽:200-400 Gbps │
│ │
│ 存储网络(以太网 / 部分复用 IB): │
│ → 用于访问训练数据和读写 Checkpoint │
│ → 要求:高吞吐、大块顺序读写 │
│ → 带宽:100 Gbps 以太网或专用 IB │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 常见配置: │ │
│ │ → 计算网络:IB HDR 400 Gbps,专用 │ │
│ │ → 存储网络:以太网 100 Gbps,复用或专用 │ │
│ │ → 管理网络:以太网 10 Gbps,带外管理 │ │
│ │ │ │
│ │ 问题:Checkpoint 写入时,存储网络是否和计算网络竞争?│ │
│ │ → 是的!大规模 Checkpoint(TB 级)会占用存储带宽 │ │
│ │ → 解决方案:RDMA 写入存储(GPUDirect Storage) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘带宽矩阵与并行策略选择
┌─────────────────────────────────────────────────────────────┐
│ 带宽矩阵与并行策略的对应关系 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 带宽对比(关键数字记住): │
│ NVLink(同节点):900 GB/s = 7.2 Tbps │
│ NVLink(Hopper,双向):1.8 TB/s │
│ IB HDR(跨节点):200 Gbps = 25 GB/s │
│ IB NDR(跨节点):400 Gbps = 50 GB/s │
│ 以太网 100G:12.5 GB/s │
│ │
│ 通信量与带宽需求: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 并行策略 │ 梯度同步频率 │ 单卡带宽需求 │ 推荐连接 │
│ ├──────────────┼────────────────┼────────────────┼──────────┤
│ │ TP=8(同节点)│ 每 micro step │ ~800 GB/s │ NVSwitch │
│ │ PP=4(跨节点)│ 每 step │ ~10 GB/s │ IB/RoCE │
│ │ DP=64(跨节点)│ 每 optimizer step│ ~50 GB/s │ IB/RoCE │
│ │ FSDP(跨节点)│ 每 optimizer step│ ~100 GB/s │ IB/RoCE │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 带宽利用率分析: │
│ → TP 在 IB 上跑:25 GB/s 需求 vs 50 GB/s上限 = 50%利用率│
│ → DP 在 IB 上跑:50 GB/s 需求 vs 50 GB/s上限 = 接近饱和│
│ → 所以大规模 DP 通常需要 IB NDR(400 Gbps)而不是 HDR │
│ │
└─────────────────────────────────────────────────────────────┘升华:物理拓扑是集群设计的"宪法"
┌─────────────────────────────────────────────────────────────┐
│ 硬件拓扑的工程哲学 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 拓扑是硬约束,调度器必须尊重: │
│ → NVLink 是 TP 的物理前提,不存在"软件绕过去"的方案 │
│ → 拓扑降级会导致性能不可预测 │
│ │
│ 2. 带宽差距是数量级的,不是线性的: │
│ → NVLink(900 GB/s)是 IB HDR(25 GB/s)的 36 倍 │
│ → 这不是 10-20% 的性能差异,是量级差异 │
│ → TP 跑在 IB 上基本等于不可用 │
│ │
│ 3. 集群拓扑设计一旦定型,改造成本极高: │
│ → 布线、交换机、网络设备都是物理工程 │
│ → 拓扑规划要走在采购之前 │
│ │
│ 4. 存储网络和计算网络的分离是工程上的最佳实践: │
│ → 两张网各司其职,避免相互干扰 │
│ → 大规模 Checkpoint 时尤其重要 │
│ │
│ 一句话总结: │
│ GPU 集群的物理拓扑决定了并行策略的选择上限。 │
│ 硬件是下限,软件优化是在这个下限内尽量接近它。 │
│ │
└─────────────────────────────────────────────────────────────┘"AI 可查 vs 必须理解"清单
AI 可查:
✅ Mellanox IB 交换机的具体型号和端口数
✅ NVSwitch 芯片的具体规格
✅ 特定集群的物理拓扑图设计
✅ IB 和 RoCE 的详细配置参数
必须理解:
🔴 节点内 NVSwitch vs 跨节点 IB/RoCE 的带宽数量级差异
🔴 为什么 TP=8 必须在同节点(NVLink 带宽是 IB 的 36 倍)
🔴 GPUDirect RDMA 的原理和绕过 CPU 的性能优势
🔴 集群拓扑四层:节点内 → Pod/Leaf → Spine → 集群
🔴 调度器的"拓扑感知"指的是什么(不能随机分配 GPU)
🔴 DP/PP 为什么可以用 IB,而 TP 必须用 NVSwitch学习状态:🟡 开始学习