2
DCU工具
migraphx自定义算子
2025-07-03 16:48:25
144

请教大佬

onnx模型中自定义算子c++实现,导入 migraphx,运行推理
环境版本:docker中,卡Z100L 2个,Ubuntu20.04.1,dtk23.10.1,MIGraphX version: 4.1.0,HIP version: 5.4.23453 clang version 15.0.0 Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /opt/dtk/llvm/bin
编译命令:
/opt/dtk/hip/bin/hipcc -std=c++17 -fPIC -shared -o lib_RegionProposal.so proposal.cpp
-I/opt/dtk/include
-L/opt/dtk/lib -lmigraphx
-Wl,-rpath=/opt/dtk/lib

python推理脚本:

//测试代码test3.py

import numpy as np
import os
import sys
import ctypes

设置环境变量(必须放在导入migraphx之前)

custom_lib_path = "/data/caffe_rfcn_project/rfcn_output/RegionProposal_migraphx/proposal2/lib_RegionProposal.so"
os.environ["MIGRAPHX_LOAD_CUSTOM_OPS"] = custom_lib_path
os.environ["MIGRAPHX_TRACE"] = "2" # 最高级别的跟踪
os.environ["MIGRAPHX_ENABLE_DEBUG"] = "1" # 启用调试信息

import migraphx

print("=" * 80)
print(f"自定义算子库路径: {custom_lib_path}")

1. 加载自定义算子库

custom_lib_path = "/data/caffe_rfcn_project/rfcn_output/RegionProposal_migraphx/proposal2/lib_RegionProposal.so"

migraphx.load_custom_ops(custom_lib_path)

尝试手动加载库

try:
print("尝试手动加载自定义算子库...")
lib = ctypes.CDLL(custom_lib_path)
print("✅ 手动加载自定义算子库成功")

# 尝试调用库中的函数
try:
    lib.custom_op_entry_point()
    print("✅ 成功调用自定义算子库中的函数")
except AttributeError:
    print("⚠️ 无法调用 custom_op_entry_point 函数")

except Exception as e:
print(f"❌ 手动加载自定义算子库失败: {e}")
sys.exit(1)

打印MIGraphX已知的算子列表

print("=== MIGraphX已知算子列表 ===")
try:
ops = migraphx.list_ops()
for op_name in ops.keys():
print(f"算子: {op_name}")
except Exception as e:
print(f"无法获取算子列表: {e}")
print("=" * 80)

2. 加载 ONNX 模型

try:
model = migraphx.parse_onnx("/data/caffe_rfcn_project/rfcn_output/RegionProposal_migraphx/proposal2/rfcn_modified.onnx")
except Exception as e:

检查错误是否与算子相关

if "Unknown operator: RegionProposal" in str(e):

尝试添加算子域

migraphx.load_custom_ops(custom_lib_path, domain="ai.onnx")
model = migraphx.parse_onnx("/data/caffe_rfcn_project/rfcn_output/RegionProposal_migraphx/proposal2/rfcn_modified.onnx")
else:
raise

3. 编译模型

model.compile(migraphx.get_target("gpu"))

4. 准备输入数据

inputs = {
"cls_prob": np.random.randn(1, 2, 38, 50).astype(np.float32),
"bbox_pred": np.random.randn(1, 8, 38, 50).astype(np.float32),
"im_info": np.array([[600, 800, 1.0]], dtype=np.float32)
}

5. 执行推理

results = model.run(inputs)

报错找不到算子:
尝试手动加载自定义算子库...
=== RegionProposal 自定义算子库已加载 ===
自定义算子名称: RegionProposal
手动加载自定义算子库成功
自定义算子入口点被调用
RegionProposal 算子注册成功
=== 已注册算子列表 ===
总算子数量: 299
算子名: @literal
算子名: @param
算子名: @return
算子名: RegionProposal
算子名: Shape
算子名: abs
算子名: acos
算子名: acosh
算子名: add
算子名: allocate
算子名: argmax
算子名: argmin
算子名: as_shape
算子名: asin
算子名: asinh
。。。。
算子名: where
成功调用自定义算子库中的函数
=== MIGraphX已知算子列表 ===
无法获取算子列表: module 'migraphx' has no attribute 'list_ops'

Traceback (most recent call last):
File "/data/caffe_rfcn_project/rfcn_output/RegionProposal_migraphx/proposal2/test3.py", line 52, in <module> 
model = migraphx.parse_onnx("/data/caffe_rfcn_project/rfcn_output/RegionProposal_migraphx/proposal2/rfcn_modified.onnx")
RuntimeError: /home/migraphx-V4.1.0_DTK/src/onnx/onnx_parser.cpp:338: parse_graph: Unknown operator: RegionProposal

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/data/caffe_rfcn_project/rfcn_output/RegionProposal_migraphx/proposal2/test3.py", line 57, in <module> 
migraphx.load_custom_ops(custom_lib_path, domain="ai.onnx")
AttributeError: module 'migraphx' has no attribute 'load_custom_ops

全部评论(1)
只看楼主
H
hepj
1楼
您反馈的已收到,目前正在复现您的问题进行排查分析
2025/7/18
没有更多内容了
--
楼主
Level.1
0 帖子
楼主热帖
暂无数据