量化简易配置文件
如果要自动控制量化过程,例如控制哪些层是否量化、控制使用什么量化算法,则可以通过本章节构造的cfg配置文件实现。
配置文件参数
配置文件支持的消息以及对应参数说明如下:
- AMCTConfig:AMCT训练后量化的简易配置。
是否必填
类型
字段
说明
optional
bool
activation_offset
数据量化是否带offset。全局配置参数。
- 带offset:(默认值)数据量化使用非对称量化。
- 不带offset:数据量化使用对称量化。
optional
bool
joint_quant
是否进行Eltwise联合量化,默认为false,表示关闭联合量化功能。
开启后对部分网络可能会存在性能提升但是精度下降的问题。
repeated
string
skip_layers
不需要量化层的层名。
repeated
string
skip_layer_types
不需要量化的层类型。
optional
int32
version
简易配置文件的版本。
optional
CalibrationConfig
common_config
通用的量化配置,全局量化配置参数。若某层未被override_layer_types或者override_layer_configs重写,则使用该配置。
参数优先级:override_layer_configs>override_layer_types>common_config
repeated
OverrideLayerType
override_layer_types
重写某一类型层的量化配置,即对哪些层进行差异化量化。
例如全局量化配置参数配置的量化因子搜索步长为0.01,可以通过该参数对部分层进行差异化量化,可以配置搜索步长为0.02。
参数优先级:override_layer_configs>override_layer_types>common_config
repeated
OverrideLayer
override_layer_configs
重写某一层的量化配置,即对哪些层进行差异化量化。
例如全局量化配置参数配置的量化因子搜索步长为0.01,可以通过该参数对部分层进行差异化量化,可以配置搜索步长为0.02。
参数优先级:override_layer_configs>override_layer_types>common_config
optional
bool
do_fusion
是否开启BN融合功能,默认为true,表示开启该功能。
repeated
string
skip_fusion_layers
跳过BN融合的层,配置之后这些层不会进行BN融合。
repeated
TensorQuantize
tensor_quantize
对网络模型中指定节点的输入Tensor进行训练后量化,来提高数据搬运时的推理性能。
当前仅支持对MaxPool/Add/Eltwise算子做tensor量化。
- OverrideLayerType:支持量化的层类型的名称。
是否必填
类型
字段
说明
required
string
layer_type
支持量化的层类型的名称。
required
CalibrationConfig
calibration_config
重置的量化配置。
- OverrideLayer:重置某层量化配置。
是否必填
类型
字段
说明
required
string
layer_name
被重置层的层名。
required
CalibrationConfig
calibration_config
重置的量化配置。
- CalibrationConfig:Calibration量化的配置。
是否必填
类型
字段
说明
-
ARQuantize
arq_quantize
权重量化算法配置。
arq_quantize:ARQ量化算法配置。
-
FMRQuantize
ifmr_quantize
数据量化算法配置。
ifmr_quantize:IFMR量化算法配置。
optional
bool
weight_compress_only
是否只进行权重量化。仅权重量化场景,支持的数据类型必须为Float32,Float16。
- true:只进行权重量化。
- false:权重和数据都量化。默认为false。
- ARQuantize:ARQ权重量化算法配置。
是否必填
类型
字段
说明
optional
bool
channel_wise
是否对每个channel采用不同的量化因子。
- true:每个channel独立量化,量化因子不同。
- false:所有channel同时量化,共享量化因子。
optional
bool
asymmetric
是否对权重进行非对称量化。用于控制逐层量化算法的选择。
只在weight_compress_only为true时生效,若weight_compress_only设置为false,则asymmetric只能设置为false。
- true:权重量化使用非对称量化(offset不为0)。
- false:权重量化使用对称量化(offset为0),默认为false。
如果override_layer_configs、override_layer_types、common_config配置项都配置该参数,则生效优先级为:
override_layer_configs>override_layer_types>common_config
optional
uint32
quant_bits
权重量化位宽。支持配置为INT6、INT7、INT8,默认为INT8量化。
该字段配置为INT6、INT7仅支持Conv2d类型算子。
如果在common_config中配置quant_bits为INT6、INT7,则只对Conv2d算子生效,其他算子改为默认INT8。
针对ONNX网络模型,如果在override_layer_types中指定Conv类算子quant_bits为INT6、INT7,则只对weight dim为4场景生效。
- FMRQuantize:FMR数据量化算法配置。
是否必填
类型
字段
说明
optional
float
search_range_start
量化因子搜索范围左边界。
optional
float
search_range_end
量化因子搜索范围右边界。
optional
float
search_step
量化因子搜索步长。
optional
float
max_percentile
最大值搜索位置。
optional
float
min_percentile
最小值搜索位置。
optional
bool
asymmetric
是否对数据进行非对称量化。用于控制逐层量化算法的选择。
- true:非对称量化
- false:对称量化
如果override_layer_configs、override_layer_types、common_config配置项都配置该参数,或者配置了
activation_offset参数,则生效优先级为:
override_layer_configs>override_layer_types>common_config>activation_offset
optional
CalibrationDataType
dst_type
量化位宽,数据量化是采用INT8量化还是INT16量化,默认为INT8量化。
当前版本仅支持INT8量化。
- TensorQuantize:需要进行训练后量化的输入Tensor配置。
是否必填
类型
字段
说明
required
string
layer_name
需要对节点输入Tensor进行训练后量化的节点名称,当前仅支持对MaxPool算子的输入Tensor进行量化。
required
uint32
input_index
需要对节点输入Tensor进行训练后量化的节点的输入索引。
-
FMRQuantize
ifmr_quantize
数据量化算法配置。
ifmr_quantize:IFMR量化算法配置。默认为IFMR量化算法。
配置样例
- 基于该文件构造的均匀量化简易配置文件quant.cfg样例如下所示:Optype需要配置为基于Ascend IR定义的算子类型,详细对应关系请参见支持量化的层及约束。
# global quantize parameter activation_offset : true joint_quant : false enable_auto_nuq : false version : 1 skip_layers : "Optype" skip_layer_types: "Optype" do_fusion: true skip_fusion_layers : "Optype" 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 } } 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 } } } 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 } } } tensor_quantize { layer_name: "Opname" input_index: 0 ifmr_quantize: { search_range_start : 0.7 search_range_end : 1.3 search_step : 0.01 min_percentile : 0.999999 asymmetric : false } } tensor_quantize { layer_name: "Opname" input_index: 0 } - 基于该文件构造的仅权重量化简易配置文件quant.cfg配置示例:
activation_offset : true joint_quant : false version : 1 do_fusion: true common_config : { weight_compress_only : true arq_quantize : { channel_wise : true asymmetric : false } } override_layer_types : { layer_type : "Optype" calibration_config : { weight_compress_only : true arq_quantize : { channel_wise : true asymmetric : true quant_bits : 6 } } } override_layer_configs : { layer_name : "Opname" calibration_config : { weight_compress_only : true arq_quantize : { channel_wise : true asymmetric : true } } }