判断是否使用 NVLink 和 RDMA,只需要看 两类信息:
1)GPU拓扑(是否有 NVLink)
2)NCCL 日志(是否走 RDMA)
一、判断 GPU 之间是否使用 NVLink
在每台服务器上执行:
nvidia-smi topo -m
输出类似:
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7
GPU0 X NV4 NV4 NV4 SYS SYS SYS SYS
GPU1 NV4 X NV4 NV4 SYS SYS SYS SYS
GPU2 NV4 NV4 X NV4 SYS SYS SYS SYS
GPU3 NV4 NV4 NV4 X SYS SYS SYS SYS
关键看这些标识:
| 标识 | 含义 |
|---|---|
| NV | NVLink |
| PIX | 同一个 PCIe Switch |
| PHB | 同一个 CPU |
| SYS | 跨 CPU |
例如:
NV4
说明:
GPU之间有4条 NVLink
如果全部是:
PIX / PHB / SYS
说明:
没有 NVLink,只是 PCIe。
二、判断 NVLink 是否真的在使用
执行:
nvidia-smi nvlink --status
输出示例:
GPU 0:
Link 0: Active
Link 1: Active
Link 2: Active
Link 3: Active
如果看到:
Active
说明 NVLink 已连接。
如果:
Inactive
说明没有使用。
三、判断是否使用 RDMA
这个要看 NCCL 日志。
启动推理前加环境变量:
export NCCL_DEBUG=INFO
然后运行 vLLM 或 PyTorch。
日志里会出现类似:
NCCL INFO NET/IB : Using mlx5_0
含义:
IB = Infiniband
说明:
正在使用 RDMA。
如果看到:
NCCL INFO NET/Socket
说明:
使用普通 TCP 网络。
速度会慢很多。
四、再确认服务器是否有 RDMA 网卡
执行:
ibv_devinfo
如果有输出:
hca_id: mlx5_0
说明机器有:
Infiniband / RoCE 网卡。
如果命令不存在:
说明系统没有 RDMA 驱动。
五、Kubernetes 环境额外检查
如果你在 K8s 里运行:
需要确认 Pod 能看到 RDMA 设备。
进入 Pod:
ls /dev/infiniband
如果看到:
uverbs0
rdma_cm
说明 RDMA 已挂载进容器。
六、最简单的判断方法(推荐)
其实只看两条就够了:
1 看 NVLink
nvidia-smi topo -m
2 看 NCCL 是否走 RDMA
运行推理时看日志:
NCCL INFO NET/IB
七、一个非常关键的现实情况
很多公司买了:
- H100
- Infiniband 网卡
但最后 实际跑的是 TCP 网络。
因为:
- RDMA 没配置
- K8s 没挂设备
- NCCL 选错网卡
结果性能可能差 5~20倍。
