1.引言
J6工具链目前已经提供了比较丰富的集成化工具和接口来支持模型的移植和量化部署,本帖将整理常用的工具/接口以及使用示例来供大家参考,相信这篇文章会提升大家对J6工具链的使用理解以及效率。
干货满满,欢迎访问
2. hb_config_generator
hb_config_generator 是用于获取模型编译最简yaml配置文件、包含全部参数默认值的yaml配置文件的工具。使用示例:
3.hb_compile
hb_compile是PTQ中集模型验证、模型修改和编译工具。使用前确保您的环境中已经安装了horizon_tc_ui,horizon_nn(后面将更新为hmct)和hbdk4-compiler。相关使用示例如下:
3.1模型验证
3.2模型修改
出于某些极大尺寸输入场景下的极致性能需求,部分输入/输出端的量化和转置操作可以融合在数据前处理中一并完成。 此时可以选择在yaml中配置remove_node_type参数,然后使用 hb_compile 工具移除这些节点,同时hb_compile工具还支持对HBIR模型的编译。
3.3模型量化编译
使用hb_compile工具对模型进行量化编译时,提供两种模式,快速性能评测模式(开启fast-perf)和传统模型转换编译模式(不开启fast-perf)。
fast-perf
快速性能评测模式开启后,会在转换过程中生成可以在板端运行最高性能的hbm模型:
传统方式
4. hb_verifier
hb_verifier 是一致性验证工具,支持进行onnx模型之间、onnx模型与hbir模型、hbir模型与hbir模型之间的余弦相似度对比, bc与Hbm模型之间的输出一致性对比。

使用示例如下:
ONNX模型与ONNX模型之间进行余弦相似度对比。
以模型优化阶段模型 optimized_float_model.onnx 与模型校准阶段模型 calibrated_model.onnx 为例:
ONNX模型与HBIR模型之间进行余弦相似度对比。
以模型优化阶段模型 optimized_float_model.onnx 与模型量化阶段定点模型 quantized_model.bc 为例:
HBIR模型与HBM模型之间进行输出一致性对比。
以模型量化阶段定点模型 quantized_model.bc 与模型编译阶段模型 googlenet.hbm为例:
5.hb_model_info
hb_model_info 是用于解析*.hbm和*.bc编译时的依赖及参数信息、*.onnx模型基本信息,同时支持对*.bc可删除节点进行查询的工具。使用示例如下:
6.伪量化bc导出
6.1ONNX export
编译器的onnx.export接口提供了可以将onnx模型转为bc模型的功能,使用示例如下:
6.2Torch export
编译器的torch.export接口提供了可以将torch模型转为bc模型的功能,使用示例如下:
或者使用地平线QAT封装的编译器export接口(horizon_plugin_pytorch.quantization.hbdk4.export)来导出伪量化bc,接口介绍如下:
7.bc模型加载、修改、定点化、编译、perf
编译器提供了bc模型加载、定点化、编译的相关接口。

下面将以一个完整的示例来讲述以上接口的使用:
这样,我们就完成了伪量化bc的加载、修改、量化编译和性能预估的过程。




