机内
机内通信涉及主机内存与 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 文档
本地访问: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 编程指南
主机传输:系统 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. NVLink
3.1 GPU 互联
NVLink 是 NVIDIA 的高速互联技术。本文讨论其 GPU 间通信用途:数据通过 NVLink 在 GPU 间传输,减少对主机 PCIe 路径的依赖。张量并行中的 All-Reduce、All-Gather 等集合通信可以使用这类互联,但实际路径仍由拓扑、P2P 能力和通信库配置决定。CUDA 多 GPU 编程指南
NVLink 可以直接连接 GPU,也可以通过 NVSwitch 构建交换网络。NVSwitch 是转发 NVLink 流量的交换芯片,用于组织多 GPU 连接;是否存在交换网络、包含多少芯片,需要结合具体系统确认。NVIDIA HGX 平台
直接连接:GPU 0 ↔ NVLink ↔ GPU 1
交换连接:GPU 0 ↔ NVLink ↔ NVSwitch 网络 ↔ NVLink ↔ GPU 13.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。
图中的 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 为示例名称,物理型号尚未核实。 当前驱动名称为 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。
图中的测试使用 16 MiB 数据、双向并发 peer-read,即两张 GPU 同时读取对端显存,运行于共享卡环境:
| GPU 对 | PCIe 路径 | 双向并发时的单方向带宽 | 双向合计 |
|---|---|---|---|
| GPU 0 ↔ GPU 3 | 同 NUMA,NODE | 约 39.6 GB/s | 79.1 GB/s |
| GPU 0 ↔ GPU 4 | 跨 NUMA,SYS | 约 28.0 GB/s | 55.9 GB/s |
在这组测试条件下,跨 NUMA 的 GPU 对带宽更低,但不能将差异推广为所有负载下的固定比例。表中的单方向数值来自双向并发测试,不能视为独立单向测试结果;端到端 GPU P2P 测量包含整条路径的影响,也不能用来直接推定 CPU 间互联带宽。三台机器均未单独测量 CPU 间互联带宽。