专栏算法工具链该修改后的bin模型能反量化融合吗

该修改后的bin模型能反量化融合吗

XSXXH2023-09-25
22
23

用户您好,请详细描述您所遇到的问题,这会帮助我们快速定位问题~

1.芯片型号:J5等
2.天工开物开发包OpenExplorer版本J5_OE_1.1.62
3.问题定位:板端模型dequantize节点的反量化融合问题
4.问题具体描述:原始的板端bin模型结构图如下:(这个模型肯定不支持反量化融合,没有紧邻output节点)

于是我把原始bin模型slice,reshape节点全部放在BPU上,得到中间的bin模型,如图:(hb_perf后slice,reshape节点不显示了)

最后我对这个中间bin模型删除dequantize节点,能否进行反量化融合?(slice,reshape搬到BPU上运行,为什么结构图不显示了)隐藏的slice,rshape会影响反量化融合吗。删除dequantize后如图,能反量化融合吗(会不会受隐藏的BPU上运行的slice,rehspae影响)

算法工具链
评论1
0/1000
  • 颜值即正义
    Lv.2

    slice,reshape搬到BPU上运行,此时他们会被融进torch_jit_subgraph_0这个BPU子图里,此时可以进行反量化融合。总而言之,反量化节点在靠近输出的位置,就是可以的。

    2023-09-25
    0
    22
    • XSXXH回复颜值即正义:

      好的感谢

      2023-09-25
      0
    • XSXXH回复颜值即正义:

      还有一个问题,hb_model_modifier只记录了4个dequantize节点的scale值,而且每个dequantize节点的scale值只有1个且值均相同(因为都是原始bin模型的同一个dequantize进行反量化而来),没有zero_point的值,这正常吗。

      2023-09-25
      0
    • XSXXH回复颜值即正义:
      slice reshape融合进去torch_jit_subgraph_0后,是哪个节点的值乘以scale呢?是BPU里面的reshape节点吗?还是原始bin中deqauntize前面的那一个节点?
      2023-09-25
      0
    • 颜值即正义回复XSXXH:

      建议看一下这篇文章:https://developer.horizon.cc/forumDetail/116476291842200072

      2023-09-25
      0
    • 颜值即正义回复XSXXH:

      bin模型中删除反量化节点的前一个节点

      2023-09-25
      0
    • XSXXH回复颜值即正义:

      因为我是将原始模型的slice ,reshape搬到BPU上,(这样slice reshape融合进了BPU中),然后我删除了dequantize。那最终删除后,是那个节点乘以scale呢?是reshape吗(slice reshape融合进torch_jit_subgraph_0应该是删除dequantize前的相邻节点吧),还是torch_jit_subgraph_0中slice,reshape前面的节点?

      原始bin的网络各层节点检查

      我把CPU算子 slice reshape放在BPU上后

      现在是那个算子乘以scale?

      2023-09-25
      0
    • XSXXH回复颜值即正义:

      是Slice_56_NHWC2NCHW_LayoutConvert_Output0_reshape

      Slice_63_NHWC2NCHW_LayoutConvert_Output0_reshape

      Slice_70_NHWC2NCHW_LayoutConvert_Output0_reshape

      Slice_77_NHWC2NCHW_LayoutConvert_Output0_reshape 分别乘以scale吗

      2023-09-25
      0
    • XSXXH回复颜值即正义:

      工程师你好,ai_benchmark里面有没有尾部有多个分支的反量化融合的例子啊,就是删除dequantize后,有多个分支乘以scale的例子,我琢磨一下

      2023-09-25
      0
    • 颜值即正义回复XSXXH:

      不需要知道具体给哪个算子乘scale,只要给所有的输出数据乘就可以了,知道是哪个scale没有实际意义

      2023-09-25
      0
    • 颜值即正义回复XSXXH:

      每个输出分支都有名字的,不需要根据算子名去区分

      2023-09-25
      0
    • XSXXH回复颜值即正义:

      工程师你好,你的意思是我删除dequanize获取节点scale值以后,直接在后处理函数中对模型的4个输出output进行乘以scale值是吗(也就是图中的loc_row,loc_col,exist_row,exist_col乘以scale值???日志记录中scale都是相同的且值有一个,zero_point没有应该是0)

      2023-09-26
      0
    • XSXXH回复颜值即正义:

      工程师你好,output有4个分支,output[0],output[1],output[2],output[3]分别对应4个输出分支,按你的意思,我只要output乘以scale值,然后把output*scale的值作为新的output传入后处理函数,是这样吧

      2023-09-26
      0
    • 颜值即正义回复XSXXH:
      如果4个scale值都相同那就更好办了,都不用判断是谁乘谁。反量化就是输出x scale(通常都是对称量化,没有零点),你把反量化节点删了,那么自己在代码中补一下乘法计算就可以了,就是output*scale
      2023-09-26
      0
    • XSXXH回复颜值即正义:

      好的感谢我这周试试,因为我看删除记录里scale值都相同,而且sclae值只有一个,0.09206186980009079我看很多例子scale的值有一长串,这让我有点迷惑,我试试

      2023-09-26
      0
    • XSXXH回复颜值即正义:

      这是传入output后进行后处理,那我只要在给后处理函数传入output之前,把output*scale,那4个分支output[0] ,[1],[2].[3]不久都实现了乘以scale吗,理论上是这样把

      2023-09-26
      0
    • XSXXH回复颜值即正义:

      还有一个问题,因为原始模型dequantize在中间无法进行反量化,于是我把8个尾部CPU算子挪到BPU上来构造可以量化的条件,之后我板端测试hrt_model_exec perf,他的帧率是有下降10fps的,不知道反量化融合成功以后能否提升原始帧率

      2023-09-26
      0
    • XSXXH回复XSXXH:

      按理来说,8个CPU算子挪到BPU上运行应该更快,帧率应该会提升啊,反而降了,我也不清楚如果反量化融合成功呢能否提高原始帧率数据

      2023-09-26
      0
    • 颜值即正义回复XSXXH:

      根据你的截图来看,你提供的是hb_perf的性能测试结果,hb_perf是不计算CPU耗时的,不够准确,实际还是以板端hrt_model_exec perf为主哈。

      2023-09-26
      0
    • XSXXH回复颜值即正义:

      就是在板端hrt_model_exec perf测试比没搬到BPU上降了10fps,非常让人迷惑。但是这样的唯一好处在于结构变了理论上可以反量化融合了,不知道能否成功反量化融合,能否带来可观的帧率提升

      2023-09-26
      0
    • 颜值即正义回复XSXXH:

      反量化融合,本质上就是把反量化算子从模型中摘除,将反量化写到后处理,该做的计算还是会做的,减少了数据遍历的次数,会带来一定的性能提升,但能不能平衡掉这10FPS还需要实验验证。

      2023-09-26
      0
    • 颜值即正义回复XSXXH:

      还有一种方法就是借助DSP,可以参考手册的DSP章节,利用好OE包提供的现成的镜像就可以了,不需要再重新编译

      2023-09-26
      0
    • XSXXH回复颜值即正义:

      好的,非常感谢

      2023-09-26
      0