AMD GPU 虚拟功能监控工具 | AI生成和翻译

Home 2026.05

以下是我所做工作的全面分解:


目标

在远程服务器上为AMD GPU创建一个相当于nvidia-smi的工具,因为标准rocm-smi无法检测到该GPU。


阶段1:远程访问与发现

SSH登录 — 基于密钥的身份验证已设置,无阻碍。

ssh root@134.199.199.108

首次尝试 — 直接运行rocm-smi,得到command not found。这是AMD与nvidia-smi对应的明显工具,但未安装。

搜索替代方案 — 检查了amd-smirocminfoclinfo,并查看/opt/rocm*/目录。无结果。只安装了libdrm-amdgpu1(一个最小的DRM用户空间库)。


阶段2:硬件识别

lspci扫描 — 关键发现。在83:00.0找到GPU:

Processing accelerators: AMD/ATI Aqua Vanjaram [Instinct MI300X VF]

关键细节:这是一个VF(虚拟功能),而非PF(物理功能)。这是SR-IOV——物理GPU由虚拟机管理程序分区,该虚拟机获得一个虚拟切片。

检查/sys/class/drm/ — 只有card0renderD128。没有amdgpu特定的sysfs条目(无gpu_busy_percent、无mem_info_vram_*、无hwmon)。这证实了VF限制——未暴露管理接口。

检查/sys/class/kfd/拓扑 — 只有一个CPU节点,没有GPU节点。KFD(内核融合驱动,AMD的计算驱动)不枚举SR-IOV VF。

直接读取PCI sysfs — 这是真实数据所在:

lspci -vv — 提供了内存BAR布局:256 GB BAR位于0x4000000000,确认了完整的HBM3分配。


阶段3:安装rocm-smi(部分成功)

添加AMD ROCm apt仓库https://repo.radeon.com/rocm/apt/latest noble。”noble”(Ubuntu 24.04)仓库在25.10上工作,因为包大多是用户空间的。

安装rocm-smiapt install rocm-smi。成功。

运行它rocm-smirocm-smi --alldevices --showhw都返回”没有指定AMD GPU”并显示空表。这验证了假设:rocm-smi依赖于KFD(/sys/class/kfd/),而VF上没有KFD。


阶段4:构建amd-smi(自定义工具)

由于rocm-smi无法看到GPU,我编写了一个Python脚本,读取相同的数据源但完全绕过KFD依赖。

使用的数据源:

信息 来源
GPU名称、BARs lspci -s <bdf> -vv
设备/供应商ID /sys/bus/pci/devices/<bdf>/devicevendorsubsystem_*
PCIe链路速度/宽度 /sys/bus/pci/devices/<bdf>/current_link_speedcurrent_link_widthmax_link_*
NUMA节点 /sys/bus/pci/devices/<bdf>/numa_node
电源状态 /sys/bus/pci/devices/<bdf>/power_state
IRQ /sys/bus/pci/devices/<bdf>/irq
可调节BAR /sys/bus/pci/devices/<bdf>/resource0_resize
驱动版本 /sys/module/amdgpu/version

设备过滤逻辑 — 遍历/sys/bus/pci/devices/*,检查:

  1. vendor == 0x1002 (AMD)
  2. class0x03(显示)或0x12(处理加速器)开头

这能捕获GPU和计算加速器(如MI300X)。

部署障碍:

安装到 /usr/local/bin/amd-smi,执行chmod +x


阶段5:Bug修复

首次运行显示Device ID: 0x0x74b5 — sysfs文件已经包含了0x前缀,我的代码又加了一个。通过添加.removeprefix("0x")修复读取,本地打补丁后重新scp。


关键经验

  1. SR-IOV VF对KFD/rocm-smi不可见 — 标准AMD工具依赖于KFD拓扑,而KFD不枚举虚拟功能。必须回退到原始PCI sysfs。

  2. PCI class 0x12 = 处理加速器 — MI300X不识别为VGA设备(class 0x03),因此GPU检测必须包含加速器类。

  3. SSH heredoc在嵌套引用时脆弱write_file + scp是向远程主机部署脚本的可靠模式。

  4. 来自apt的rocm-smi可在非LTS Ubuntu上工作 — AMD为”noble”(24.04)打包的包在25.10上安装良好,因为它们是用户空间库,无内核模块依赖。

  5. PCI sysfs值中的0x前缀/sys/bus/pci/devices/*/vendor/device返回如0x1002的值,而非原始十六进制。格式化前需要去除。


Back Donate