专栏算法工具链J5 自定义算子调用

J5 自定义算子调用

已解决
🧐cly2025-03-14
47
6

目前我的模型中含有自定义算子,根据示例使用hb_mapper 程序可以生成.bin文件, 也实现了c++的定义,但是对于如何将c++自定义算子注册进入*.bin文件的示例没有看得太明白. 

有几个问题想请教一下:

  1. 是否不能直接使用hb_mapper maretbin来编译*.bin文件,因为这样生成的*.bin文件并不包含自定义算子的运行.

  2. 如果1正确, 如何生成含带自定义算子的*.bin文件呢? 示例中只给出了使用cmake进行编译, 然后是否有程序可以直接plugin自定义算子进行编译?

  3. 是否使用了自定义算子就没有办法使用hrt_model_exec来执行模型? 

  4. 如果3成立的话,应该如何做精度及性能仿真测试?

算法工具链
征程5
评论2
0/1000
  • Huanghui
    Lv.5
    你好,对于问题液1,在生成bin文件之后,还不能直接上班推理, 你需要先提供自定义算子的C++代码实现。 然后CMakeLists.txt里面包含你的实现头文件, 然后在应用程序中增加对算子的注册即可,注册请参考以下代码:
    #include "custom_identity_add1.h"
    #include "custom_identity_add2.h"
    hbDNNRegisterLayerCreator("Cop1", hobot::dnn::Cop1_layer_creator); hbDNNRegisterLayerCreator("Cop2", hobot::dnn::Cop2_layer_creator); ....


    问题2:
    你可以直接写ONNX模型,自定义算子直接在onnx里面实现,也可以从pytorch框架转换得到,不过也要写你自定义算子实现过程,然后将其加入到模型中,这个示例代码J5oe包里面也有;


    问题3:
    你可以推理试一下。、

    问题4:
    使用hb_perf***.bin做性能测试估计性能。
    2025-03-17
    0
    3
    • 🧐cly回复Huanghui:

      补充问一下 我的问题 其实是想知道是否自定义算子必须加入到main.cpp中,然后调用模型,使用main.cpp生成bin,而不是hrt_model_exec编译工具?且不可以使用动态链接库进行调用? 因为hrt_model_exec 似乎不支持调用动态链接库, example中也并没有这样的例子

      另外hb_perf不是静态仿真吗?动态还是需要使用hrt_model_exec来运行是吧

      2025-03-17
      0
    • Huanghui回复🧐cly:
      自定义算子在板端也得提供c++实现代码,然后在main.cpp里面注册,注意cmake里面也要添加对模板文件的包含。 注册示例代码就是
      #include "custom_identity_add1.h"
      #include "custom_identity_add2.h"
      hbDNNRegisterLayerCreator("Cop1", hobot::dnn::Cop1_layer_creator);
      hbDNNRegisterLayerCreator("Cop2", hobot::dnn::Cop2_layer_creator);
      2025-03-17
      0
    • Huanghui回复🧐cly:

      你量化得到的bin模型,也得有python版本的算子实现,并且注册。

      2025-03-17
      0
  • Huanghui
    Lv.5

    整个流程在J5 ,ptq6.2自定义算子章节有介绍,你可以看下

    2025-03-17
    0
    1
    • 🧐cly回复Huanghui:

      谢谢

      2025-03-17
      0