基于前文的精度评估,您可能发现精度的评估结果不及预期。 本章节内容为您介绍,在您通过PTQ链路进行模型转换过程中出现量化精度损失时, 如何通过精度调优工具和功能进行精度调优以减少量化精度损失或协助您定位量化精度损失的原因。
下文所指量化精度调优均指前文所述的量化过程中生成的 calibrated_model.onnx 量化精度调优。
您可通过调整量化方法或者计算精度来进行模型精度的调优,方法参考如下:
可以通过配置不同的校准方法、量化参数搜索方法,或者尝试对独立量化功能进行配置来尝试对模型量化方法进行调整:
校准方法配置
您可以尝试调整模型校准方法,如尝试kl、max等校准方法配置,配置方法可参考 quant_config说明 章节的介绍。
量化参数搜索配置
支持两种不同粒度的校准参数搜索方法:
modelwise_search:在模型层面对量化参数进行搜索,该方法允许一次性配置多种校准方法,通过比较量化前后模型输出的量化损失metric(可配置),找到一个量化损失最小的校准方法。
layerwise_search:在节点层面对量化参数进行搜索,该方法会根据每个节点量化前后模型输出,计算量化损失metric(可配置),为该节点分配量化损失最小的校准方法。
配置方法可参考 quant_config说明 章节的介绍。
独立量化功能配置
开启独立量化模式可以减少计算资源的占用,您可以尝试对per_channel,asymmetric,bias_correction参数进行配置,配置方法可参考 quant_config说明 章节的介绍。
除量化方法的配置外,可尝试对模型算子的计算精度(dtype)进行配置来尝试精度调优,当前支持由model,op_type,op_name三个层面对算子的计算精度进行配置,支持的配置类型包括int8、int16、float16及float32, 配置方法可参考 quant_config说明 章节的介绍。
如您想定位量化精度损失的具体是由哪些算子导致的,我们还为您提供了精度debug工具协助您定位,工具使用方法可参考 精度debug工具 章节的介绍。
基于我们过往对典型模型精度调优过程的经验积累,下方我们为您提供了一个兼顾易用性和实用性的精度调优流程:
调优流程图详细说明如下:
调整域 | 阶段目标 | 详细工作说明 | 辅助功能 |
默认int8量化模型精度 | 明确int8量化精度损失是否满足预期。 | 不对量化参数做任何配置,使用默认int8量化进行模型转换,测试模型量化精度损失,评估是否满足精度要求。 |
|
混合计算精度调优 | 明确模型在全int16时的精度上限,确定后续能否使用混合精度完成调优。 | 通过quant_config配置all_nodes_type=int16,尝试将模型中所有节点都配置为int16计算,获取该模型在int16时的量化精度表达能力上限。 | |
通过显性指定算子的计算精度,完成混合精度精调。 |
|