定点模型转换
在经过上文所述的一系列过程,伪量化精度达标后,便可执行模型部署的相关流程,主要包括导出 HBIR 模型(export)以及转定点模型(convert)操作。
导出 HBIR 模型
模型部署首先需要将伪量化模型导出为 HBIR 模型。需提供一组 example_inputs,工具利用此 inputs 执行模型的完整 forward 逻辑,并将执行到的算子逐个转义为 hbir 结点或子图。
注意
- 导出的 hbir 中不仅仅包含量化的算子,而是会包含模型 forward 中执行到的所有算子。因此在导出 hbir 时请确保模型的 forward 逻辑与所需的部署逻辑一致。
- hbir 不支持动态 shape,计算图中各处的 shape 均由导出时模型中 Tensor 的 shape 决定。若需要在仿真和上板使用不同的 batch size,请使用不同的数据分别导出 HBIR 模型。
- 您也可以选择跳过量化精度调优的过程,Calib 初步完成之后先直接验证模型部署的流程,以保证模型中不存在无法导出或编译的操作。
注解
精度说明
导出的 hbir 模型理论上计算逻辑和 torch 模型一致,但存在以下区别,会造成数值无法对齐:
-
torch 模型中的大部分非线性 elementwise 算子,在 hbir 中转为查表的实现方式。
-
存在累加计算的算子如 reduce_sum, gemm 等,会由于累加的顺序不同导致数值波动。
转定点模型
导出为 HBIR 模型后,便可将模型转为定点模型。一般我们认为精度方面,定点模型的结果和编译后模型的结果是完全一致的。
注意
- HBIR 模型的输入仅支持单个
Tensor或Tuple[Tensor], 输出仅支持Tuple[Tensor]。 - 定点模型和伪量化模型之间无法做到完全数值一致,所以请以定点模型的精度为准。若定点模型精度不达标,需要继续进行量化感知训练直到精度满足您的要求。
注解
精度说明
convert 前后,模型由浮点伪量化计算变为定点计算,会导致数值波动。
