ONNX Runtime 基于 ROCm 执行提供程序安装后验证显卡识别是否成功的检查清单

文章导读
这份清单用于在完成 ONNX Runtime 和 ROCm 执行提供程序(Execution Provider, EP)安装后,逐项确认显卡是否真正被 ONNX Runtime 识别并在会话中可用。判断标准不是“安装包里有这个 provider”,而是“启动推理会话时,ONNX Runtime 确实把计算放到 AMD GPU 上”。下面按环境、运行时、实际执行三层检查。
📋 目录
  1. 一 1. 环境层:确认 ROCm 本身识别 GPU
  2. 二 2. 库层:确认 onnxruntime 暴露 ROCm EP
  3. 三 3. 执行层:用显式 provider 创建会话并运行推理
  4. 四 4. 常见排查点:版本、可见设备与动态库
A A

这份清单用于在完成 ONNX Runtime 和 ROCm 执行提供程序(Execution Provider, EP)安装后,逐项确认显卡是否真正被 ONNX Runtime 识别并在会话中可用。判断标准不是“安装包里有这个 provider”,而是“启动推理会话时,ONNX Runtime 确实把计算放到 AMD GPU 上”。下面按环境、运行时、实际执行三层检查。

验证核心分三层:系统层确认 ROCm 能看到显卡,运行时层确认 onnxruntime 暴露了 ROCMExecutionProvider,执行层确认用该 provider 创建会话并成功完成推理。如果 provider 列表没有它,先查安装方式和版本;如果列表有但运行报错,先查 HIP_VISIBLE_DEVICES 和日志。不要用 provider 是否存在代替实跑验证。

1. 环境层:确认 ROCm 本身识别 GPU

先确认系统驱动和 ROCm 栈正常,因为 ONNX Runtime 的 ROCm EP 依赖这些底层组件。

查看输出:

rocm-smi

或者

rocminfo

核对输出中能够看到类似 gfx906、gfx90a、gfx1100 的显卡型号名称。若没有显卡信息,先解决驱动或 ROCm 安装问题,再继续。

ONNX Runtime 基于 ROCm 执行提供程序安装后验证显卡识别是否成功的检查清单

如果上述命令无法运行,检查是否把 ROCm bin 目录加入 PATH,例如 /opt/rocm/bin;或者你用的是容器镜像,需要确认镜像内已经安装 ROCm 工具。

2. 库层:确认 onnxruntime 暴露 ROCm EP

在 Python 环境中直接查询可用 provider 列表:

import onnxruntime as ort
print(ort.get_available_providers())

如果列表中有 ROCMExecutionProvider,说明当前安装的 onnxruntime 编译时带上了 ROCm 支持。如果列表缺失,大概率你安装的是官方默认 CPU 版本或没有包含 ROCm 的预编译包,需要查看安装方式。

注意:这里不要只看名称,还要确认这个 provider 是否能正常加载。有时候安装版本不对,或者依赖的动态库缺失,provider 不会被列出。可以用 ort.get_available_providers() 的输出为准。

ONNX Runtime 基于 ROCm 执行提供程序安装后验证显卡识别是否成功的检查清单

3. 执行层:用显式 provider 创建会话并运行推理

建议用一段固定脚本验证,而不是只看列表。以下脚本使用你本机的一个 ONNX 模型,并强制优先使用 ROCMExecutionProvider:

import onnxruntime as ort

sess_options = ort.SessionOptions()
sess_options.log_severity_level = 0  # verbose

sess = ort.InferenceSession(
    'path/to/model.onnx',
    sess_options=sess_options,
    providers=['ROCMExecutionProvider', 'CPUExecutionProvider']
)
print('实际使用的 providers:', sess.get_providers())

运行后,观察输出:

  • 如果 get_providers() 列表第一个是 ROCMExecutionProvider,说明会话选中了 ROCm。
  • 如果自动回退到 CPUExecutionProvider,说明初始化 ROCm 失败,需继续看日志。
  • 如果创建会话时直接抛异常,通常会在错误信息中涉及 HIP/ROCm 或设备编号,要把完整报错信息收集起来。

再往下一步,输入真实数据执行一次推理,确认没有运行时错误。这里不需要关心性能数值,只要不报错并能得到与 CPU 相似的结果就能证明“显卡被识别”。

4. 常见排查点:版本、可见设备与动态库

  • 检查 ONNX Runtime 和 ROCm 的版本匹配:不同版本的 ONNX Runtime 对 ROCm 版本有要求,且 ROCm EP 在部分版本中已进入维护模式。安装前应查看对应版本的官方发布说明,确认你使用的组合仍受支持。这里不列具体版本号,因为不同发行版差异很大。
  • 确认 GPU 对 ONNX Runtime 可见:环境变量 HIP_VISIBLE_DEVICES 可以限制设备编号。执行 echo $HIP_VISIBLE_DEVICES,如果是空,则所有设备都可见;如果设了非零值,确认该编号与 rocminfo 里显示的编号一致。
  • 如果 provider 出现在列表但创建会话失败,先查看 ldd 或 hsa相关动态库是否可找到。可以用 python -c 'import onnxruntime; print(onnxruntime.__file__)' 定位安装路径,再用 ldd 检查关键库。不过这一步需要结合日志。

以上清单全部通过,只能说明设备被识别,不代表所有算子都能在 ROCm 上高效运行。如果后续发现部分模型运行很慢,需要检查算子是否被支持。