文档
注册

QuantConfig

功能说明

量化参数配置类,保存量化过程中配置的参数。

函数原型

QuantConfig(w_bit=8, a_bit=8, w_signed=True, a_signed=False, w_sym=True, a_sym=False, input_shape=None, act_quant=True, act_method=0, quant_mode=0, disable_names=None, amp_num=0, keep_acc=None, sigma=25, disable_first_layer=True, disable_last_layer=True, is_optimize_graph=True, is_dynamic_shape=False, use_onnx=True, num_input=0, quant_param_ops=None, atc_input_shape=None, )

参数说明

参数名

输入/返回值

含义

使用限制

quant_mode

输入

量化模式。

可选。

数据类型:int。

可选值为[0,1],默认为0。

0代表Data-Free量化模式,1代表label-free量化模式。

act_quant

输入

是否对激活值进行量化。

可选。

数据类型:bool。

默认值为True。

暂不支持修改。

act_method

输入

激活值量化方法。

可选。

数据类型:int。

可选值[0,1,2],默认为0。

  • 0代表Data-Free场景的量化方法(具体由sigma参数决定)。
  • 1代表Label-Free场景的Min-Max observer方法。Label-Free场景推荐选1。
  • 2代表Label-Free场景的histogram observer方法。

sigma

输入

Data-free的量化统计方法。

建议输入值为0或25,卷积类模型使用sigma统计效果更好,transformers类模型min-max统计效果更好。

可选。

数据类型:int。

默认为25。

  • sigma=25时,使用sigma统计方法。
  • sigma=0时,使用Min-Max统计方法。

is_dynamic_shape

输入

指定输入的模型是否支持动态shape。

可选。输入模型支持动态shape时,另一配置参数input_shape也必须指定。

数据类型:bool。

默认为False。

  • True:输入的模型支持动态shape。
  • False:输入的模型为静态shape。

input_shape

输入

当输入模型支持动态shape时,用户需指定input_shape参数,用以生成量化时的校对数据。

可选,当模型支持动态shape时必须指定。

数据类型:list [list]

默认值:[]

当模型有多个输入时,按照顺序指定input_shape,例如:[[1, 3,224, 224], [1, 3, 640, 640]]。

amp_num

输入

混合精度量化回退层数。

精度降低过多时,可增加回退层数,推荐优先回退3~7层,如果精度恢复不明显,再增加回退层数。

可选。

数据类型:int。

默认为0。

disable_names

输入

需排除量化的节点名称,即手动回退的量化层名称。

如精度太差,推荐回退量化敏感层,如分类层、输入层、检测head层等。

可选。

数据类型:list[str]。

默认值[]。

is_optimize_graph

输入

是否进行图优化。

可选。

数据类型:bool。

默认为True。

disable_first_layer

输入

是否自动回退首层量化层。

可选。

数据类型:bool。

默认为True。

disable_last_layer

输入

是否自动回退尾层量化层。

可选。

数据类型:bool。

默认为True。

keep_acc

输入

精度保持策略。

  • admm和round_opt是用来改善权重量化,减少权重量化误差,推荐在label-free模式下使用,适当改善量化效果。
  • easy_quant用来改善激活量化,减少激活量化误差,推荐在data-free模式下使用,通常能够起到较好的改善效果。

可选。

数据类型:dict。

包含以下三种精度保持策略:

  • admm策略:数据类型[bool, int],bool配置是否开启,int配置优化迭代次数。
  • easy_quant:(推荐)数据类型[bool, int],bool配置是否开启,int配置优化迭代次数。
  • round_opt:数据类型[bool],bool配置是否开启。

输入模板为:keep_acc={'admm': [False, 1000], 'easy_quant': [False, 1000], 'round_opt': False} 。

a_bit

输入

激活层量化bit。

可选。

数据类型:int。

默认为8,暂不支持其他bit量化,不支持修改。

w_bit

输入

权重量化bit。

可选。

数据类型:int。

默认为8,暂不支持其他bit量化,不支持修改。

w_signed

输入

是否对权重进行符号量化。

可选。

数据类型:bool。

默认为True。

a_signed

输入

是否对激活值进行符号量化。

可选。

数据类型:bool。

默认为False。

使用relu的CV模型建议设置为False,其他模型建议设置为True。

w_sym

输入

权重是否对称量化。

可选。

数据类型:bool。

默认为True。

a_sym

输入

激活值是否对称量化。

可选。

数据类型:bool。

默认为False。

use_onnx

输入

是否使用onnx_runtime进行量化校准(onnx_runtime仅支持<2GB的模型量化),若模型大于2GB,建议关闭该参数,使用ACL进行校准。

可选。

数据类型:bool。

默认为True。

  • True:onnx_runtime量化校准。
  • False:ACL量化校准。

num_input

输入

网络输入数据的数量。

可选。

数据类型:int。

默认为0,若use_onnx配置为False,则必须手动输入模型输入数据的数量。

quant_param_ops

输入

选择需要量化的网络层。

可选。

数据类型:list。

默认值:['Conv', 'Gemm', 'MatMul']。

若使用ACL量化校准辅助量化时(即use_onnx配置为False),则该参数需配置为['Conv']。

atc_input_shape

输入

ATC工具转om模型的输入数据shape。

可选。

数据类型:String。

默认为None。

若use_onnx配置为False,则必须手动输入模型的输入shape,输入格式要求如下:

  1. 若模型为单个输入,则shape信息为"input_name:n,c,h,w";指定的节点必须放在双引号中。
  2. 若模型有多个输入,则shape信息--input_shape="input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2";不同输入之间使用英文分号分隔,input_name必须是转换前的网络模型中的节点名称。

调用示例

from modelslim.onnx.squant_ptq import QuantConfig 
config = QuantConfig(disable_names=[],
                       quant_mode=0,
                     amp_num=0,
                     a_sym=True,
                     keep_acc={'admm': [False, 1000], 'easy_quant': [True, 1000], 'round_opt': False},
                     disable_first_layer=True,
                     disable_last_layer=True
)
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词