QuantConfig
功能说明
量化参数配置类,保存量化过程中配置的参数。
函数原型
QuantConfig(quant_mode=1, is_signed_quant=True, is_per_channel=True, calib_data=None, calib_method=0, quantize_nodes=None, exclude_nodes=None, amp_num=0, is_optimize_graph=True, is_quant_depthwise_conv=True, input_shape=None, is_dynamic_shape=False)
参数说明
参数名 |
输入/返回值 |
含义 |
使用限制 |
---|---|---|---|
quant_mode |
输入 |
量化模式。 |
可选。 数据类型:int。 可选值[0, 1],默认值为1。
|
is_signed_quant |
输入 |
激活是否符号量化。 |
可选。 数据类型:bool。 默认值为True,False表示Uint8量化,True表示Int8量化。 CNN类模型建议配置True,Transformer类模型建议配置False。 |
is_per_channel |
输入 |
权重是否per_channel量化。 |
可选。 数据类型:bool。 默认值为True。 |
calib_data |
输入 |
矫正数据。 |
可选。 数据类型:list,默认值为[]。 对于单输入模型,配置[[input1]],多输入模型,配置[[input1,input2,input3]]。 配置为空时,将随机生成矫正数据。 |
calib_method |
输入 |
激活矫正的方法。 |
可选。 数据类型:int。 可选值[0,1,2],默认值为0。
|
quantize_nodes |
输入 |
需要量化的节点。 |
可选。 数据类型:list。 默认值为[]。仅当列表为非空时,该字段生效。 |
exclude_nodes |
输入 |
排除量化的节点名称。 |
可选。 数据类型:list。 默认值为[]。 |
amp_num |
输入 |
混合精度回退层数。 |
可选。 数据类型:int。 默认为0。精度降低过多时,可以增大此值,以减少量化的层数。 |
is_optimize_graph |
输入 |
是否进行图优化。 |
数据类型:bool,默认为True。 |
is_quant_depthwise_conv |
输入 |
是否量化DepthWiseConv算子。 |
可选。 数据类型:bool。 默认为True。当模型中有DepthWiseConv算子,量化精度损失较大时,可以配置为False。 |
input_shape |
输入 |
当输入模型支持动态shape时,用户需指定input_shape参数,用以生成量化时的校对数据。 |
可选,当模型支持动态shape时必须指定。 数据类型:list [list] 默认值:[] 当模型有多个输入时,按照顺序指定input_shape,例如:[[1, 3,224, 224], [1, 3, 640, 640]]。 |
is_dynamic_shape |
输入 |
指定输入的模型是否支持动态shape。 |
可选。输入模型支持动态shape时,另一配置参数input_shape也必须指定。 数据类型:bool。 默认为False。
|
调用示例
from modelslim.onnx.post_training_quant import QuantConfig def custom_read_data(): calib_data = [] # TODO 读取数据集,进行数据预处理,将数据存入calib_data return calib_data calib_data = custom_read_data() quant_config = QuantConfig(calib_data=calib_data, amp_num=5)