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 推理系列产品(Ascend 310P处理器)。 | |
| 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,数据分布的离群值越大迁移强度应设置较小。 | 
# 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
    }
...
}# 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
    }
...
}# global quantize parameter
activation_offset : true
batch_num : 1
...
common_config : {
    dmq_balancer : {
        migration_strength : 0.5
    }
...
}batch_num: 1 skip_approximate_layers: "Softmax_1"