训练后量化简易配置文件
calibration_config_pytorch.proto文件参数说明如表1所示,该文件所在目录为:AMCT安装目录/amct_pytorch/proto/calibration_config_pytorch.proto。
表 1 calibration_config_pytorch.proto参数说明
|
||||
fakequant模型中quant自定义算子的scale_d数值精度模式。
|
||||
通用的量化配置,全局量化配置参数。若某层未被override_layer_types或者override_layer_configs重写,则使用该配置。 参数优先级:override_layer_configs>override_layer_types>common_config |
||||
|
例如全局量化配置参数配置的量化因子搜索步长为0.01,可以通过该参数对部分层进行差异化量化,可以配置搜索步长为0.02。 参数优先级:override_layer_configs>override_layer_types>common_config |
||||
|
例如全局量化配置参数配置的量化因子搜索步长为0.01,可以通过该参数对部分层进行差异化量化,可以配置搜索步长为0.02。 参数优先级:override_layer_configs>override_layer_types>common_config |
||||
ARQ量化算法配置。算法介绍请参见ARQ权重量化算法。 该算法与ADAquantize、NUQuantize算法不能同时配置,若同时配置,则以配置文件中最后配置的量化算法为准。 |
||||
|
||||
|
如果在common_config中配置quant_bits为INT6、INT7,则只对Conv2d算子生效,其他算子改为默认INT8。 |
||||
AdaRound自适应舍入量化算法,算法介绍请参见ADA权重量化算法。 该算法与ARQuantize、NUQuantize算法不能同时配置,若同时配置,则以配置文件中最后配置的量化算法为准。 该量化算法支持的激活函数为:ReLU、RReLU、LeakyReLU、PReLU、GELU、ReLU6、Sigmoid、Tanh。 上述激活函数对应的ONNX算子为:Relu、LeakyRelu、LeakyRelu、PRelu、Gelu、Clip、Sigmoid、Tanh。 AMCT工具获取量化配置中的可量化层(该特性支持的量化层为torch.nn.Linear、torch.nn.Conv2d、torch.nn.ConvTranspose2d),按照导出的ONNX模型中的拓扑顺序获取可量化模块,若量化模块后为上述激活函数,将量化模块和激活函数作为一个整体。 将上述激活函数导出为ONNX算子时,需要torch 2.1版本torch.onnx.export接口,且Gelu算子需要Opset版本为v20,其他算子Opset版本为v17。 |
||||
|
||||
DMQ均衡算法配置。算法介绍请参见DMQ均衡算法。 |
||||
迁移强度,代表将activation数据上的量化难度迁移至weight权重的程度。支持的范围为[0.2, 0.8],默认值0.5,数据分布的离群值越大迁移强度应设置较小。 |
||||
FMR数据量化算法配置。算法介绍请参见IFMR数据量化算法。 |
||||
如果override_layer_configs、override_layer_types、common_config配置项都配置该参数,或者配置了 override_layer_configs>override_layer_types>common_config>activation_offset |
||||
HFMG数据量化算法配置。算法介绍请参见HFMG数据量化算法。 |
||||
如果override_layer_configs、override_layer_types、common_config配置项都配置该参数,或者配置了 override_layer_configs>override_layer_types>common_config>activation_offset |
||||
-
基于该文件构造的训练后量化简易配置文件quant.cfg样例如下所示:
# global quantize parameter batch_num : 2 activation_offset : true skip_layers : "Opname" skip_layer_types:"Optype" do_fusion: true skip_fusion_layers : "Opname" common_config : { arq_quantize : { channel_wise : true quant_bits : 7 } ifmr_quantize : { search_range_start : 0.7 search_range_end : 1.3 search_step : 0.01 max_percentile : 0.999999 min_percentile : 0.999999 asymmetric : true } dmq_balancer : { migration_strength : 0.5 } } override_layer_types : { layer_type : "Conv2d" calibration_config : { arq_quantize : { channel_wise : false quant_bits : 6 } ifmr_quantize : { search_range_start : 0.8 search_range_end : 1.2 search_step : 0.02 max_percentile : 0.999999 min_percentile : 0.999999 asymmetric : false } dmq_balancer : { migration_strength : 0.5 } } } override_layer_configs : { layer_name : "Opname" calibration_config : { arq_quantize : { channel_wise : true } ifmr_quantize : { search_range_start : 0.8 search_range_end : 1.2 search_step : 0.02 max_percentile : 0.999999 min_percentile : 0.999999 asymmetric : false } dmq_balancer : { migration_strength : 0.5 } } }如果数据量化算法使用HFMG,则上述配置文件中加粗部分可以替换成如下参考参数信息,举例如下(如下配置信息只是样例,请根据实际情况进行修改):
# global quantize parameter activation_offset : true batch_num : 2 ... common_config : { hfmg_quantize : { num_of_bins : 4096 asymmetric : false } ... } -
基于该文件构造的自适应舍入简易配置文件_ada_round.cfg_样例如下所示:
common_config : { ada_quantize : { num_iteration : 10000 warm_start : 0.2 reg_param : 0.01 beta_range_start : 20 beta_range_end : 2 channel_wise : false } } -
基于该文件构造的量化数据均衡预处理简易配置文件dmq_balancer.cfg样例如下所示:
# global quantize parameter batch_num : 2 activation_offset : true skip_layers : "Opname" skip_layer_types:"Optype" do_fusion: true skip_fusion_layers : "Opname" common_config : { arq_quantize : { channel_wise : true } ifmr_quantize : { search_range_start : 0.7 search_range_end : 1.3 search_step : 0.01 max_percentile : 0.999999 min_percentile : 0.999999 asymmetric : true } dmq_balancer : { migration_strength : 0.5 } } override_layer_types : { layer_type : "Optype" calibration_config : { arq_quantize : { channel_wise : false } ifmr_quantize : { search_range_start : 0.8 search_range_end : 1.2 search_step : 0.02 max_percentile : 0.999999 min_percentile : 0.999999 asymmetric : false } dmq_balancer : { migration_strength : 0.5 } } } override_layer_configs : { layer_name : "Opname" calibration_config : { arq_quantize : { channel_wise : true } ifmr_quantize : { search_range_start : 0.8 search_range_end : 1.2 search_step : 0.02 max_percentile : 0.999999 min_percentile : 0.999999 asymmetric : false } dmq_balancer : { migration_strength : 0.5 } } }