---
title: 手工调优
description: "执行量化感知训练特性后的精度如果不满足要求，可以尝试手动调整config.json文件中的参数，本节给出调整的原则，以及参数解释。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/amct/atlasamct_16_0179.html
sourcePath: /source/zh/canncommercial/900/devaids/amct/atlasamct_16_0179.html
indexId: f79909bef58a6fad0bef516b689cffa778065a00b7a5b9946bb6e4cdeb35440365
---
# 手工调优

执行量化感知训练特性后的精度如果不满足要求，可以尝试手动调整config.json文件中的参数，本节给出调整的原则，以及参数解释。

#### 调优流程

通过create_quant_retrain_config接口生成的config.json文件中的默认配置进行量化，若量化后的推理精度不满足要求，则按照如下步骤调整量化配置文件中的参数。1. 根据  create_quant_retrain_config
接口生成的默认配置进行量化。若精度满足要求，则调参结束，否则进行  2
。
2. INT8量化场景下，可以将部分量化层取消量化，即将其"retrain_enable"参数修改为"false"，通常模型首尾层对推理结果影响较大，故建议优先取消首尾层的量化；如果用户有推荐的clip_max和clip_min的参数取值，则可以按照如下方式修改量化配置文件：
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 { "version":1, "batch_num":1, "inference/Conv2D":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "clip_max":3.0, "clip_min":-3.0 }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":true } }, "inference/Conv2D_1":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "clip_max":3.0, "clip_min":-3.0 }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":true } } }

3. 完成配置后，精度满足要求则调参结束；否则表明量化感知训练对精度影响很大，不能进行量化感知训练，去除量化感知训练配置。


#### 量化配置文件

如果通过create_quant_retrain_config接口生成的config.json量化感知训练配置文件，推理精度不满足要求，则需要参见该章节不断调整config.json文件中的内容，直至精度满足要求，该文件部分内容样例请参见接口中的调用示例部分（用户修改JSON文件时，请确保层名唯一）。配置文件中参数说明如下：


**表1 version参数说明**

| 作用 | 控制量化配置文件版本号。 |
| --- | --- |
| 类型 | int |
| 取值范围 | 1 |
| 参数说明 | 目前仅有一个版本号1。 |
| 推荐配置 | 1 |
| 必选或可选 | 可选 |


**表2 batch_num参数说明**

| 作用 | 控制量化感知训练推理阶段使用多少个batch的数据。 |
| --- | --- |
| 类型 | int |
| 取值范围 | 大于0 |
| 参数说明 | 如果不配置，则使用默认值1，建议校准集图片数量不超过50张，根据batch的大小，batch\_size计算相应的batch\_num数值。 batch\_num\*batch\_size为量化使用的校准集图片数量。 其中batch\_size为每个batch所用的图片数量。 |
| 推荐配置 | 1 |
| 必选或可选 | 可选 |


**表3 retrain_enable参数说明**

| 作用 | 该层是否进行量化感知训练。 |
| --- | --- |
| 类型 | bool |
| 取值范围 | true或false |
| 参数说明 | true：该层需要进行量化感知训练。 false：该层不进行量化感知训练。 |
| 推荐配置 | true |
| 必选或可选 | 可选 |


**表4 retrain_data_config参数说明**

| 作用 | 该层数据量化配置。 |
| --- | --- |
| 类型 | object |
| 取值范围 | \- |
| 参数说明 | 包含如下参数： algo：量化算法选择，默认是ulq\_quantize。 clip\_max：截断量化算法上限，默认不选。 clip\_min：截断量化算法下限，默认不选。 fixed\_min：截断量化算法最小值固定为0，默认不选。 dst\_type：用以选择INT8或INT4量化数据类型，默认为INT8。 |
| 推荐配置 | \- |
| 必选或可选 | 可选 |


**表5 retrain_weight_config参数说明**

| 作用 | 该层权重量化配置。 |
| --- | --- |
| 类型 | object |
| 取值范围 | \- |
| 参数说明 | 包含如下参数： algo：量化算法选择，默认是arq\_retrain channel\_wise |
| 推荐配置 | \- |
| 必选或可选 | 可选 |


**表6 algo参数说明**

| 作用 | 该层选择使用的量化算法。 |
| --- | --- |
| 类型 | object |
| 取值范围 | \- |
| 参数说明 | ulq\_quantize：ulq截断上下限量化算法。 arq\_retrain：arq量化算法。 |
| 推荐配置 | 数据量化使用ulq\_quantize，权重量化使用arq\_retrain。 |
| 必选或可选 | 可选 |


**表7 channel_wise参数说明**

| 作用 | 是否对每个channel采用不同的量化因子。 |
| --- | --- |
| 类型 | bool |
| 取值范围 | true或false |
| 参数说明 | true：每个channel独立量化，量化因子不同。 false：每个channel同时量化，共享量化因子。 |
| 推荐配置 | true |
| 必选或可选 | 可选 |


**表8 fixed_min参数说明**

| 作用 | 设置数据量化算法下限的开关。 |
| --- | --- |
| 类型 | bool |
| 取值范围 | true或false |
| 参数说明 | true：数据量化算法固定下限，并且下限为0。 false：数据量化算法不固定下限。 如果不选此项，amct根据图的结构自动设置。 如果选择此项，并且网络模型量化层的前一层是relu层，则该参数需要手动设置为true，如果为非relu层，则要手动设置为false。 |
| 推荐配置 | 不选此项 |
| 必选或可选 | 可选 |


**表9 clip_max参数说明**

| 作用 | 数据量化算法上限。 |
| --- | --- |
| 类型 | float |
| 取值范围 | clip\_max>0 根据不同层activation的数据分布找到最大值max，推荐取值范围为： 0.3\*max~1.7\*max |
| 参数说明 | 截断上下限数据量化算法，如果选择此项则固定算法截断上限。如果不选此项，通过ifmr算法学习获取上限。 |
| 推荐配置 | 不选此项 |
| 必选或可选 | 可选 |


**表10 clip_min参数说明**

| 作用 | 数据量化算法下限。 |
| --- | --- |
| 类型 | float |
| 取值范围 | clip\_min<0 根据不同层activation的数据分布找到最小值min，推荐取值范围为： 0.3\*min~1.7\*min |
| 参数说明 | 截断上下限数据量化算法，如果选择此项则固定算法截断下限。如果不选此项，通过ifmr算法学习获取下限。 |
| 推荐配置 | 不选此项 |
| 必选或可选 | 可选 |


**表11 dst_type参数说明**

| 作用 | 量化数据类型。 |
| --- | --- |
| 类型 | string |
| 取值范围 | INT8或INT4，默认为INT8 |
| 参数说明 | 量化时用于选择是INT8量化还是INT4量化。当前版本仅支持INT8量化。 |
| 推荐配置 | \- |
| 必选或可选 | 可选 |
