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 # NVLinksnvidia-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 间通信几乎不会成为瓶颈。