通过calibration_config_tf.proto生成简易配置文件
calibration_config_tf.proto文件参数说明如表1所示,该文件所在目录为:昇腾模型压缩工具安装目录/amct_tensorflow/proto/calibration_config_tf.proto。
消息 |
是否必填 |
类型 |
字段 |
说明 |
---|---|---|---|---|
AMCTConfig |
- |
- |
- |
昇腾模型压缩工具训练后量化的简易配置。 |
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 |
不需要近似校准的层名。该版本不支持近似校准特性。 |
|
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进行训练后量化,来提高数据搬运时的推理性能。 |
|
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算子的输入Tensor进行量化。 |
|
required |
uint32 |
input_index |
需要对输入Tensor进行训练后量化节点的输入索引。 |
|
- |
FMRQuantize |
ifmr_quantize |
数据量化算法配置。 ifmr_quantize:IFMR量化算法配置。默认为IFMR量化算法。 |
|
- |
HFMGQuantize |
hfmg_quantize |
数据量化算法配置。 hfmg_quantize:HFMG量化算法配置。 |
|
CalibrationConfig |
- |
- |
- |
Calibration量化的配置。 |
- |
ARQuantize |
arq_quantize |
权重量化算法配置。 arq_quantize:ARQ量化算法配置。 |
|
- |
NUQuantize |
nuq_quantize |
权重量化算法配置。 nuq_quantize:非均匀量化算法配置。 |
|
- |
FMRQuantize |
ifmr_quantize |
数据量化算法配置。 ifmr_quantize:IFMR量化算法配置。 |
|
- |
HFMGQuantize |
hfmg_quantize |
数据量化算法配置。 hfmg_quantize:HFMG量化算法配置。 |
|
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 |
|
HFMGQuantize |
- |
- |
- |
HFMG数据量化算法配置。算法介绍请参见《AMCT工具(TensorFlow)》。 该参数与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 |
|
NUQuantize |
- |
- |
- |
非均匀权重量化算法配置。该版本不支持非均匀量化。 |
optional |
uint32 |
num_steps |
非均匀量化的台阶数。当前仅支持设置为16和32。 |
|
optional |
uint32 |
num_of_iteration |
非均匀量化优化的迭代次数。当前仅支持设置为[0,1,2,3,4,5],0表示没有迭代。 |
基于该文件构造的简易配置文件quant.cfg样例如下所示:
# global quantize parameter batch_num : 2 activation_offset : true joint_quant : false skip_layers : "conv_1" skip_layer_types:"Conv2D" do_fusion: true skip_fusion_layers : "conv_1" 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 : "MatMul" 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 : "conv_2" 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: "max_pooling2d/MaxPool" 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: "max_pooling2d_1/MaxPool" input_index: 0 }
如果数据量化算法使用HFMG,则上述配置文件中加粗斜体部分可以替换成如下参考参数信息,举例如下(如下配置信息只是样例,请根据实际情况进行修改):
# global quantize parameter activation_offset : true batch_num : 1 ... common_config : { hfmg_quantize : { num_of_bins : 4096 asymmetric : false } ... }