专栏算法工具链J3 模型尾部结果反量化

J3 模型尾部结果反量化

红鲤鱼绿鲤鱼与驴2026-05-09
85
3

各位大佬好:

1. 请问在yaml文件中移除尾部的反量化算子之后,自己在CPU上做反量化运行速度会不会更快?

2.地平线采用对称量化,所以zeropoint的数值肯定是0,但是scale的数值是从量化的int8的onnx中自己粘贴复制到代码中去吗,有没有什么办法直接从bin/hbm类型的权重文件中读取,如果有的话,对应的函数接口在哪?

麻烦各位大佬帮忙解答一下,谢谢啦!

算法工具链
技术深度解析征程3
+1
评论3
0/600
  • DR_KAN
    Lv.5

    可以看下BPU SDK API手册,最终用到的是hbDNNQuantiScale结构体的float *scaleData数据

    2026-05-11
    0
    0
  • YCJ
    Lv.4
    1.单从反量化这个过程来看,模型里做反量化和模型外做都是遍历,运行时间都差不多。
    但多数模型在后处理中需要对推理结果进行遍历,可以在后处理遍历结果的时候顺便进行反量化,这样把反量化拿到模型外面做可以省一次遍历时间。因此建议将反量化拿到cpu上做。
    2.可以查看手册,通过scaleData索引数值
    2026-05-11
    0
    0
  • 费小财
    Lv.5

    1.是的,通常会更高效,但取决于具体实现方式

    1. 在 YAML 配置中通过 remove_node_type 移除尾部的 Dequantize 节点(参考信息 [2] )。
    2. 在 C++/Python 推理代码中,获取 BPU 输出的 Tensor 数据(通常为 int8 或 int32)。

    3. 使用对应的 Scale 值进行线性变换: Float=Int×ScaleFloat = Int \times ScaleFloat=Int×Scale。

    4. 利用 SIMD 指令集(如 NEON)优化这段 CPU 代码,速度通常优于通用的 ONNX Runtime 或工具链内置的 CPU 算子

    2.不要尝试解析 .bin/.hbm 二进制流。请在 PC 端编译阶段 使用 Python HB DK API 提取所有层的 Scale/ZeroPoint 并保存为配置文件;或在 板端运行时 使用 UCP API 获取输入/输出的量化信息。对于中间层的 Scale,若需手动反量化中间结果,必须在编译阶段导出并硬编码或加载到应用中
    2026-05-12
    0
    0