【J6工具链部署实用技巧-1】如何修改bc和hbm模型的输入输出名称和顺序
【J6工具链部署实用技巧-2】如何读取和修改模型的desc信息
1. 引言
在模型部署工作中,当出现hbm模型精度不符合预期的情况时,需要做精度一致性的验证,即QAT模型、bc、hbm模型的输出精度一致性。精度一致性一直都是相对繁琐的工作,而且相对于 J5 工具链,J6 工具链的 QAT 链路有着显著的不同,且其复杂程度更高。这些差异直接导致了在精度一致性验证的流程上存在着部分区别。精度一致性验证在实际应用中至关重要,它关系到产品的性能和质量。为了帮助相关人员更好地理解和掌握这一流程,本文将结合J6工具链QAT链路具体实例,详细演示完整的精度一致性验证流程,包括各个关键环节的操作步骤、注意事项以及可能出现的问题及解决办法。
2. J6 QAT模型转换流程简介
下图中对比了 J6 工具链PTQ/ QAT模型转换流程,J6 工具链 QAT模型转换可以简单描述为以下步骤:
- 步骤 1:完成QAT。结合 J6工具链用户手册完成模型的 calibration/量化训练,并验证伪量化模型的精度;
- 步骤:2:export出伪量化bc。加载训练好的伪量化模型权重,使用from horizon_plugin_pytorch.quantization.hbdk4 import export接口导出qat.bc(伪量化 bc),在此过程中可以自定义model name,input&output name以及 desc信息;
- 步骤 3:适应性修改伪量化bc。这部分主要涉及对 qat.bc插入pyramid/resizer、归一化、transpose等预处理节点,详情请参考J6工具链用户手册【模型部署实践指导】章节;
- 步骤 4:convert。将qat.bc量化为定点 bc(quantized.bc);
- 步骤 5:节点删除。此阶段可以选择性删除模型首尾部分Quantize、Dequantize、Reshape、Transpose、Cast节点,并在部署代码中进行适配;
- 步骤 6:compile。将删除过节点的quantized.bc编译出上板部署的 hbm模型。
- 步骤 7:板端部署。基于 UCP,将 hbm模型部署到板端。

以上为 J6 工具链 QAT链路的基本情况,可以预见,当出现精度一致性问题时,以上步骤都需要排查。下面将进行一致性验证的流程的详细阐述。
3.一致性验证流程

3.1 输入数据/模型确认
在正式开始精度一致性验证流程前,务必确认 hbm模型及其输入数据是否符合预期。
3.2 板端部署代码问题排查
如果推理结果无误,说明是部署代码有误,通常情况下后处理代码出现问题的可能性较大,底软出现问题的概率较小;
如果推理结果有误,则排查是否是工具链缺陷或者模型本身精度的问题。
示例代码:
3.3 hb_verifier一致性验证
- 强烈建议使用真实数据作为hb_verifier工具的输入,这样可以更准确地验证一致性;
- 如果验证未通过,说明是compile接口的问题;
- 如果验证通过,则进行下一步quantized.bc的精度验证。
脚本使用示例:
3.4 quantized.bc精度验证
正常情况下,quantized.bc和 hbm的输出是完全一致的,这里使用 python api进行quantized.bc模型的单帧推理可视化。
这里也可以调用工具链封装的 python/UCP接口在测试集上验证quantized.bc的 metric精度。
- 如果hb_verifier一致性验证通过,但是quantized.bc的可视化精度/metric指标较差,那么确定是模型本身的精度问题,建议继续进行下一步 qat.bc的精度验证。
相关示例代码如下:
3.5 qat.bc精度验证
quantized.bc是通过调用编译器的convert接口,对qat.bc进行定点化操作而得到的,需要注意的是,这一过程是有损的。也就是说,在这个转换过程中,可能会导致一定程度的精度损失。当发现quantized.bc的精度不符合预期时,我们首先要做的就是验证qat.bc的精度。这是因为qat.bc是quantized.bc的源头,如果qat.bc本身的精度就存在问题,那么无论后续如何处理quantized.bc,都无法达到预期的精度要求。所以,对qat.bc精度的验证是解决quantized.bc精度问题的关键步骤。
- 如果quantized.bc精度异常,而 qat.bc精度正常,则说明是 convert定点化引起的量化误差较大,需要提交地平线技术人员分析;
- 如果quantized.bc和 qat.bc精度都异常,则说明是export出的 qat.bc精度有问题,后续进行排查是 export接口问题还是 qat model精度的问题。
3.6 qat 模型精度验证
- 如果 qat模型精度正常,而qat.bc精度异常:
首先,要检查 export时qat model的状态、加载的权重是否正确;
然后,使用 QAT的精度 debug工具,对比qat model和 qat.bc的逐层相似度等信息,定位引起误差的算子;
确定引起误差的算子后,提交地平线技术人员进行分析处理。
如果 qat模型精度异常,那么就直接参考工具链用户手册进行 QAT模型的精度调优。具体章节如下:



