Skip to content

Commit 84eb98d

Browse files
authored
update auto compression docs (PaddlePaddle#1104)
* update auto compression docs * fix readme * fix title
1 parent dcaa046 commit 84eb98d

File tree

19 files changed

+231
-513
lines changed

19 files changed

+231
-513
lines changed

demo/auto_compression/README.md

Lines changed: 47 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,126 +1,62 @@
1-
# 使用预测模型进行量化训练示例
1+
# 自动压缩工具ACT(Auto Compression Tookit)
22

3-
预测模型保存接口:
4-
动态图使用``paddle.jit.save``保存;
5-
静态图使用``paddle.static.save_inference_model``保存。
3+
## 简介
4+
PaddleSlim推出全新自动压缩工具(ACT),旨在通过Source-Free的方式,自动对预测模型进行压缩,压缩后模型可直接部署应用。ACT自动压缩工具主要特性如下:
5+
- **『更便捷』**:开发者无需了解或修改模型源码,直接使用导出的预测模型进行压缩;
6+
- **『更智能』**:开发者简单配置即可启动压缩,ACT工具会自动优化得到最好预测模型;
7+
- **『更丰富』**:ACT中提供了量化训练、蒸馏、结构化剪枝、非结构化剪枝、多种离线量化方法及超参搜索等等,可任意搭配使用。
68

7-
本示例将介绍如何使用预测模型进行蒸馏量化训练,
8-
首先使用接口``paddleslim.quant.quant_aware_with_infermodel``训练量化模型,
9-
训练完成后,使用接口``paddleslim.quant.export_quant_infermodel``将训好的量化模型导出为预测模型。
109

11-
## 分类模型量化训练流程
10+
## 环境准备
1211

13-
### 1. 准备数据
12+
- 安装PaddlePaddle >= 2.3版本 (从[Paddle官网](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html)下载安装)
13+
- 安装PaddleSlim >= 2.3 或者适当develop版本
1414

15-
``demo``文件夹下创建``data``文件夹,将``ImageNet``数据集解压在``data``文件夹下,解压后``data/ILSVRC2012``文件夹下应包含以下文件:
16-
- ``'train'``文件夹,训练图片
17-
- ``'train_list.txt'``文件
18-
- ``'val'``文件夹,验证图片
19-
- ``'val_list.txt'``文件
15+
## 快速上手
2016

21-
### 2. 准备需要量化的模型
22-
23-
飞桨图像识别套件PaddleClas是飞桨为工业界和学术界所准备的一个图像识别任务的工具集,本示例使用该套件产出imagenet分类模型。
24-
#### 2.1 下载PaddleClas release/2.3分支代码
25-
<https://github.com/PaddlePaddle/PaddleClas/archive/refs/heads/release/2.3.zip>
26-
解压后,进入PaddleClas目录
27-
```
28-
cd PaddleClas-release-2.3
29-
```
30-
#### 2.2 下载MobileNetV2预训练模型
31-
在PaddleClas根目录创建``pretrained``文件夹:
32-
```
33-
mkdir pretrained
17+
```python
18+
# 导入依赖包
19+
from paddleslim.auto_compression.config_helpers import load_config
20+
from paddleslim.auto_compression import AutoCompression
21+
from paddleslim.common.imagenet_reader import reader
22+
# 加载配置文件
23+
compress_config, train_config = load_slim_config("./image_classification/mobilenetv1_qat_dis.yaml")
24+
# 定义DataLoader
25+
train_loader = reader(mode='test') # DataLoader
26+
# 开始自动压缩
27+
ac = AutoCompression(
28+
model_dir="./mobilenetv1_infer",
29+
model_filename="model.pdmodel",
30+
params_filename="model.pdiparams",
31+
save_dir="output",
32+
strategy_config=compress_config,
33+
train_config=train_config,
34+
train_dataloader=train_loader,
35+
eval_callback=None) # eval_function to verify accuracy
36+
ac.compress()
3437
```
3538

36-
下载预训练模型
37-
分类预训练模型库地址 <https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/docs/zh_CN/algorithm_introduction/ImageNet_models.md>
38-
MobileNetV2预训练模型地址 <https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_pretrained.pdparams>
39-
执行下载命令:
40-
```
41-
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_pretrained.pdparams -O ./pretrained/MobileNetV2_pretrained.pdparams
42-
```
39+
**提示:**
40+
- DataLoader传入的数据集是待压缩模型所用的数据集,DataLoader继承自`paddle.io.DataLoader`
41+
- 如无需验证自动压缩过程中模型的精度,`eval_callback`可不传入function,程序会自动根据损失来选择最优模型。
42+
- 自动压缩Config中定义量化、蒸馏、剪枝等压缩算法会合并执行,压缩策略有:量化+蒸馏,剪枝+蒸馏等等。
4343

44-
#### 2.3 导出预测模型
45-
PaddleClas代码库根目录执行如下命令,导出预测模型
46-
```
47-
python tools/export_model.py \
48-
-c ppcls/configs/ImageNet/MobileNetV2/MobileNetV2.yaml \
49-
-o Global.pretrained_model=pretrained/MobileNetV2_pretrained \
50-
-o Global.save_inference_dir=infermodel_mobilenetv2
51-
```
52-
#### 2.4 测试模型精度
53-
拷贝``infermodel_mobilenetv2``文件夹到``PaddleSlim/demo/auto_compression/``文件夹。
54-
```
55-
cd PaddleSlim/demo/auto_compression/
56-
```
57-
使用[eval.py](../quant/quant_post/eval.py)脚本得到模型的分类精度,压缩后的模型也可以使用同一个脚本测试精度:
58-
```
59-
python ../quant/quant_post/eval.py --model_path infermodel_mobilenetv2 --model_name inference.pdmodel --params_name inference.pdiparams
60-
```
61-
精度输出为:
62-
```
63-
top1_acc/top5_acc= [0.71918 0.90568]
64-
```
44+
## 应用示例
6545

66-
### 3. 进行多策略融合压缩
46+
#### [图像分类](./image_classification)
6747

68-
每一个小章节代表一种多策略融合压缩,不代表需要串行执行。
48+
#### [目标检测](./detection)
6949

70-
### 3.1 进行量化蒸馏压缩
71-
蒸馏量化训练示例脚本为[demo_imagenet.py](./demo_imagenet.py),使用接口``paddleslim.auto_compression.AutoCompression``对模型进行量化训练。运行命令为:
72-
```
73-
python demo_imagenet.py \
74-
--model_dir='infermodel_mobilenetv2' \
75-
--model_filename='inference.pdmodel' \
76-
--params_filename='./inference.pdiparams' \
77-
--save_dir='./save_qat_mbv2/' \
78-
--devices='gpu' \
79-
--batch_size=64 \
80-
--data_dir='../data/ILSVRC2012/' \
81-
--config_path='./configs/CV/mbv2_qat_dis.yaml'
82-
```
50+
#### [语义分割](./semantic_segmentation)
8351

84-
### 3.2 进行离线量化超参搜索压缩
85-
离线量化超参搜索压缩示例脚本为[demo_imagenet.py](./demo_imagenet.py),使用接口``paddleslim.auto_compression.AutoCompression``对模型进行压缩。运行命令为:
86-
```
87-
python demo_imagenet.py \
88-
--model_dir='infermodel_mobilenetv2' \
89-
--model_filename='inference.pdmodel' \
90-
--params_filename='./inference.pdiparams' \
91-
--save_dir='./save_ptq_mbv2/' \
92-
--devices='gpu' \
93-
--batch_size=64 \
94-
--data_dir='../data/ILSVRC2012/' \
95-
--config_path='./configs/CV/mbv2_ptq_hpo.yaml'
96-
```
52+
#### [NLP](./nlp)
9753

98-
### 3.3 进行剪枝蒸馏策略融合压缩
99-
注意:本示例为对BERT模型进行ASP稀疏。
100-
首先参考[脚本](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/language_model/bert#%E9%A2%84%E6%B5%8B)得到可部署的模型,或者下载SST-2数据集上的示例模型[SST-2-BERT](https://paddle-qa.bj.bcebos.com/PaddleSlim_datasets/static_bert_models.tar.gz)
101-
剪枝蒸馏压缩示例脚本为[demo_glue.py](./demo_glue.py),使用接口``paddleslim.auto_compression.AutoCompression``对模型进行压缩。运行命令为:
102-
```
103-
python demo_glue.py \
104-
--model_dir='./static_bert_models/' \
105-
--model_filename='bert.pdmodel' \
106-
--params_filename='bert.pdiparams' \
107-
--save_dir='./save_asp_bert/' \
108-
--devices='gpu' \
109-
--batch_size=32 \
110-
--task='sst-2' \
111-
--config_path='./configs/NLP/bert_asp_dis.yaml'
112-
```
54+
#### 即将发布
55+
- [ ] 更多自动压缩应用示例
56+
- [ ] X2Paddle模型自动压缩示例
11357

114-
### 3.4 进行非结构化稀疏蒸馏策略融合压缩
115-
非结构化稀疏蒸馏压缩示例脚本为[demo_imagenet.py](./demo_imagenet.py),使用接口``paddleslim.auto_compression.AutoCompression``对模型进行压缩。运行命令为:
116-
```
117-
python demo_imagenet.py \
118-
--model_dir='infermodel_mobilenetv2' \
119-
--model_filename='inference.pdmodel' \
120-
--params_filename='./inference.pdiparams' \
121-
--save_dir='./save_asp_mbv2/' \
122-
--devices='gpu' \
123-
--batch_size=64 \
124-
--data_dir='../data/ILSVRC2012/' \
125-
--config_path='./configs/CV/xxx.yaml'
126-
```
58+
## 其他
59+
60+
- ACT可以自动处理常见的预测模型,如果有更特殊的改造需求,可以参考[ACT超参配置教程](./hyperparameter_tutorial.md)来进行单独配置压缩策略。
61+
62+
- 如果你发现任何关于ACT自动压缩工具的问题或者是建议, 欢迎通过[GitHub Issues](https://github.com/PaddlePaddle/PaddleSlim/issues)给我们提issues。同时欢迎贡献更多优秀模型,共建开源生态。

demo/auto_compression/configs/CV/mbv2_ptq_hpo.yaml

Lines changed: 0 additions & 22 deletions
This file was deleted.

demo/auto_compression/configs/CV/mbv2_qat_dis.yaml

Lines changed: 0 additions & 63 deletions
This file was deleted.

demo/auto_compression/configs/NLP/bert_asp_dis.yaml

Lines changed: 0 additions & 44 deletions
This file was deleted.

demo/auto_compression/configs/NLP/bert_ptq_hpo.yaml

Lines changed: 0 additions & 22 deletions
This file was deleted.

demo/auto_compression/configs/NLP/bert_qat_dis.yaml

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)