模型精度调优

基于前文的精度评估,您可能发现精度的评估结果不及预期。 本章节内容为您介绍,在您通过PTQ链路进行模型转换过程中出现量化精度损失时, 如何通过精度调优工具和功能进行精度调优以减少量化精度损失或协助您定位量化精度损失的原因。

注意

下文所指量化精度调优均指前文所述的量化过程中生成的 calibrated_model.onnx 量化精度调优。

精度调优建议

您可通过调整量化方法或者计算精度来进行模型精度的调优,方法参考如下:

量化方法

可以通过配置不同的校准方法、量化参数搜索方法,或者尝试对独立量化功能进行配置来尝试对模型量化方法进行调整:

  1. 校准方法配置

    您可以尝试调整模型校准方法,如尝试kl、max等校准方法配置,配置方法可参考 quant_config说明 章节的介绍。

  2. 量化参数搜索配置

    支持两种不同粒度的校准参数搜索方法:

    • modelwise_search:在模型层面对量化参数进行搜索,该方法允许一次性配置多种校准方法,通过比较量化前后模型输出的量化损失metric(可配置),找到一个量化损失最小的校准方法。

    • layerwise_search:在节点层面对量化参数进行搜索,该方法会根据每个节点量化前后模型输出,计算量化损失metric(可配置),为该节点分配量化损失最小的校准方法。

    配置方法可参考 quant_config说明 章节的介绍。

  3. 独立量化功能配置

    开启独立量化模式可以减少计算资源的占用,您可以尝试对per_channel,asymmetric,bias_correction参数进行配置,配置方法可参考 quant_config说明 章节的介绍。

计算精度

除量化方法的配置外,可尝试对模型算子的计算精度(dtype)进行配置来尝试精度调优,当前支持由model,op_type,op_name三个层面对算子的计算精度进行配置,支持的配置类型包括int8、int16、float16及float32, 配置方法可参考 quant_config说明 章节的介绍。

精度debug工具

如您想定位量化精度损失的具体是由哪些算子导致的,我们还为您提供了精度debug工具协助您定位,工具使用方法可参考 精度debug工具 章节的介绍。

量化精度调优流程

基于我们过往对典型模型精度调优过程的经验积累,下方我们为您提供了一个兼顾易用性和实用性的精度调优流程:

调优流程图详细说明如下:

调整域阶段目标详细工作说明辅助功能
默认int8量化模型精度明确int8量化精度损失是否满足预期。不对量化参数做任何配置,使用默认int8量化进行模型转换,测试模型量化精度损失,评估是否满足精度要求。
  1. 在调优的各个阶段可以配置如per_channel、asymmetric、bias_correction等量化功能。
  2. 精度debug工具协助定位模型中精度损失较高的算子。
混合计算精度调优明确模型在全int16时的精度上限,确定后续能否使用混合精度完成调优。

通过quant_config配置all_nodes_type=int16,尝试将模型中所有节点都配置为int16计算,获取该模型在int16时的量化精度表达能力上限。
全int16满足精度要求则后续混合精度配置使用int16。

通过显性指定算子的计算精度,完成混合精度精调。
  1. 使用精度debug工具分析int8校准模型量化损失高的节点并通过quant_config配置其为高精度int16计算,完成量化精度精调,其中:
    • 混合精度配置时校准方法选择:int8+int16混合精度可以使用all_nodes_type=int16配置时系统自动选择的校准方法。
  2. 如果使用debug工具设置敏感节点为高精度不能有效提升模型精度,可以通过分析模型结构,尝试将量化损失风险较大的典型算子或子结构为高精度:
    • bev投影过程中,Gridsample的index计算子结构设置为高精度。
    • 多任务模型的检测head结构部分设为高精度。
    • layernorm、softmax等量化敏感算子设置为高精度。