拓扑信息(TOPOLOGY)
本篇主要讲解 nvidia-smi
命令的拓扑信息选项 topo
,使用命令如下:
nvidia-smi topo
该命令用于展示设备或者系统的拓扑结构。
拓扑信息选项,支持的参数列表如下:
[-m | --matrix]: 展示系统的 GPUDirect 通信矩阵
[-mp | --matrix_pci]: 展示系统的 GPUDirect 通信矩阵(仅包含pci链接)
[-i | --id]: 驱动程序返回的自然枚举中 GPU 的从 0 开始的索引、
GPU 的板序列号、GPU 的 UUID 或 GPU 的 PCI 总线 ID。
如果需要指定多个设备,可以使用逗号","将不同的id隔开。
必须和 -n 、-p 参数联合使用。
[-c | --cpu]: 展示与特定 CPU 亲和的 GPU 设备列表。
[-n | --nearest_gpus]: 展示对于给定遍历路径最近的 GPU 列表,支持的路径列表如下:
0 = 双GPU板上的单个PCIe交换机(例如Tesla K80)
1 = 单个PCIe交换机
2 = 多个PCIe交换机
3 = 单个PCIe主机桥
4 = PCIe 主机桥之间的 CPU 上互连链路
5 = NUMA 节点之间的 SMP 互连链路
必须与 -i 参数联合使用,且只能指定单个设备ID。
[-p | --gpu_path]: 展示一对GPU设备之间的最直接路径遍历,与 -i 一起使用,它必须是一对设备 ID。
[-p2p | --p2pstatus]: 显示给定 p2p 能力的 GPU 之间的 p2p 状态
r - p2p 读能力
w - p2p 写能力
n - p2p nvlink能力
a - p2p 原子能力
p - p2p 仅当所有 gpus 都支持 p2p 时才设置 p2p 属性
[-h | --help]: 展示帮助信息
各参数详解
-m 展示系统的 GPU Direct 通信矩阵
nvidia-smi topo -m
可以展示系统中 GPU 之间的互联关系、GPU 与 CPU 之间的绑定关系、以及 GPU 与网络接口卡(NIC)之间的连接。例如:
[root@c4 ~]# nvidia-smi topo -m
GPU0 GPU1 NIC0 NIC1 CPU Affinity NUMA Affinity GPU NUMA ID
GPU0 X SYS NODE NODE 0-15,32-47 0 N/A
GPU1 SYS X SYS SYS 16-31,48-63 1 N/A
NIC0 NODE SYS X PIX
NIC1 NODE SYS PIX X
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
NIC Legend:
NIC0: mlx5_0
NIC1: mlx5_1
1. GPU 之间的互联类型
X
:表示 GPU 自身。SYS(PCIe Host Bridge)
:GPU 间通信跨越 PCIe 主桥 或 SMP(对称多处理)互联结构。NODE
:跨越 NUMA 节点,可能涉及多个 CPU 插槽之间的通信,性能较差。PHB
:GPU 间通信通过 PCIe 和 PCIe 主机桥(通常是 CPU)。PXB(PCIe Multi-Bridge)
:GPU 间通信通过 多个 PCIe 桥。PIX(PCIe Single Bridge)
:GPU 间通信通过 单个 PCIe 桥。NV#
:通过数量为n组的 NVLinks 互连。
2. 网络接口卡(NIC)之间的连接
PIX
:连接最优,延迟最低,数据传输最快。PXB
:连接稍差,但仍然高效。SYS
:延迟较高,数据需通过系统 PCIe 总线。NODE
:最差的连接,跨 NUMA 节点,延迟和开销最大。
3. CPU Affinity 列表示每个 GPU 与哪些 CPU 核心相关联(绑定)。例如:
0-15,32-47
这表示 当前 GPU 会优先使用第 0 到 15 号核心,以及 32 到 47 号核心来进行数据调度和任务分配。
4. NUMA Affinity(NUMA 亲和性)
NUMA(Non-Uniform Memory Access)
表示非均匀内存访问架构。在多插槽服务器中,GPU 会与不同的 NUMA 节点绑定,NUMA 节点间的访问延迟较高
,应尽量避免跨 NUMA 节点的数据传输,减少通信延迟。
NUMA Affinity 标识 GPU 属于哪个 NUMA 节点,例如:
NUMA Affinity
0
如:GPU0:属于 NUMA 0
这些 GPU 直接连接到 NUMA 节点 0 的 PCIe 总线。
CPU Affinity 显示为 0-15,32-47,表示这些 GPU 更接近 NUMA 节点 0 的 CPU 核心。
总结:
连接类型 | 含义 | 特点 | 性能 |
---|---|---|---|
NV# | NVIDIA 高速互联技术 | GPU 间高速、低延迟直连 | 最快 |
PIX | PCIe 单桥接互联 | GPU 通过同一个 PCIe Switch 连接 | 高性能 |
PXB | PCIe 多桥接互联 | GPU 跨越多个 PCIe Switch 连接 | 较高性能 |
PHB | PCIe 主机桥互联 | 通过 CPU 的 PCIe Host Bridge 连接 | 中等性能 |
SYS | 系统级 PCIe 与 NUMA 互联 | 跨 NUMA 节点的 PCIe 连接 | 较低性能 |
NODE | NUMA 节点间互联 | GPU 连接不同 NUMA 节点 | 最慢,延迟最高 |
X | 自身互联 | GPU 自身连接 | N/A |
-i 指定GPU
id是驱动程序返回的自然枚举中 GPU 的从 0 开始的索引、GPU 的板序列号、GPU 的 UUID 或 GPU 的 PCI 总线 ID。 如果需要指定多个设备,可以使用逗号 ,
将不同的id隔开。必须与 -n 或者 -p 配合使用。
例如:
[root@c6 ~]# nvidia-smi topo -i 1,3 -p
Device 1 is connected to device 3 by way of an SMP interconnect link between NUMA nodes.
可以看到1和3之间最直接的遍历路径是 NUMA的SMP
(即SYS) 主机桥接。
-c 展示与特定 CPU 亲和的 GPU 设备列表
例如:
[root@c6 ~]# nvidia-smi topo -c 114
The GPUs that have an affinity with CPU 114 are:
2, 3
与 CPU 114 核心亲和的GPU设备列表为 2 和 3 。
-p2p 显示给定 p2p 能力的 GPU 之间的 p2p 状态
支持参数如下:
r
:p2p 读能力w
:p2p 写能力n
:p2p nvlink能力a
:p2p 原子能力p
:p2p 仅当所有 gpus 都支持 p2p 时才设置 p2p 属性
查询 GPU 之间的读能力
[root@c6 ~]# nvidia-smi topo -p2p r
GPU0 GPU1 GPU2 GPU3
GPU0 X OK OK OK
GPU1 OK X OK OK
GPU2 OK OK X OK
GPU3 OK OK OK X
Legend:
X = Self
OK = Status Ok
CNS = Chipset not supported
GNS = GPU not supported
TNS = Topology not supported
NS = Not supported
U = Unknown
可以看到读能力全支持。
查询 GPU 之间写能力
[root@c6 ~]# nvidia-smi topo -p2p w
GPU0 GPU1 GPU2 GPU3
GPU0 X OK OK OK
GPU1 OK X OK OK
GPU2 OK OK X OK
GPU3 OK OK OK X
Legend:
X = Self
OK = Status Ok
CNS = Chipset not supported
GNS = GPU not supported
TNS = Topology not supported
NS = Not supported
U = Unknown
可以看到写能力全支持。
查询 GPU 之间nvlink能力
[root@c6 ~]# nvidia-smi topo -p2p n
GPU0 GPU1 GPU2 GPU3
GPU0 X NS NS NS
GPU1 NS X NS NS
GPU2 NS NS X NS
GPU3 NS NS NS X
Legend:
X = Self
OK = Status Ok
CNS = Chipset not supported
GNS = GPU not supported
TNS = Topology not supported
NS = Not supported
U = Unknown
可以看到nvlink能力不支持。
查询全 GPU 互连能力
[root@c6 ~]# nvidia-smi topo -p2p p
GPU0 GPU1 GPU2 GPU3
GPU0 X OK OK OK
GPU1 OK X OK OK
GPU2 OK OK X OK
GPU3 OK OK OK X
Legend:
X = Self
OK = Status Ok
CNS = Chipset not supported
GNS = GPU not supported
TNS = Topology not supported
NS = Not supported
U = Unknown
可以看到全GPU p2p互连能力全支持。
GPU 通信技术——GPU Direct、NVLink、RDMA
可以从这里看:https://zhuanlan.zhihu.com/p/654417967
GPU通信技术 扩展阅读:
浅析GPU通信技术:GPUDirect RDMA:https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/86767266
本文参考链接:
查看显卡之间的拓扑结构(GPU topology):https://zhuanlan.zhihu.com/p/1338074637
NVIDIA-SMI系列命令详解(14)-拓扑信息:https://juejin.cn/post/7151226884351590431