QuantConfig
功能说明
量化参数配置类,保存量化过程中配置的参数。
函数原型
QuantConfig(w_bit=8, a_bit=8, w_signed=True, a_signed=False, w_sym=True, a_sym=False, input_shape=None, input_shape_dic=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, subgraph_start_nodes=None, subgraph_end_nodes=None, 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。
|
sigma |
输入 |
Data-free的量化统计方法。 建议输入值为0或25,卷积类模型使用sigma统计效果更好,transformers类模型min-max统计效果更好。 |
可选。 数据类型:int。 默认为25。
|
is_dynamic_shape |
输入 |
指定输入的模型是否支持动态shape。 |
可选。输入模型支持动态shape时,另一配置参数input_shape也必须指定。 数据类型:bool。 默认为False。
|
input_shape |
输入 |
当输入模型支持动态shape时,用户需指定input_shape参数,用以生成量化时的校对数据。 |
可选,当模型支持动态shape时必须指定。 数据类型:list [list] 默认值:[] 当模型有多个输入时,按照顺序指定input_shape,例如:[[1, 3,224, 224], [1, 3, 640, 640]]。 |
input_shape_dic |
输入 |
量化子图的输入节点的input name和input shape的映射关系,仅支持在Data-Free模式下自定义算子后使用。 |
可选,自定义算子后量化时必须指定。 数据类型:dict。 默认值为{}。 输入模板:input_shape_dic={节点的input name1:input shape1,节点的input name2:input shape2}。 输入示例:input_shape_dic={"onnx::Cast_1763":[1, 100],"onnx::Cast_1762":[1, 100, 4],"onnx::Cast_1764":[1,100]}。 |
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 |
输入 |
精度保持策略。
|
可选。 数据类型:dict。 包含以下三种精度保持策略:
输入模板为: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。 |
subgraph_start _nodes |
输入 |
输入量化子图的起始节点名称,起始节点和终止节点间需为一个完整的拓扑图结构。 |
可选。 数据类型:list。 默认值:[]。 |
subgraph_end _nodes |
输入 |
输入量化子图的终止节点名称,起始节点和终止节点间需为一个完整的拓扑图结构。 |
可选。 数据类型:list。 默认值:[]。 |
use_onnx |
输入 |
是否使用onnx_runtime进行量化校准(onnx_runtime仅支持<2GB的模型量化),若模型大于2GB,建议关闭该参数,使用acl_runtime进行校准。 |
可选。 数据类型:bool。 默认为True。 |
num_input |
输入 |
网络输入数据的数量。 |
可选。 数据类型:int。 默认为0,若use_onnx配置为False,则必须手动输入模型输入数据的数量。 |
quant_param_ops |
输入 |
选择需要量化的网络层。 |
可选。 数据类型:list。 默认值:['Conv', 'Gemm', 'MatMul']。 若使用acl_runtime量化校准辅助量化时(即use_onnx配置为False),则该参数需配置为['Conv']。 |
atc_input_shape |
输入 |
ATC工具转om模型的输入数据shape。 |
可选。 数据类型:String。 默认为None。 若use_onnx配置为False,则必须手动输入模型的输入shape,输入格式要求如下:
|
调用示例
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 )