在ROCm的性能测试中,常常需要确认系统上的GPU之间的topology信息,以此来评估数据传输理论速度和性能。另外在调试性能问题时,也需要经常确认topology信息。这里给出了rocm-smi给出的一些常用命令。
1. 命令总览
rocm-smi --showtopo # 显示完整拓扑(推荐首选)
rocm-smi --showtopoaccess # GPU间链路可访问性
rocm-smi --showtopoweight # GPU间权重/距离
rocm-smi --showtopohops # GPU间跳数
rocm-smi --showtopotype # 链路类型(PCIE/XGMI)
rocm-smi --showtoponuma # NUMA节点信息
2. 详细说明
1. 完整拓扑信息(最常用)
该命令是–showtopoweight --showtopohops --showtopotype --showtoponuma 四个参数的集合,所以最常用。
rocm-smi --showtopo
输出内容:
- Weight between two GPUs: GPU间的"距离"权重
- Hops between two GPUs: GPU间需要经过的跳数
- Link Type: 连接类型(PCIE、XGMI等)
- Numa Nodes: NUMA节点分配
示例输出:
GPU0 GPU1 GPU2
GPU0 0 40 40
GPU1 40 0 40
GPU2 40 40 0
解释:
- 对角线为0(自己到自己)
- GPU0↔GPU1 权重=40,表示"较远"的连接
- 权重越大 = 距离越远 = 性能越差
2. 链路可访问性
rocm-smi --showtopoaccess
输出内容: GPU间是否可以直接访问(P2P)
示例输出:
GPU0 GPU1 GPU2
GPU0 True False False
GPU1 False True False
GPU2 False False True
解释:
True: 可以访问(但仅限于自己)False: 不可访问(GPU0↔GPU1之间)
3. GPU间权重
rocm-smi --showtopoweight
输出内容: 相对权重值(距离度量)
权重值含义:
| 权重范围 | 含义 | 说明 |
|---|---|---|
| 0 | 同一设备 | GPU自己到自己 |
| 10-15 | 非常近 | 同一XGMI域 |
| 20-30 | 较近 | 1跳PCIe |
| 40-50 | 较远 | 2跳PCIe,需要经过CPU |
| >50 | 很远 | 跨NUMA节点 |
4. GPU间跳数
rocm-smi --showtopohops
输出内容: GPU间的物理跳数
示例输出:
GPU0 GPU1 GPU2
GPU0 0 2 2
GPU1 2 0 2
GPU2 2 2 0
跳数含义:
| 跳数 | 含义 | 说明 |
|---|---|---|
| 0跳 | 同一设备 | GPU内部 |
| 1跳 | 直接相连 | 同一PCIe Switch |
| 2跳 | 需要经过CPU | 跨Root Port |
| 3+跳 | 多级交换/路由 | 复杂拓扑 |
5. 链路类型
rocm-smi --showtopotype
输出内容: GPU间的物理连接类型
可能的链路类型:
PCIE: PCIe连接XGMI: AMD Infinity Fabric高速互连(仅MI系列)N/A: 不适用
示例输出:
GPU0 GPU1 GPU2
GPU0 0 PCIE PCIE
GPU1 PCIE 0 PCIE
PCIE vs XGMI对比:
| 类型 | 带宽 | 适用产品 |
|---|---|---|
| PCIE 4.0 x16 | ~31 GB/s | 消费级显卡 |
| XGMI | ~200-600 GB/s | MI250X/MI300系列 |
6. NUMA节点
rocm-smi --showtoponuma
输出内容: GPU所属的NUMA节点
示例输出:
GPU[0]: Numa Node: 0, Affinity: -1
GPU[1]: Numa Node: 0, Affinity: -1
GPU[2]: Numa Node: 0, Affinity: -1
NUMA Affinity = -1 表示:
- GPU可以从任何NUMA节点访问
- 没有特定的NUMA亲和性绑定
3. 组合使用示例
完整诊断脚本
cat << 'SCRIPT' > check_gpu_topology.sh
#!/bin/bash
echo "===== GPU 拓扑完整诊断 ====="
echo ""
echo "1. 完整拓扑信息:"
rocm-smi --showtopo
echo ""
echo "2. P2P访问能力:"
rocm-smi --showtopoaccess
echo ""
echo "3. PCIe链路状态:"
for gpu in 03:00.0 09:00.0 10:00.0; do
echo "GPU $gpu:"
sudo lspci -vv -s $gpu 2>/dev/null | grep "LnkSta:" | head -1
done
echo ""
echo "4. GPU信息:"
rocm-smi --showproductname
SCRIPT
chmod +x check_gpu_topology.sh
运行:
./check_gpu_topology.sh
4. 常见问题
Q: 为什么 --showtopoaccess 全是 False?
A: RX系列是消费级显卡,不支持GPU Direct P2P。只有AMD Instinct MI系列专业卡支持。
Q: 权重40是什么意思?
A: 权重是相对度量,数值越大表示GPU间"距离"越远。40表示2跳PCIe连接,需要经过CPU。
Q: 如何提升GPU间通信性能?
A: 通信性能差的硬件:
- 无法启用P2P(硬件不支持)
- 通过CPU内存中转(目前唯一选择)
- 或升级到MI系列专业卡
Q: XGMI是什么?
A: AMD Infinity Fabric的GPU互连技术
- 仅在MI250X/MI300等专业卡上可用
- 提供远超PCIe的带宽(200-600 GB/s)
- 支持GPU间直接内存访问
5. 显卡对比:消费级 vs 专业级
| 特性 | 值 |
|---|---|
| 链路类型 | PCIE |
| P2P支持 | ❌ False |
| 跳数 | 2 |
| GPU间带宽 | 无法直接传输 |
AMD Instinct MI250X(专业卡):
| 特性 | 值 |
|---|---|
| 链路类型 | XGMI |
| P2P支持 | ✓ True |
| 跳数 | 0-1(Infinity Fabric直连) |
| GPU间带宽 | ~200 GB/s |
6. 快速参考
最常用命令:
rocm-smi --showtopo # 一次性查看所有信息
检查P2P:
rocm-smi --showtopoaccess # 看是否支持GPU间直接访问
检查距离:
rocm-smi --showtopohops # 看跳数
rocm-smi --showtopoweight # 看权重
检查连接:
rocm-smi --showtopotype # PCIE还是XGMI
完整诊断:
./check_gpu_topology.sh # 运行上面创建的脚本
命令速查表
| 命令 | 说明 | 示例系统结果 |
|---|---|---|
rocm-smi --showtopo | 完整拓扑信息 | 推荐首选 |
rocm-smi --showtopoaccess | P2P访问能力 | False(不支持) |
rocm-smi --showtopoweight | GPU间距离 | 40(较远) |
rocm-smi --showtopohops | GPU间跳数 | 2跳 |
rocm-smi --showtopotype | 链路类型 | PCIE |
rocm-smi --showtoponuma | NUMA信息 | 全部在节点0 |
ROCM-SMI查看GPU链路方法
3885

被折叠的 条评论
为什么被折叠?



