量化参数主要设置量化比特数和量化op类型,其中量化op包含卷积层(conv2d, depthwise_conv2d)和全连接层(mul, matmul_v2)。以下为只量化卷积层的示例:
Quantization:
use_pact: true # 量化训练是否使用PACT方法
activation_bits: 8 # 激活量化比特数
weight_bits: 8 # 权重量化比特数
activation_quantize_type: 'range_abs_max' # 激活量化方式
weight_quantize_type: 'channel_wise_abs_max' # 权重量化方式
is_full_quantize: false # 是否全量化
not_quant_pattern: [skip_quant] # 跳过量化层的name_scpoe命名(保持默认即可)
quantize_op_types: [conv2d, depthwise_conv2d] # 量化OP列表
蒸馏参数主要设置蒸馏节点(distill_node_pair
)和教师预测模型路径,如下所示:
Distillation:
# distill_lambda: distill loss所占权重;可输入多个数值,支持不同节点之间使用不同的lambda值
distill_lambda: 1.0
# distill_loss: 蒸馏loss算法;可输入多个loss,支持不同节点之间使用不同的loss算法
distill_loss: l2_loss
# distill_node_pair: 蒸馏节点,即某层输出的变量名称,需包含教师网络节点和对应的学生网络节点,
# 其中教师网络节点名称将在程序中自动添加 “teacher_” 前缀;
# 可输入多个node_pair,支持多节点蒸馏
distill_node_pair:
- teacher_relu_30.tmp_0
- relu_30.tmp_0
# merge_feed: 若teacher和student的输入相同则为true,若teacher和student的输入不同则为false
merge_feed: true
# teacher_model_dir: 保存预测模型文件和预测模型参数文件的文件夹名称
teacher_model_dir: ./inference_model
# teacher_model_filename: 预测模型文件,格式为 *.pdmodel 或 __model__
teacher_model_filename: model.pdmodel
# teacher_params_filename: 预测模型参数文件,格式为 *.pdiparams 或 __params__
teacher_params_filename: model.pdiparams
- 蒸馏loss目前支持的有:fsp_loss,l2_loss,soft_label_loss,也可自定义loss。具体定义和使用可参考知识蒸馏API文档。
结构化稀疏参数设置如下所示:
Prune:
# prune_algo: 裁剪算法
prune_algo: prune
# pruned_ratio: 裁剪比例
pruned_ratio: 0.25
# prune_params_name: 需要裁剪的参数名字
prune_params_name:
- conv1_weights
# criterion: 评估一个卷积层内通道重要性所参考的指标
criterion: l1_norm
- prune_algo目前支持的有:prune、asp和transformer_pruner。
- criterion目前支持的有:l1_norm , bn_scale , geometry_median。具体定义和使用可参考结构化稀疏API文档。
非结构化稀疏参数设置如下所示,其中参数含义详见非结构化稀疏API文档:
UnstructurePrune:
prune_strategy: gmp
prune_mode: ratio
pruned_ratio: 0.75
gmp_config:
stable_iterations: 0
pruning_iterations: 4500
tunning_iterations: 4500
resume_iteration: -1
pruning_steps: 100
initial_ratio: 0.15
prune_params_type: conv1x1_only
local_sparsity: True
训练参数主要设置学习率、训练次数(epochs)和优化器等。
TrainConfig:
epochs: 14
eval_iter: 400
learning_rate: 5.0e-03
optimizer: SGD
optim_args:
weight_decay: 0.0005
首先使用Netron工具 可视化model.pdmodel
模型文件,选择模型中某些层输出Tensor名称,对蒸馏节点进行配置。(一般选择Backbone或网络的输出等层进行蒸馏)