---
title: 训练后量化简易配置文件
description: "calibration_config_pytorch.proto文件参数说明如表1所示，该文件所在目录为：AMCT安装目录/amct_pytorch/proto/calibration_config_pytorch.proto。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/amct/atlasamct_16_0131.html
sourcePath: /source/zh/canncommercial/900/devaids/amct/atlasamct_16_0131.html
indexId: d0f2d27548c241150fc83c44399c3caf397f44945d8013e870ec6f8d0f79948265
---
# 训练后量化简易配置文件

calibration_config_pytorch.proto文件参数说明如表1所示，该文件所在目录为：AMCT安装目录/amct_pytorch/proto/calibration_config_pytorch.proto。


**表1 calibration_config_pytorch.proto参数说明**

| 消息 | 是否必填 | 类型 | 字段 | 说明 |
| --- | --- | --- | --- | --- |
| AMCTConfig | \- | \- | \- | AMCT训练后量化的简易量化配置。 |
| AMCTConfig | optional | uint32 | batch\_num | 量化使用的batch数量。 |
| AMCTConfig | optional | bool | activation\_offset | 数据量化是否带offset。全局配置参数。 true：带offset，数据量化时为非对称量化。 false：不带offset，数据量化时为对称量化。 |
| AMCTConfig | repeated | string | skip\_layers | 不需要量化层的层名。 |
| AMCTConfig | repeated | string | skip\_layer\_types | 不需要量化的层类型。 |
| AMCTConfig | optional | FakequantPrecisionMode | fakequant\_precision\_mode | fakequant模型中quant自定义算子的scale\_d数值精度模式。 FORCE\_FP16\_QUANT：scale\_d参数的数值转换为float16精度，数值类型是float32。 空，即不配置，默认为空。scale\_d参数的数值保持float32精度。 |
| AMCTConfig | optional | CalibrationConfig | common\_config | 通用的量化配置，全局量化配置参数。若某层未被override\_layer\_types或者override\_layer\_configs重写，则使用该配置。 参数优先级：override\_layer\_configs>override\_layer\_types>common\_config |
| AMCTConfig | repeated | OverrideLayerType | override\_layer\_types | 重写某一类型层的量化配置，即对哪些层进行差异化量化。 例如全局量化配置参数配置的量化因子搜索步长为0.01，可以通过该参数对部分层进行差异化量化，可以配置搜索步长为0.02。 参数优先级：override\_layer\_configs>override\_layer\_types>common\_config |
| AMCTConfig | repeated | OverrideLayer | override\_layer\_configs | 重写某一层的量化配置，即对哪些层进行差异化量化。 例如全局量化配置参数配置的量化因子搜索步长为0.01，可以通过该参数对部分层进行差异化量化，可以配置搜索步长为0.02。 参数优先级：override\_layer\_configs>override\_layer\_types>common\_config |
| AMCTConfig | optional | bool | do\_fusion | 是否开启BN融合功能，默认为true，表示开启该功能。 |
| AMCTConfig | repeated | string | skip\_fusion\_layers | 跳过BN融合的层，配置之后这些层不会进行BN融合。 |
| OverrideLayerType | \- | \- | \- | 重置某层类型的量化配置。 |
| OverrideLayerType | required | string | layer\_type | 支持量化的层类型的名字。 |
| OverrideLayerType | required | CalibrationConfig | calibration\_config | 重置的量化配置。 |
| OverrideLayer | \- | \- | \- | 重置某层量化配置。 |
| OverrideLayer | required | string | layer\_name | 被重置层的层名。 |
| OverrideLayer | required | CalibrationConfig | calibration\_config | 重置的量化配置。 |
| CalibrationConfig | \- | \- | \- | Calibration量化的配置。 |
| CalibrationConfig | \- | ARQuantize | arq\_quantize | 权重量化算法配置。 arq\_quantize：ARQ量化算法配置。 |
| CalibrationConfig | \- | ADAquantize | ada\_quantize | 权重量化算法配置。 ada\_quantize：Adaptive rounding (AdaRound) ，自适应舍入量化算法配置。 |
| CalibrationConfig | \- | FMRQuantize | ifmr\_quantize | 数据量化算法配置。 ifmr\_quantize：IFMR量化算法配置。 |
| CalibrationConfig | \- | HFMGQuantize | hfmg\_quantize | 数据量化算法配置。 hfmg\_quantize：HFMG量化算法配置。 |
| CalibrationConfig | \- | DMQBalancer | dmq\_balancer | 均衡量化算法配置。 dmq\_balancer：DMQBalancer均衡算法配置。 |
| ARQuantize | \- | \- | \- | ARQ量化算法配置。算法介绍请参见ARQ。 该算法与ADAquantize、NUQuantize算法不能同时配置，若同时配置，则以配置文件中最后配置的量化算法为准。 |
| ARQuantize | optional | bool | channel\_wise | 是否对每个channel采用不同的量化因子。 true：每个channel独立量化，量化因子不同。 false：所有channel同时量化，共享量化因子。 |
| ARQuantize | optional | uint32 | quant\_bits | 权重量化位宽。支持配置为INT6、INT7、INT8。当前版本仅支持INT8量化。 默认为INT8量化。 该字段配置为INT6、INT7仅支持Conv2d类型算子。 如果在common\_config中配置quant\_bits为INT6、INT7，则只对Conv2d算子生效，其他算子改为默认INT8。 |
| ADAquantize | \- | \- | \- | AdaRound自适应舍入量化算法，算法介绍请参见ADA。量化样例请参见ada round量化校准(https://gitee.com/ascend/samples/tree/master/python/level1\_single\_api/9\_amct/amct\_pytorch/ada\_round\_calibration)。 该算法与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。 |
| ADAquantize | optional | uint32 | num\_iteration | 迭代次数，取值范围>=0，默认值为10000。 |
| ADAquantize | optional | float | reg\_param | 正则化参数，取值范围为(0,1)，默认值为0.01。 |
| ADAquantize | optional | float | beta\_range\_start | beta起始参数，默认值为20，beta\_range\_start>beta\_range\_end>0。 |
| ADAquantize | optional | float | beta\_range\_end | beta终止参数，默认值为2。 |
| ADAquantize | optional | float | warm\_start | 预热因子，取值范围为(0,1)，默认值为0.2。 |
| ADAquantize | optional | bool | channel\_wise | 是否对每个channel采用不同的量化因子。 true：每个channel独立量化，量化因子不同。 false：所有channel同时量化，共享量化因子。 |
| DMQBalancer | \- | \- | \- | DMQ均衡算法配置。算法介绍请参见DMQ均衡算法。 |
| DMQBalancer | optional | float | migration\_strength | 迁移强度，代表将activation数据上的量化难度迁移至weight权重的程度。支持的范围为[0.2, 0.8]，默认值0.5，数据分布的离群值越大迁移强度应设置较小。 |
| FMRQuantize | \- | \- | \- | FMR数据量化算法配置。算法介绍请参见IFMR数据量化算法。 该算法与HFMGQuantize算法不能同时配置，若同时配置，则以配置文件中最后配置的量化算法为准。 |
| FMRQuantize | optional | float | search\_range\_start | 量化因子搜索范围左边界。 |
| FMRQuantize | optional | float | search\_range\_end | 量化因子搜索范围右边界。 |
| FMRQuantize | optional | float | search\_step | 量化因子搜索步长。 |
| FMRQuantize | optional | float | max\_percentile | 最大值搜索位置。 |
| FMRQuantize | optional | float | min\_percentile | 最小值搜索位置。 |
| FMRQuantize | 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 |
| FMRQuantize | optional | CalibrationDataType | dst\_type | 量化数据类型，数据量化是采用INT8量化还是INT16量化，默认为INT8量化。当前版本仅支持INT8量化。 |
| HFMGQuantize | \- | \- | \- | HFMG数据量化算法配置。算法介绍请参见HFMG数据量化算法。 该算法与FMRQuantize算法不能同时配置，若同时配置，则以配置文件中最后配置的量化算法为准。 |
| HFMGQuantize | optional | uint32 | num\_of\_bins | 直方图的bin（直方图中的一个最小单位直方图形）数目，支持的范围为{1024, 2048, 4096, 8192}。 默认值为4096。 |
| HFMGQuantize | 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 |
| HFMGQuantize | optional | CalibrationDataType | dst\_type | 量化数据类型，数据量化是采用INT8量化还是INT16量化，默认为INT8量化。当前版本仅支持INT8量化。 |


- 基于该文件构造的训练后量化简易配置文件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
}
}
}
```
