专栏算法工具链QAT的compile流程中为什么要去掉模型的量化反量化节点?

QAT的compile流程中为什么要去掉模型的量化反量化节点?

已解决
XR2025-08-28
75
11

在j6的3.2.0版本完成centerpoint_pillar算法的QAT流程中,在量化模型编译时,发现运行compile_perf_hbir.py脚本时,会有删除模型的量化反量化节点,根据https://developer.horizon.auto/forum/12609帖子中的回答,得知删除节点是因为量化反量化跑在模型中是串行的,为了提升效率所以放到后处理中,但是量化和反量化的操作是乘加运算,理论上是可以在BPU中并行处理的,为什么会节省时间呢?

算法工具链
征程6
评论4
0/1000
  • Huanghui
    Lv.5

    你好,量化反量化操作实际上并没有在BPU上做,是在VPU上做的,BPU的输入输出只接受整数。

    2025-08-28
    0
    7
    • XR回复Huanghui:

      您说的BPU是指脉动阵列吧?因为根据地平线提供的官方文档中BPUNash架构里面是包含VPU的,并且根据设计文档也是说VPU是基于SIMT, 支持线程并行的

      2025-08-28
      0
    • Huanghui回复XR:

      量化转定点在反量化转浮点这个过程切换,也会引入 额外的内存读写和算子调度,这比乘加本身的开销要大吧。而且 这个过程切换他也需要遍历你的数据类型,

      2025-08-28
      0
    • XR回复Huanghui:

      但他在cpu里面也有这个过程

      2025-08-28
      0
    • XR回复Huanghui:

      那么如果将量化反量化过程放在cpu,同样由您所说的这些开销,那么放在cpu的意义是什么?

      2025-08-28
      0
    • Huanghui回复XR:

      这个过程在vpu吧VPU要比cpu快。

      2025-08-28
      0
    • XR回复Huanghui:

      您在帖子里面的回复说的是,“量化反量化过程是在CPU进行的,为了提高每次遍历数据的利用率,尽量少遍历数据,移除后你可以把量化反量化过程融入到业务处理当中”,也就是地平线设计的方案是在前后处理中使用cpu进行量化和反量化处理。我想知道的是量化反量化过程放在模型中使用VPU处理的速度理论上应该是小于放在模型外使用CPU处理的速度的,那么为什么还要放在模型外面?

      2025-08-28
      0
    • Huanghui回复XR:

      因为这个bpu是资源独占型的,在模型内部,即使没用到BPU算子,也会因为这个模型流程没走完而继续占用bpu计算资源。这样做也是为了提高BPU利用率。

      2025-09-02
      0
  • 遥看瀑布挂前川
    Lv.2

    1. c++实现会更快。2.可以融合到前后处理中进行。

    2025-09-02
    0
    0
  • 遥看瀑布挂前川
    Lv.2

    bpu不支持fp32到int的转换,只支持int之间的计算。所以肯定bpu是无法支持的。J6E/M中可以vpu支持。

    2025-09-02
    0
    0
  • DR_KAN
    Lv.4

    可以试试不删,应该也能编出来

    2025-09-03
    0
    0