PaddleClas/deploy/slim/auto_compression
RachelXu7 35b0ba5058 Add ACT/FullQuant Demo 2022-09-15 09:24:28 +00:00
..
README.md Add ACT/FullQuant Demo 2022-09-15 09:24:28 +00:00
mbv3_qat_dis.yaml Add ACT/FullQuant Demo 2022-09-15 09:24:28 +00:00
run.py Add ACT/FullQuant Demo 2022-09-15 09:24:28 +00:00

README.md

图像分类模型自动压缩示例

目录:

1. 简介

本示例将以图像分类模型MobileNetV3为例介绍如何使用PaddleClas中Inference部署模型进行自动压缩。本示例使用的自动压缩策略为量化训练和蒸馏。

2. Benchmark

PaddleClas模型

模型 策略 Top-1 Acc GPU 耗时(ms) ARM CPU 耗时(ms) 配置文件 Inference模型
MobileNetV3_large_x1_0 Baseline 75.32 - 16.62 - Model
MobileNetV3_large_x1_0 量化+蒸馏 74.40 - 9.85 Config Model
  • ARM CPU 测试环境:SDM865(4xA77+4xA55)

3. 自动压缩流程

3.1 准备环境

  • python >= 3.6
  • PaddlePaddle >= 2.3 (可从PaddlePaddle官网下载安装)
  • PaddleSlim >= 2.3

安装paddlepaddle

# CPU
pip install paddlepaddle
# GPU
pip install paddlepaddle-gpu

安装paddleslim

pip install paddleslim

3.2 准备数据集

本案例默认以ImageNet1k数据进行自动压缩实验如数据集为非ImageNet1k格式数据 请参考PaddleClas数据准备文档。将下载好的数据集放在当前目录下./ILSVRC2012

3.3 准备预测模型

预测模型的格式为:model.pdmodelmodel.pdiparams,带pdmodel后缀的是模型文件,带pdiparams后缀的是权重文件。

注:其他像__model____params__分别对应model.pdmodelmodel.pdiparams文件。

可在PaddleClas预训练模型库中直接获取Inference模型具体可参考下方获取MobileNetV3模型示例

wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/inference/MobileNetV3_large_x1_0_infer.tar
tar -xf MobileNetV3_large_x1_0_infer.tar

也可根据PaddleClas文档导出Inference模型。

3.4 自动压缩并产出模型

蒸馏量化自动压缩示例通过run.py脚本启动会使用接口 paddleslim.auto_compression.AutoCompression 对模型进行量化训练和蒸馏。配置config文件中模型路径、数据集路径、蒸馏、量化和训练等部分的参数配置完成后便可开始自动压缩。

单卡启动

export CUDA_VISIBLE_DEVICES=0
python run.py --save_dir='./save_quant_mobilev3/' --config_path='./configs/mbv3_qat_dis.yaml'

多卡启动

图像分类训练任务中往往包含大量训练数据以ImageNet-1k为例如果使用单卡训练会非常耗时使用分布式训练可以达到几乎线性的加速比。

export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch run.py --save_dir='./save_quant_mobilev3/' --config_path='./configs/mbv3_qat_dis.yaml'

多卡训练指的是将训练任务按照一定方法拆分到多个训练节点完成数据读取、前向计算、反向梯度计算等过程,并将计算出的梯度上传至服务节点。服务节点在收到所有训练节点传来的梯度后,会将梯度聚合并更新参数。最后将参数发送给训练节点,开始新一轮的训练。多卡训练一轮训练能训练batch size * num gpus的数据,比如单卡的batch size为128单轮训练的数据量即128而四卡训练的batch size为128单轮训练的数据量为512。

注意 learning ratebatch size 呈线性关系,这里单卡 batch size 为128对应的 learning rate 为0.001,那么如果 batch size 减小4倍改为32learning rate 也需除以4多卡时 batch size 为128learning rate 需乘上卡数。所以改变 batch size 或改变训练卡数都需要对应修改 learning rate

加载训练好的模型进行量化训练时,一般learning rate可比原始训练的learning rate小10倍。

4. 配置文件介绍

自动压缩相关配置主要有:

  • 压缩策略配置如量化Quantization知识蒸馏Distillation结构化稀疏ChannelPruneASP半结构化稀疏ASPPrune 非结构化稀疏UnstructurePrune
  • 训练超参配置TrainConfig主要设置学习率、训练次数epochs和优化器等。
  • 全局配置Global需提供inference模型文件路径输入名称等信息。

详细介绍可参考ACT超参详细教程

注意DataLoader的使用与PaddleClas中的相同,保持与PaddleClas中相同配置即可。不同模型DataLoader的配置可参考PaddleClas配置文件

5. 预测部署

5.1 Python预测推理

Python预测推理可参考

5.2 PaddleLite端侧部署

PaddleLite端侧部署可参考

6. FAQ