Skip to content

机内 ​

机内通信涉及主机内存与 GPU 之间的数据搬运,以及 GPU 之间的数据交换。本文先介绍 NUMA、PCIe、NVLink 的作用与数据路径,再以 H20、B300 和 RTX PRO 5000 为示例,说明拓扑与带宽的对应关系。

1. NUMA ​

1.1 内存局部性 ​

NUMA(Non-Uniform Memory Access,非统一内存访问)是一种内存组织方式:CPU 访问不同位置的系统内存,延迟和可用带宽可能不同。在常见的双路服务器中,每颗 CPU 连接一组本地 DDR 内存;访问另一颗 CPU 连接的内存时,需要经过 CPU 间互联。Linux 将这种局部性表示为 NUMA 节点,节点划分不一定与物理 CPU 插槽一一对应。Linux NUMA 文档

text
本地访问:CPU 0 → 本地内存控制器 → DDR 0
远端访问:CPU 0 → CPU 间互联 → CPU 1 的内存控制器 → DDR 1

远端访问增加了数据经过的链路,也可能与其他跨节点流量争用资源。因此,分析主机侧的数据搬运时,需要同时确认执行线程的位置和内存页所在的 NUMA 节点。

1.2 GPU 亲和关系 ​

在本文的 x86 独立 GPU 系统中,GPU 通过 PCIe 接入主机。GPU 的 NUMA 亲和关系表示它靠近哪一组主机 CPU 和内存;GPU 自身的 HBM 或 GDDR 仍是设备显存。

假设 GPU 0 接在 NUMA 0 的 PCIe 路径下,从 DDR 0 搬运数据可以使用本地路径,从 DDR 1 搬运数据则需要跨越主机节点。推理中的权重加载、CPU 卸载和主机缓冲区传输都会受到这种位置关系影响;仅绑定 CPU 线程不足以保证缓冲区也分配在同一节点。

GPU 的主机亲和关系与 GPU 间互联需要分别判断。两张 GPU 即使亲和不同 NUMA 节点,也可能通过 NVLink 交换数据,无须经过 CPU 间互联。

2. PCIe ​

2.1 连接结构 ​

PCIe(Peripheral Component Interconnect Express)是连接主机与 GPU、网卡、SSD 等设备的通用互联。主机侧 Root Complex 连接 CPU/内存子系统与 PCIe 层级,GPU 可以接在 Root Port 下,也可以经过 PCIe Switch 扩展连接。

CPU 与 GPU 之间的传输需要经过主机内存及 PCIe 路径。GPU 之间还可以使用 P2P(Peer-to-Peer)访问,在支持的拓扑和软件配置下直接访问对端显存,省去主机内存中转;PCIe P2P 是否可用需要单独检查,不能只凭两张卡位于同一 NUMA 节点判断。CUDA 多 GPU 编程指南

text
主机传输:系统 DDR ↔ 主机内存/I/O 子系统 ↔ PCIe ↔ GPU 显存
同一交换机下的 P2P:GPU 0 ↔ PCIe Switch ↔ GPU 1

经过多个交换机、Host Bridge 或跨 NUMA 互联的 GPU 路径,需要考虑额外链路和共享带宽。即使每张 GPU 都连接 ×16 链路,多张卡同时传输时也可能受共享上行限制。

2.2 链路带宽 ​

PCIe 带宽由链路代际和通道数共同决定,Gen5 ×16 表示第五代、16 条通道。PCIe 支持全双工,双向合计是同时发送与接收的带宽之和,不能作为一次单方向拷贝的上限。

链路单向理论带宽双向合计计算口径
PCIe Gen4 ×16约 31.5 GB/s约 63 GB/s扣除 128b/130b 编码开销,未扣协议开销
PCIe Gen5 ×16约 63 GB/s约 126 GB/s扣除 128b/130b 编码开销,未扣协议开销
PCIe Gen6 ×16不超过 128 GB/s不超过 256 GB/s原始带宽上限,未扣 FLIT、纠错及协议等开销

以 Gen5 ×16 为例,每通道速率为 32 GT/s,单向带宽按 32 × 16 × (128 / 130) / 8 ≈ 63 GB/s 计算。Gen6 使用 PAM4 和 FLIT 模式,不能继续套用 Gen5 的编码开销系数。PCI-SIG 代际与编码说明、PCIe 6.0 规格

设备最大能力、当前协商速率和端到端路径带宽是三个不同概念。GPU 支持 Gen6 ×16,并不意味着它到主机内存的整条路径都能达到 Gen6 带宽;还要逐级核对上游端口、交换机及主机侧链路。实际传输还受协议开销、读写方向、消息大小和并发负载影响。

3.1 GPU 互联 ​

NVLink 是 NVIDIA 的高速互联技术。本文讨论其 GPU 间通信用途:数据通过 NVLink 在 GPU 间传输,减少对主机 PCIe 路径的依赖。张量并行中的 All-Reduce、All-Gather 等集合通信可以使用这类互联,但实际路径仍由拓扑、P2P 能力和通信库配置决定。CUDA 多 GPU 编程指南

NVLink 可以直接连接 GPU,也可以通过 NVSwitch 构建交换网络。NVSwitch 是转发 NVLink 流量的交换芯片,用于组织多 GPU 连接;是否存在交换网络、包含多少芯片,需要结合具体系统确认。NVIDIA HGX 平台

text
直接连接:GPU 0 ↔ NVLink ↔ GPU 1
交换连接:GPU 0 ↔ NVLink ↔ NVSwitch 网络 ↔ NVLink ↔ GPU 1

3.2 聚合带宽 ​

NVLink 规格通常给出每张 GPU 的多条链路聚合带宽,并可能采用双向合计口径。例如,Hopper 第四代 NVLink 的每 GPU 双向合计带宽可达 900 GB/s,对应对称收发时每方向 450 GB/s。NVIDIA Hopper 架构

每 GPU 的聚合值不能理解为每个对端都能同时独占该带宽。多对 GPU 并发通信还会受到端点总带宽、网络拓扑和流量分布的约束;GPU 本地 HBM 带宽描述访问自身显存的能力,也不能替代 GPU 间传输带宽。

3.3 拓扑标记 ​

nvidia-smi topo -m 展示 GPU 间连接及主机亲和关系,nvidia-smi topo -mp 则排除 NVLink,单独展示 PCIe 路径。以下标记用于阅读后文示例,含义见 NVIDIA System Management Interface 文档:

标记路径含义
PIX经过至多一个 PCIe Bridge
PXB经过多个 PCIe Bridge,不经过 PCIe Host Bridge
PHB经过 PCIe Host Bridge
NODE经过同一 NUMA 节点内多个 PCIe Host Bridge 之间的互联
SYS经过 PCIe 及 NUMA 节点之间的系统互联
NV#经过由 # 条 NVLink 聚合而成的连接

NV18 是链路聚合标记,不能单独确定 NVLink 代际、交换芯片数量或实测带宽。topo -mp 中的 SYS 说明 PCIe 路径跨 NUMA,不代表同时存在的 NVLink 路径也要经过 CPU 间互联。

4. 示例 ​

以下三个示例基于 2026-09-11 采集的拓扑,展示系统报告的连接关系。图中 PCIe 数值为理论带宽,HBM 和 NVLink 数值为产品规格参考值,只有 RTX PRO 5000 的 peer-read 数字来自带宽测试。

虚线框表示主机侧 NUMA 域,GPU 0–3 亲和 NUMA 0,GPU 4–7 亲和 NUMA 1。紫色路径表示 PCIe,橙色路径表示 CPU 跨 NUMA 互联,绿色路径表示 NVLink;PCIe 主桥和 NVSwitch 均按逻辑路径合并,不表示实际交换芯片数量或内部布线。

4.1 H20 ​

该机器配置两颗 Xeon Platinum 8469C 和八张 H20。GPU 端与系统暴露的上游 PCIe 链路均为 Gen5 ×16;全部 GPU 对显示 NV18。排除 NVLink 后,PCIe 拓扑在同 NUMA 内显示 NODE,跨 NUMA 显示 SYS。

H20 机内拓扑:双 CPU、双 NUMA、八张 GPU,PCIe Gen5 ×16 与跨 NUMA 的 NVLink 交换网络

图中的 HBM 4 TB/s、NVLink 每 GPU 单向 450 GB/s/双向合计 900 GB/s 沿用 H20 公开产品资料口径,来源边界见 NVIDIA GPU 参数对比。此次拓扑采集未运行带宽测试。

该示例包含两套连接关系:主机侧 PCIe 路径区分同 NUMA 与跨 NUMA,GPU 侧则显示全体 GPU 对可经 NVLink 连接。因此,GPU 0 与 GPU 4 的主机亲和节点不同,并不意味着两者使用 NVLink 通信时需要跨越 CPU 间互联。

4.2 B300 ​

该示例配置两颗 Xeon 6776P 和八张 GPU。每张 GPU 的主机上行均为 PCIe Gen5 ×16,GPU 端报告 Gen6 ×16;全部 GPU 对显示 NV18,排除 NVLink 后仍为组内 NODE、跨组 SYS。

B300 示例机内拓扑:双 CPU、双 NUMA、八张 GPU,主机上行 PCIe Gen5 ×16、GPU 端 Gen6 ×16,以及 NVLink 交换网络

B300 为示例名称,物理型号尚未核实。 当前驱动名称为 NVIDIA L20D,compute_cap 为 8.9,与 GPU 端 Gen6 ×16、全体 GPU 对 NV18 的报告存在需要核实之处。图中 HBM 8 TB/s、NVLink 每 GPU 单向 900 GB/s/双向合计 1.8 TB/s 使用 B300 标称值,不作为该机器的实测规格或带宽。系统未暴露可枚举的 NVSwitch 芯片,交换网络仅作逻辑示意。

该示例说明,GPU 端报告的链路能力需要与主机上行能力分别解读,示例名称也不能替代物理型号核验。B300 的产品规格参考 NVIDIA HGX 平台及 NVIDIA DGX B300 用户指南。

4.3 RTX PRO 5000 ​

该机器配置两颗 EPYC 9A75 和八张 RTX PRO 5000 Blackwell。主机上行与 GPU 端的最大 PCIe 能力均为 Gen5 ×16,未显示 NVLink 路径。同 NUMA 内的 GPU 对通过多个 PCIe Host Bridge 连接,显示 NODE;跨 NUMA 的 GPU 对显示 SYS。

RTX PRO 5000 机内拓扑:双 CPU、双 NUMA、八张 GPU,经 PCIe Gen5 ×16 连接,标出同 NUMA 与跨 NUMA 的 peer-read 实测带宽

图中的测试使用 16 MiB 数据、双向并发 peer-read,即两张 GPU 同时读取对端显存,运行于共享卡环境:

GPU 对PCIe 路径双向并发时的单方向带宽双向合计
GPU 0 ↔ GPU 3同 NUMA,NODE约 39.6 GB/s79.1 GB/s
GPU 0 ↔ GPU 4跨 NUMA,SYS约 28.0 GB/s55.9 GB/s

在这组测试条件下,跨 NUMA 的 GPU 对带宽更低,但不能将差异推广为所有负载下的固定比例。表中的单方向数值来自双向并发测试,不能视为独立单向测试结果;端到端 GPU P2P 测量包含整条路径的影响,也不能用来直接推定 CPU 间互联带宽。三台机器均未单独测量 CPU 间互联带宽。

5. 参考 ​

  1. Linux Kernel:What is NUMA?
  2. PCI-SIG:PCI Express 代际与编码演进
  3. PCI-SIG:PCI Express 6.0 Specification
  4. NVIDIA:CUDA 多 GPU 编程指南
  5. NVIDIA:System Management Interface 拓扑说明
  6. NVIDIA:Hopper GPU Architecture
  7. NVIDIA:HGX 平台规格
  8. NVIDIA:DGX B300 用户指南