专栏算法工具链ptq_mode.onnx和quantized_model.bc其中一路差异很大

ptq_mode.onnx和quantized_model.bc其中一路差异很大

已解决
青芒-阿白2025-05-28
83
9

版本:J6M,3.0.31算法工具链,量化配置为"all_node_type": "int16"

多输入多输出模型,ptq_mode.onnx输出结果正确,quantized_model.bc的其中一路的输出结果错误(并不是少量掉点),其他路仅少量掉点,通过debugger工具分析

ptq_model.onnx的余弦相似度

请问pqt_model.onnx的输出和quantized_model.bc是否应该相同,有什么方法能确认*.bc网络的错误是哪里引入的
算法工具链
征程6
评论2
0/1000
  • Huanghui
    Lv.5

    你好, pqt_model.onnx 是为量化模型,其本质上还是浮点模型,而 quantized_model.bc是定点话之后的模型。这两个模型输出本来就不是完成等价的。

    从前者变成后者,要进行下面的处理:

    1.从onnx模型转成ir模型。
    2.判断pym类型的输入,插入前处理节点。

    3.查表算子外其他算子定点化。


    所以:

    1.你的模型有PYM source的输入吗,如果有,变成feature试试呢,确认是否插入前处理节点造成的影响。

    2.ptq_mode.onnx输出结果正确,quantized_model.bc 异常的CASE比较少。目前没有想到比较好的锁定问题算子的方法,我觉的可以根据问题分支路径,尝试加入一些 output_nodes,辅助判断问题出现的节点。

    2025-05-28
    0
    1
    • 青芒-阿白回复Huanghui:
      我的模型是1路bgr NCHW图像+15路feature NCHW,train和rt配置都是bgr NCHW,bc模型自动变成了NHWC;输入的feature是时序信息,其中和单帧图像相关的输出都正常,和feature相关的输出差异很大,通过dbg.get_sensitivity_of_nodes分析的余弦相似度都很高(负载首页),这种情况下怎么判断bc网络的损失在哪些node,这个工具并不支持调试*.bc的模型,有没有可以参考的调试方法、工具或流程
      2025-05-29
      0
  • DR_KAN
    Lv.4

    ptq_model.onnx的输出和quantized_model.bc不会相同,你可以使用hb_verifier验证下两个模型的逐层输出对比,看看哪里开始存在差异

    2025-05-29
    0
    6
    • 青芒-阿白回复DR_KAN:
      我用hb_verifier -m ptq_model.onnx,quantized_model.bc -i images: xxx,feat...对比,每一层的ConsineSimilarity都在0.9997以上,只有中间出现了1次0,是否会这个问题导致的| /dense_model/convs_share_lvl0/convs_share_lvl0.0/activate/Relu | /dense_model/convs_share_lvl0/convs_share_lvl0.0/activate/Relu_output_0 | 0 |这里还有几个疑问:
      1. onnx网络的输入是NCHW float32,bc网络的输入是NHWC int8,使用同一个-i时,这个images的数据类型和shape转换是在工具里自行完成的吗
      2. 当我想使用连个-i分别给onnx和bc网络输入输出,会出现参数非法的错误,是否不支持两个-i配置,还是语法有错误(2个-i同一行的错误log:2025-05-29 10:42:30,145 ERROR The number of input files batch 2 invalid.)(2个-i不在同一行,只能识别第一个-i)
      3. 出现ConsineSimilarity为0情况下,怎么分析是精度问题还其他问题,应该怎么修正
      2025-05-29
      0
    • Huanghui回复青芒-阿白:

      1.ConsineSimilarity 出现了0,可能是不正常的,你可以通过 output_nodes 将该节点的数据保存下来看看。(比如对于Relu,如果上游数据全部是负数,Relu后显然是有问题的)

      2.类型和shape转换是在工具内部完成的。你可以参考工具链手册中 hb_verifier 的说明。 Onnx vs Qbc 只需要一份原始数据就OK了。

      3. 是的,只需要一份 原始数据 就OK了,不需要两个-i.

      4.ConsineSimilarity 可能是精度问题,但也不排除是工具链自身的问题。目前对于这个先默认成 精度问题 处理吧。如果RELU的结果,数据为0,确实有可能导致COS为0

      2025-05-29
      0
    • 青芒-阿白回复Huanghui:
      COS为0的问题解决了,是一个配置问题。现在ConsineSimilarity都在0.997以上,错误的那一路flash的cos值也很高,但是结果还是错误的,这种情况应该怎么往下调试?
      2025-05-29
      0
    • 青芒-阿白回复Huanghui:

      我的网络ConsineSimilarity都在0.997以上,其中一路的输出还是错误的,请问应该用什么方法调试

      2025-05-30
      0
    • 青芒-阿白回复DR_KAN:

      我的网络ConsineSimilarity都在0.997以上,其中一路的输出还是错误的,请问应该用什么方法调试

      2025-05-30
      0
    • Huanghui回复青芒-阿白:

      1. 获取特定output_node的get_sensitivity_of_nodes。

      2. 将低敏感度节点LIST作为sensitive_nodes检测sensitivity_analysis

      3. 根据图示判断哪些节点不量化可以维持精度。

      4. 重点拆分或调整这些节点的量化位宽。

      如果还是不行,那就放弃PTQ,走QAT

      2025-06-04
      1