Skip to content

GPU 拓扑结构

Example

bash
ydy@zju:~/hcy/projects/cuda_practice$ nvidia-smi topo -m
	GPU0	GPU1	GPU2	GPU3	GPU4	GPU5	GPU6	GPU7	CPU Affinity	NUMA Affinity	GPU NUMA ID
GPU0	 X 	NV12	NV12	NV12	NV12	NV12	NV12	NV12	0-31,64-95	0		N/A
GPU1	NV12	 X 	NV12	NV12	NV12	NV12	NV12	NV12	0-31,64-95	0		N/A
GPU2	NV12	NV12	 X 	NV12	NV12	NV12	NV12	NV12	0-31,64-95	0		N/A
GPU3	NV12	NV12	NV12	 X 	NV12	NV12	NV12	NV12	0-31,64-95	0		N/A
GPU4	NV12	NV12	NV12	NV12	 X 	NV12	NV12	NV12	32-63,96-127	1		N/A
GPU5	NV12	NV12	NV12	NV12	NV12	 X 	NV12	NV12	32-63,96-127	1		N/A
GPU6	NV12	NV12	NV12	NV12	NV12	NV12	 X 	NV12	32-63,96-127	1		N/A
GPU7	NV12	NV12	NV12	NV12	NV12	NV12	NV12	 X 	32-63,96-127	1		N/A

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing at most a single PCIe bridge
  NV#  = Connection traversing a bonded set of # NVLinks

nvidia-smi topo -m 拓扑结构解释

这个命令显示的是 GPU 之间以及 GPU 与 CPU 之间的互联拓扑关系

矩阵含义

矩阵中每个单元格表示两个 GPU 之间的连接方式:

标识含义
X自身
NV12通过 12 条 NVLink 绑定连接
SYS跨 NUMA 节点,经过 PCIe + QPI/UPI 互联(最慢)
NODE同一 NUMA 节点内,经过 PCIe Host Bridge 互联
PHB经过 PCIe + 单个 Host Bridge
PXB经过多个 PCIe Bridge
PIX最多经过一个 PCIe Bridge

你这台机器的情况

所有 GPU 之间都是 NV12,说明:

  • 8 块 A100 全部通过 NVLink 全互联,带宽极高
  • NVLink 12 条指的是两块 GPU 之间有 12 条 NVLink 通道绑定,A100 的 NVLink 3.0 单条带宽约 25 GB/s,12 条即 300 GB/s 双向带宽

CPU Affinity 和 NUMA Affinity

GPU0~3  →  CPU 0-31, 64-95  →  NUMA Node 0
GPU4~7  →  CPU 32-63, 96-127 →  NUMA Node 1

这说明服务器有 2 个 NUMA 节点(2 颗物理 CPU),GPU 0-3 亲和于第一颗 CPU,GPU 4-7 亲和于第二颗 CPU。

实际影响:如果你的程序只用 GPU 0-3,最好把进程绑定到 CPU 0-31 上运行,避免跨 NUMA 访问内存带来的延迟。

总结

这台机器的互联条件非常好 —— 8 块 A100 全部 NVLink 全互联,非常适合做多卡并行训练(如张量并行、流水线并行),GPU 间通信几乎不会成为瓶颈。