专栏算法工具链干货满满-J6工具链常用工具和API整理(含新手示例)

干货满满-J6工具链常用工具和API整理(含新手示例)

momo(社区版)2024-09-16
473
4

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模型之间的输出一致性对比。

使用示例如下:

  1. ONNX模型与ONNX模型之间进行余弦相似度对比。

以模型优化阶段模型 optimized_float_model.onnx 与模型校准阶段模型 calibrated_model.onnx 为例:
  1. ONNX模型与HBIR模型之间进行余弦相似度对比。

以模型优化阶段模型 optimized_float_model.onnx 与模型量化阶段定点模型 quantized_model.bc 为例:
  1. 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的加载、修改、量化编译和性能预估的过程。


注意:此篇文章的接口使用是以OE3.0.17为base,如有更新,欢迎comments!

算法工具链
社区征文征程6技术深度解析官方教程
+10
评论1
0/1000
  • 默认98048
    Lv.1
    hb_verifier 好像不支持hbm?OE版本也是3.0.17
    2024-09-18
    0
    3
    • momo(社区版)回复默认98048:

      3.0.17还没有支持,9 月底的正式版本已经支持了,请拭目以待

      2024-09-19
      0
    • 默认98048回复momo(社区版):
      您好,这个hb_verifier 对比bc和hbm的runtime数据是指的哪一步骤的中间数据呢?特别是针对训练时rgb,运行时是nv12的模式,如何针对一个runtime文件同时适配不同的bc和hbm输入?
      2024-10-15
      0
    • momo(社区版)回复默认98048:

      如果是训练是 rgb,那么在编译前需要在 qat.bc 里插入nv12->rgb图像转换预处理节点,然后 convert 成 quantized.bc 再编译成 hbm,使用 hb_verifier 对比此 quantized.bc和 hbm即可,输入为 nv12

      2024-10-24
      0