版本:J6M,3.0.31算法工具链,量化配置为"all_node_type": "int16"
多输入多输出模型,ptq_mode.onnx输出结果正确,quantized_model.bc的其中一路的输出结果错误(并不是少量掉点),其他路仅少量掉点,通过debugger工具分析
ptq_model.onnx的余弦相似度

版本:J6M,3.0.31算法工具链,量化配置为"all_node_type": "int16"
多输入多输出模型,ptq_mode.onnx输出结果正确,quantized_model.bc的其中一路的输出结果错误(并不是少量掉点),其他路仅少量掉点,通过debugger工具分析
ptq_model.onnx的余弦相似度




你好, pqt_model.onnx 是为量化模型,其本质上还是浮点模型,而 quantized_model.bc是定点话之后的模型。这两个模型输出本来就不是完成等价的。
从前者变成后者,要进行下面的处理:
3.查表算子外其他算子定点化。
1.你的模型有PYM source的输入吗,如果有,变成feature试试呢,确认是否插入前处理节点造成的影响。
2.ptq_mode.onnx输出结果正确,quantized_model.bc 异常的CASE比较少。目前没有想到比较好的锁定问题算子的方法,我觉的可以根据问题分支路径,尝试加入一些 output_nodes,辅助判断问题出现的节点。

ptq_model.onnx的输出和quantized_model.bc不会相同,你可以使用hb_verifier验证下两个模型的逐层输出对比,看看哪里开始存在差异
这里还有几个疑问:
1.ConsineSimilarity 出现了0,可能是不正常的,你可以通过 output_nodes 将该节点的数据保存下来看看。(比如对于Relu,如果上游数据全部是负数,Relu后显然是有问题的)
2.类型和shape转换是在工具内部完成的。你可以参考工具链手册中 hb_verifier 的说明。 Onnx vs Qbc 只需要一份原始数据就OK了。
3. 是的,只需要一份 原始数据 就OK了,不需要两个-i.
4.ConsineSimilarity 可能是精度问题,但也不排除是工具链自身的问题。目前对于这个先默认成 精度问题 处理吧。如果RELU的结果,数据为0,确实有可能导致COS为0