训练后量化简易配置文件
calibration_config_tf.proto文件参数说明如表1所示,该文件所在目录为:AMCT安装目录/amct_tensorflow/proto/calibration_config_tf.proto。
消息  | 
是否必填  | 
类型  | 
字段  | 
说明  | 
|---|---|---|---|---|
AMCTConfig  | 
-  | 
-  | 
-  | 
AMCT训练后量化的简易配置。  | 
optional  | 
uint32  | 
batch_num  | 
量化使用的batch数量。  | 
|
optional  | 
bool  | 
activation_offset  | 
数据量化是否带offset。全局配置参数。 
  | 
|
optional  | 
bool  | 
joint_quant  | 
是否进行Eltwise联合量化,默认为false,表示关闭联合量化功能。 开启后对部分网络可能会存在性能提升但是精度下降的问题。  | 
|
repeated  | 
string  | 
skip_layers  | 
不需要量化层的层名。  | 
|
repeated  | 
string  | 
skip_layer_types  | 
不需要量化的层类型。  | 
|
repeated  | 
string  | 
skip_approximation_layers  | 
不需要近似校准的层名。 当前该特性只适用于Atlas 推理系列产品。  | 
|
optional  | 
NuqConfig  | 
nuq_config  | 
非均匀量化配置。  | 
|
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算子做tensor量化。  | 
|
NuqConfig  | 
-  | 
-  | 
-  | 
非均匀量化配置。  | 
required  | 
string  | 
mapping_file  | 
均匀量化后的deploy模型通过ATC工具转换得到的OM模型,通过ATC工具转换得到的json文件,即量化后模型的融合json文件。  | 
|
optional  | 
NUQuantize  | 
nuq_quantize  | 
非均匀量化的参数。  | 
|
OverrideLayerType  | 
-  | 
-  | 
-  | 
重置某层类型的量化配置。  | 
required  | 
string  | 
layer_type  | 
支持量化的层类型的名字。  | 
|
required  | 
CalibrationConfig  | 
calibration_config  | 
重置的量化配置。  | 
|
OverrideLayer  | 
-  | 
-  | 
-  | 
重置某层量化配置。  | 
required  | 
string  | 
layer_name  | 
被重置层的层名。  | 
|
required  | 
CalibrationConfig  | 
calibration_config  | 
重置的量化配置。  | 
|
TensorQuantize  | 
-  | 
-  | 
-  | 
需要进行训练后量化的输入Tensor配置。  | 
required  | 
string  | 
layer_name  | 
需要对节点输入Tensor进行训练后量化的节点名称, 当前仅支持对MaxPool/Add算子的输入Tensor进行量化。  | 
|
required  | 
uint32  | 
input_index  | 
需要对节点输入Tensor进行训练后量化的节点的输入索引。  | 
|
-  | 
FMRQuantize  | 
ifmr_quantize  | 
数据量化算法配置。 ifmr_quantize:IFMR量化算法配置。默认为IFMR量化算法。  | 
|
-  | 
HFMGQuantize  | 
hfmg_quantize  | 
数据量化算法配置。 hfmg_quantize:HFMG量化算法配置。  | 
|
CalibrationConfig  | 
-  | 
-  | 
-  | 
Calibration量化的配置。该配置下不建议配置nuq_quantize非均匀量化算法相关参数,否则可能会影响精度。  | 
-  | 
ARQuantize  | 
arq_quantize  | 
权重量化算法配置。 arq_quantize:ARQ量化算法配置。  | 
|
-  | 
NUQuantize  | 
nuq_quantize  | 
权重量化算法配置。 nuq_quantize:非均匀量化算法配置。  | 
|
-  | 
FMRQuantize  | 
ifmr_quantize  | 
数据量化算法配置。 ifmr_quantize:IFMR量化算法配置。  | 
|
-  | 
HFMGQuantize  | 
hfmg_quantize  | 
数据量化算法配置。 hfmg_quantize:HFMG量化算法配置。  | 
|
-  | 
DMQBalancer  | 
dmq_balancer  | 
均衡算法配置。 dmq_balancer:DMQBalancer均衡算法配置。  | 
|
ARQuantize  | 
-  | 
-  | 
-  | 
ARQ权重量化算法配置。算法介绍请参见ARQ权重量化算法。  | 
optional  | 
bool  | 
channel_wise  | 
是否对每个channel采用不同的量化因子。 
  | 
|
FMRQuantize  | 
-  | 
-  | 
-  | 
FMR数据量化算法配置。算法介绍请参见IFMR数据量化算法。 该参数与HFMGQuantize参数不能同时配置。  | 
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  | 
是否进行非对称量化。用于控制逐层量化算法的选择。 
 如果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量化。  | 
|
HFMGQuantize  | 
-  | 
-  | 
-  | 
HFMG数据量化算法配置。算法介绍请参见HFMG数据量化算法。 该参数与FMRQuantize参数不能同时配置。  | 
optional  | 
uint32  | 
num_of_bins  | 
直方图的bin(直方图中的一个最小单位直方图形)数目,支持的范围为{1024, 2048, 4096, 8192}。 默认值为4096。  | 
|
optional  | 
bool  | 
asymmetric  | 
是否进行非对称量化。用于控制逐层量化算法的选择。 
 如果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量化。  | 
|
NUQuantize  | 
-  | 
-  | 
-  | 
非均匀权重量化算法配置。算法介绍请参见NUQ权重量化算法。  | 
optional  | 
uint32  | 
num_steps  | 
非均匀量化的台阶数。当前仅支持设置为16和32。  | 
|
optional  | 
uint32  | 
num_of_iteration  | 
非均匀量化优化的迭代次数。当前仅支持设置为{0,1,2,3,4,5},0表示没有迭代。  | 
|
DMQBalancer  | 
-  | 
-  | 
-  | 
DMQ均衡算法配置。算法介绍请参见DMQ均衡算法。  | 
optional  | 
float  | 
migration_strength  | 
迁移强度,代表将activation数据上的量化难度迁移至weight权重的程度。支持的范围为[0.2, 0.8],默认值0.5,数据分布的离群值越大迁移强度应设置较小。  | 
- 基于该文件构造的均匀量化简易配置文件quant.cfg样例如下所示:
# global quantize parameter batch_num : 2 activation_offset : true joint_quant : false 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 } } 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 }如果数据量化算法使用HFMG,则上述配置文件中加粗部分可以替换成如下参考参数信息,举例如下(如下配置信息只是样例,请根据实际情况进行修改):
# global quantize parameter activation_offset : true batch_num : 1 ... common_config : { hfmg_quantize : { num_of_bins : 4096 asymmetric : false } ... } - 基于该文件构造的非均匀量化简易配置文件quant.cfg样例如下所示:
# global quantize parameter activation_offset : true joint_quant : false batch_num : 2 nuq_config { mapping_file : "nuq_files/resnet50_quantized.json" nuq_quantize : { num_steps : 32 num_of_iteration : 0 } } 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 } } override_layer_types : { layer_type : "Optype" calibration_config : { arq_quantize : { channel_wise : false } 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 : 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 }如果数据量化算法使用HFMG,则上述配置文件中加粗部分可以替换成如下参考参数信息,举例如下(如下配置信息只是样例,请根据实际情况进行修改):
# global quantize parameter activation_offset : true batch_num : 1 ... common_config : { hfmg_quantize : { num_of_bins : 4096 asymmetric : false } ... } - 基于该文件构造的量化数据均衡预处理简易配置文件dmq_balancer.cfg配置文件样例如下:
# global quantize parameter activation_offset : true batch_num : 1 ... common_config : { dmq_balancer : { migration_strength : 0.5 } ... } - 基于该文件构造的近似校准配置文件approximate.cfg样例如下:
batch_num: 1 skip_approximate_layers: "Softmax_1"