手工调优
执行量化感知训练特性后的精度如果不满足要求,可以尝试手动调整config.json文件中的参数,本节给出调整的原则,以及参数解释。
调优流程
通过create_quant_retrain_config接口生成的config.json文件中的默认配置进行量化,若量化后的推理精度不满足要求,则按照如下步骤调整量化配置文件中的参数。
- 根据create_quant_retrain_config接口生成的默认配置进行量化。若精度满足要求,则调参结束,否则进行下一步。
 - INT4量化场景下,如果量化后精度无法满足要求,则可以将部分量化层量化位宽修改为INT8,即将其"dst_type"参数取值修改为"INT8",修改样例如下:
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, "conv1":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "dst_type":"INT8" }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":true "dst_type":"INT8" } }, "layer1.0.conv1":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "dst_type":"INT8" }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":true "dst_type":"INT8" } } }
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, "layername1":{ "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 } }, "layername2":{ "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 } } }
 - 完成配置后,精度满足要求则调参结束;否则表明量化感知训练对精度影响很大,不能进行量化感知训练,去除量化感知训练配置。
 
量化配置文件
如果通过create_quant_retrain_config接口生成的config.json量化感知训练配置文件,推理精度不满足要求,则需要参见该章节不断调整config.json文件中的内容,直至精度满足要求,该文件部分内容样例如下(用户修改json文件时,请确保层名唯一):
- INT8量化
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 29 30 31 32 33 34 35 36 37 38 39 40 41
{ "version":1, "batch_num":1, "conv1":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "dst_type":"INT8" }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":true, "dst_type":"INT8" } }, "layer1.0.conv1":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "dst_type":"INT8" }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":true, "dst_type":"INT8" } }, "fc":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "dst_type":"INT8" }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":false, "dst_type":"INT8" } } ... }
 - INT4量化
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 29 30 31 32 33 34 35 36 37 38 39 40
{ "version":1, "batch_num":2, "conv1":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "dst_type":"INT8" }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":true, "dst_type":"INT8" } }, "layer1.0.conv1":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "dst_type":"INT4" }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":true, "dst_type":"INT4" } }, "fc":{ "retrain_enable":true, "retrain_data_config":{ "algo":"ulq_quantize", "dst_type":"INT4" }, "retrain_weight_config":{ "algo":"arq_retrain", "channel_wise":true, "dst_type":"INT4" } } }
 
参数说明
配置文件中参数说明如下,其中表8~表10的参数说明在手动调整量化配置文件时才会使用。
作用  | 
控制量化配置文件版本号。  | 
|---|---|
类型  | 
int  | 
取值范围  | 
1  | 
参数说明  | 
目前仅有一个版本号1。  | 
推荐配置  | 
1  | 
必选或可选  | 
可选  | 
作用  | 
控制量化感知训练推理阶段使用多少个batch的数据。  | 
|---|---|
类型  | 
int  | 
取值范围  | 
大于0  | 
参数说明  | 
如果不配置,则使用默认值1,建议校准集图片数量不超过50张,根据batch的大小batch_size计算相应的batch_num数值。 batch_num*batch_size为量化使用的校准集图片数量。 其中batch_size为每个batch所用的图片数量。  | 
推荐配置  | 
1  | 
必选或可选  | 
可选  | 
作用  | 
该层是否进行量化感知训练。  | 
|---|---|
类型  | 
bool  | 
取值范围  | 
true或false  | 
参数说明  | 
  | 
推荐配置  | 
true  | 
必选或可选  | 
可选  | 
作用  | 
该层数据量化配置。  | 
|---|---|
类型  | 
object  | 
取值范围  | 
-  | 
参数说明  | 
包含如下参数: 
  | 
推荐配置  | 
-  | 
必选或可选  | 
可选  | 
作用  | 
该层权重量化配置。  | 
|---|---|
类型  | 
object  | 
取值范围  | 
-  | 
参数说明  | 
包含如下参数: 
  | 
推荐配置  | 
-  | 
必选或可选  | 
可选  | 
作用  | 
该层选择使用的量化算法。  | 
|---|---|
类型  | 
object  | 
取值范围  | 
-  | 
参数说明  | 
  | 
推荐配置  | 
数据量化使用ulq_quantize,权重量化使用arq_retrain。  | 
必选或可选  | 
可选  | 
作用  | 
是否对每个channel采用不同的量化因子。  | 
|---|---|
类型  | 
bool  | 
取值范围  | 
true或false  | 
参数说明  | 
  | 
推荐配置  | 
true  | 
必选或可选  | 
可选  | 
作用  | 
设置数据量化算法下限的开关。  | 
|---|---|
类型  | 
bool  | 
取值范围  | 
true或false  | 
参数说明  | 
 如果不选此项,AMCT根据图的结构自动设置。 如果选择此项,并且网络模型量化层的前一层是relu层,则该参数需要手动设置为true,如果为非relu层,则要手动设置为false。  | 
推荐配置  | 
不选此项  | 
必选或可选  | 
可选  | 
作用  | 
数据量化算法上限。  | 
|---|---|
类型  | 
float  | 
取值范围  | 
clip_max>0 根据不同层activation的数据分布找到最大值max,推荐取值范围为:0.3*max~1.7*max  | 
参数说明  | 
截断上下限数据量化算法,如果选择此项则固定算法截断上限。 如果不选此项,通过ifmr算法学习获取上限。  | 
推荐配置  | 
不选此项  | 
必选或可选  | 
可选  | 
作用  | 
数据量化算法下限。  | 
|---|---|
类型  | 
float  | 
取值范围  | 
clip_min<0 根据不同层activation的数据分布找到最小值min,推荐取值范围为:0.3*min~1.7*min  | 
参数说明  | 
截断上下限数据量化算法,如果选择此项则固定算法截断下限。 如果不选此项,通过ifmr算法学习获取下限。  | 
推荐配置  | 
不选此项  | 
必选或可选  | 
可选  | 
作用  | 
量化位宽的类型。  | 
|---|---|
类型  | 
string  | 
取值范围  | 
INT8或INT4,默认为INT8  | 
参数说明  | 
量化时用于选择是INT8量化还是INT4量化。  | 
推荐配置  | 
-  | 
必选或可选  | 
可选  |