量化感知训练简易配置文件
retrain_config_tf.proto文件参数说明如表1所示,该文件所在目录为:AMCT安装目录/amct_tensorflow/proto/retrain_config_tf.proto。
该文件可以配置出量化感知训练简易配置文件、稀疏简易配置文件,组合压缩简易配置文件,用户根据场景进行配置。
| 消息 | 是否必填 | 类型 | 字段 | 说明 | 
|---|---|---|---|---|
| AMCTRetrainConfig | - | - | - | AMCT量化感知训练的简易配置。 | 
| repeated | string | skip_layers | 按层名跳过哪些层不进行压缩。全局参数,方便后续拓展其他特性场景下可同时跳过的层,比如下述拓展的quant_skip_layers参数、regular_prune_skip_layers参数,则通过skip_layers参数可以同时配置两个特性场景下需要跳过的层。而无需在quant_skip_layers和regular_prune_skip_layers参数中分别配置。 若同时配置了skip_layer和quant_skip_layers参数,或skip_layer和regular_prune_skip_layers参数,则取两者并集。 | |
| repeated | string | skip_layer_types | 按层类型跳过哪些层不进行压缩。全局参数,方便后续拓展其他特性场景下可同时跳过的层,比如下述拓展的quant_skip_types参数、regular_prune_skip_types参数,则通过skip_layer_types参数可以同时配置两个特性场景下需要跳过的层。而无需在quant_skip_types和regular_prune_skip_types参数中分别配置。 若同时配置了skip_layer_types和quant_skip_types参数,或skip_layer_types和regular_prune_skip_types参数,则取两者并集。 | |
| repeated | RetrainOverrideLayer | override_layer_configs | 按层名重写哪些层,即对哪些层进行差异化压缩。 例如全局量化配置参数配置的量化位宽为INT8,可以通过该参数对部分层进行差异化量化,可以配置为INT4量化。 参数优先级为: 
 | |
| repeated | RetrainOverrideLayerType | override_layer_types | 按层类型重写哪些层,即对哪些层进行差异化压缩。 例如全局量化配置参数配置的量化位宽为INT8,可以通过该参数对部分层进行差异化量化,可以配置为INT4量化。 参数优先级为: 
 | |
| optional | uint32 | batch_num | 量化使用的batch数量。 | |
| required | RetrainDataQuantConfig | retrain_data_quant_config | 量化感知训练数据量化配置参数。全局量化配置参数。 参数优先级为:override_layer_configs>override_layer_types>retrain_data_quant_config/retrain_weight_quant_config | |
| required | RetrainWeightQuantConfig | retrain_weight_quant_config | 量化感知训练权重量化配置参数。全局量化配置参数。 参数优先级为:override_layer_configs>override_layer_types>retrain_data_quant_config/retrain_weight_quant_config | |
| repeated | string | quant_skip_layers | 按层名跳过不需要量化的层。量化场景下使用的参数。 若同时配置了skip_layer和quant_skip_layers参数,则取两者并集。 | |
| repeated | string | quant_skip_types | 按层类型跳过不需要量化的层。量化场景下使用的参数。 若同时配置了skip_layer_types和quant_skip_types参数,则取两者并集。 | |
| optional | PruneConfig | prune_config | 稀疏配置。全局稀疏配置参数。 参数优先级为:override_layer_configs>override_layer_types>prune_config | |
| repeated | string | regular_prune_skip_layers | 按层名跳过不需要稀疏的层。稀疏场景下使用的参数。 若同时配置了skip_layer和regular_prune_skip_layers参数,则取两者并集。 | |
| repeated | string | regular_prune_skip_types | 按层类型跳过不需要稀疏的层。稀疏场景下使用的参数。 若同时配置了skip_layer_types和regular_prune_skip_types参数,则取两者并集。 | |
| RetrainDataQuantConfig | - | - | - | 量化感知训练数据量化配置。 | 
| - | ActULQquantize | ulq_quantize | 数据量化的算法,目前仅支持ULQ。 | |
| ActULQquantize | - | - | - | ULQ数据量化算法参数。算法介绍请参见ULQ量化算法。 | 
| optional | DataType | dst_type | 用以选择INT8或INT4量化位宽,默认为INT8。 | |
| optional | ClipMaxMin | clip_max_min | 初始化的上下限值,如果不配置,默认用ifmr进行初始化。 | |
| optional | bool | fixed_min | 是否下限不学习且固定为0。默认ReLu后为true,其他为false。 | |
| ClipMaxMin | - | - | - | 初始上下限。 | 
| required | float | clip_max | 初始上限值。 | |
| required | float | clip_min | 初始下限值。 | |
| RetrainWeightQuantConfig | - | - | - | 量化感知训练权重量化配置。 | 
| - | ARQRetrain | arq_retrain | ARQ权重量化算法。 | |
| - | WtsULQRetrain | ulq_retrain | ULQ权重量化算法。 | |
| ARQRetrain | - | - | - | ARQ权重量化算法参数。算法介绍请参见ARQ权重量化算法。 | 
| optional | DataType | dst_type | 量化位宽,用以选择INT8量化还是INT4量化,默认为INT8量化。 
 | |
| optional | bool | channel_wise | 是否做channel wise的arq。 | |
| WtsULQRetrain | - | - | - | ULQ权重量化算法参数。算法介绍请参见ULQ量化算法。 | 
| optional | DataType | dst_type | 量化位宽,用以选择INT8量化还是INT4量化,默认为INT8量化。 
 | |
| optional | bool | channel_wise | 是否做channel wise的ulq。 | |
| RetrainOverrideLayer | - | - | - | 重写的层配置。 | 
| required | string | layer_name | 层名。 | |
| required | RetrainDataQuantConfig | retrain_data_quant_config | 重写的数据层量化参数。 | |
| required | RetrainWeightQuantConfig | retrain_weight_quant_config | 重写的权重层量化参数。 | |
| optional | PruneConfig | prune_config | 重写的稀疏配置参数。 | |
| RetrainOverrideLayerType | - | - | - | 重写的层类型配置。 | 
| required | string | layer_type | 层类型。 | |
| required | RetrainDataQuantConfig | retrain_data_quant_config | 重写的数据层量化参数。 | |
| required | RetrainWeightQuantConfig | retrain_weight_quant_config | 重写的权重层量化参数。 | |
| optional | PruneConfig | prune_config | 重写的稀疏配置参数。 | |
| PruneConfig | - | - | - | 稀疏的配置。 | 
| - | FilterPruner | filter_pruner | filter(输出维度通道)稀疏的配置。 | |
| - | NOutOfMPruner | n_out_of_m_pruner | 4选2稀疏的配置。 由于硬件约束,Atlas 200/300/500 推理产品、Atlas 推理系列产品、Atlas 训练系列产品不支持4选2结构化稀疏特性:使能后获取不到性能收益。 | |
| FilterPruner | - | - | - | filter稀疏的配置。 | 
| - | BalancedL2NormFilterPruner | balanced_l2_norm_filter_prune | BalancedL2Norm算法,算法介绍请参见手工通道稀疏算法。 | |
| BalancedL2NormFilterPruner | - | - | - | BalancedL2Norm算法的配置。 | 
| required | float | prune_ratio | 稀疏率,被稀疏的filter数量与filter总数量的比值。推荐配置为0.2,即20%的输出通道将被裁剪。 | |
| optional | bool | ascend_optimized | 是否做昇腾亲和优化,如果稀疏后的模型要部署在昇腾AI处理器上,建议此项配置为true。 | |
| NOutOfMPruner | - | - | - | 4选2稀疏的配置。 | 
| - | L1SelectivePruner | l1_selective_prune | L1SelectivePrune算法,算法介绍请参见4选2结构化稀疏算法。 | |
| L1SelectivePruner | - | - | - | L1SelectivePrune算法的配置。 | 
| optional | NOutOfMType | n_out_of_m_type | 目前仅支持M4N2,即每4个连续权重中保留2个权重。 | |
| optional | uint32 | update_freq | 更新4选2稀疏的间隔。update_freq=0时仅在第一个batch更新4选2稀疏的选择,update_freq=2时每2个batch更新一次,以此类推。默认为0。 | 
- 基于该文件构造的量化感知训练简易配置文件quant.cfg样例如下所示:# global quantize parameter retrain_data_quant_config: { ulq_quantize: { clip_max_min: { clip_max: 6.0 clip_min: -6.0 } dst_type: INT8 } } retrain_weight_quant_config: { arq_retrain: { channel_wise: true dst_type: INT8 } } skip_layers: "conv_1" override_layer_types : { layer_type: "Optype" retrain_weight_quant_config: { arq_retrain: { channel_wise: false dst_type: INT4 } } } override_layer_configs : { layer_name: "Opname" retrain_weight_quant_config: { arq_retrain: { channel_wise: false dst_type: INT4 } } }
- 基于该文件构造的通道稀疏简易配置文件prune.cfg样例如下所示:# global prune parameter prune_config{ filter_pruner { balanced_l2_norm_filter_prune { prune_ratio: 0.3 ascend_optimized: True } } } # skip layers regular_prune_skip_layers: "Opname" regular_prune_skip_layers: "Opname" # overide specific layers override_layer_configs: { layer_name: "Opname" prune_config : { filter_pruner: { balanced_l2_norm_filter_prune: { prune_ratio: 0.5 ascend_optimized: True } } } }
- 基于该文件构造的4选2结构化稀疏简易配置文件selective_prune.cfg样例如下所示:# global prune parameter prune_config{ n_out_of_m_pruner { l1_selective_prune { n_out_of_m_type: M4N2 update_freq: 0 } } } # skip layers regular_prune_skip_layers: "Opname" regular_prune_skip_layers: "Opname" # overide specific layers override_layer_configs: { layer_name: "Opname" prune_config : { n_out_of_m_pruner: { l1_selective_prune: { n_out_of_m_type: M4N2 update_freq: 1 } } } }
- 基于该文件构造的组合压缩(通道稀疏+INT8量化)简易配置文件compressed1.cfg样例如下所示:prune_config : { filter_pruner : { balanced_l2_norm_filter_prune : { prune_ratio : 0.3 ascend_optimized: True } } } # skip_layers: "skip_layers_name_0" skip_layer_types: "Optype" quant_skip_layers: "Opname" quant_skip_types: "Optype" retrain_weight_quant_config: { arq_retrain: { channel_wise: true dst_type: INT8 } } override_layer_types : { layer_type: "Optype" retrain_weight_quant_config: { arq_retrain: { channel_wise: false dst_type: INT8 } } retrain_data_quant_config : { ulq_quantize : { clip_max_min : { clip_max : 6.0 clip_min : -6.0 } } } prune_config : { filter_pruner : { balanced_l2_norm_filter_prune : { prune_ratio : 0.5 ascend_optimized: True } } } }
- 基于该文件构造的组合压缩(4选2结构化稀疏+INT8量化)简易配置文件compressed2.cfg样例如下所示:prune_config{ n_out_of_m_pruner { l1_selective_prune { n_out_of_m_type: M4N2 update_freq: 0 } } } # skip_layers: "skip_layers_name_0" skip_layer_types: "Optype" quant_skip_layers: "Opname" quant_skip_types: "Optype" retrain_weight_quant_config: { arq_retrain: { channel_wise: true dst_type: INT8 } } override_layer_types : { layer_type: "Optype" retrain_weight_quant_config: { arq_retrain: { channel_wise: false dst_type: INT8 } } retrain_data_quant_config : { ulq_quantize : { clip_max_min : { clip_max : 6.0 clip_min : -6.0 } } } prune_config{ n_out_of_m_pruner { l1_selective_prune { n_out_of_m_type: M4N2 update_freq: 1 } } } }