Skip to content

Commit 157dcb2

Browse files
authored
add ACT PP-MiniLM demo (PaddlePaddle#1108)
1 parent a8cfdd3 commit 157dcb2

File tree

1 file changed

+71
-39
lines changed

1 file changed

+71
-39
lines changed

demo/auto_compression/nlp/README.md

Lines changed: 71 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,49 @@
11
# 自然语言处理模型自动压缩示例
22

3-
本示例将介绍如何使用PaddleNLP中Inference部署模型进行自动压缩。
4-
5-
## Benchmark
3+
目录:
4+
- [1. 简介](#1简介)
5+
- [2. Benchmark](#2Benchmark)
6+
- [3. 自动压缩流程](#自动压缩流程)
7+
- [3.1 准备环境](#31-准备准备)
8+
- [3.2 准备数据集](#32-准备数据集)
9+
- [3.3 准备预测模型](#33-准备预测模型)
10+
- [3.4 自动压缩并产出模型](#34-自动压缩并产出模型)
11+
- [4. 压缩配置介绍](#4压缩配置介绍)
12+
- [5. 预测部署](#5预测部署)
13+
- [6. FAQ](6FAQ)
14+
15+
16+
## 1. 简介
17+
本示例将以自然语言处理模型PP-MiniLM为例,介绍如何使用PaddleNLP中Inference部署模型进行自动压缩。本示例使用的自动压缩策略为剪枝蒸馏和离线量化(Post-training quantization)。
18+
19+
## 2. Benchmark
620
- PP-MiniLM模型
721

8-
PP-MiniLM是一个6层的预训练中文小模型,使用PaddleNLP中``from_pretrained``导入PP-MiniLM之后,就可以在自己的数据集上进行fine-tuning,具体介绍可参考[PP-MiniLM文档](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/model_compression/pp-minilm#PP-MiniLM%E4%B8%AD%E6%96%87%E5%B0%8F%E6%A8%A1%E5%9E%8B)
9-
此自动压缩实验首先会对模型的attention head裁剪25%,同时进行蒸馏训练,然后进行离线量化(Post-training quantization)。
22+
PP-MiniLM是一个6层的预训练中文小模型,使用PaddleNLP中```from_pretrained```导入PP-MiniLM之后,就可以在自己的数据集上进行fine-tuning,具体介绍可参考[PP-MiniLM文档](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/model_compression/pp-minilm#PP-MiniLM%E4%B8%AD%E6%96%87%E5%B0%8F%E6%A8%A1%E5%9E%8B)
1023

24+
模型精度对比如下:
1125
| 模型 | 策略 | AFQMC | TNEWS | IFLYTEK | CMNLI | OCNLI | CLUEWSC2020 | CSL | AVG |
1226
|:------:|:------:|:------:|:------:|:------:|:------:|:-----------:|:------:|:------:|:------:|
1327
| PP-MiniLM | Base模型| 74.03 | 56.66 | 60.21 | 80.98 | 76.20 | 84.21 | 77.36 | 72.81 |
1428
| PP-MiniLM |剪枝蒸馏+离线量化| 73.56 | 56.38 | 59.87 | 80.80 | 76.44 | 82.23 | 77.77 | 72.44 |
1529

30+
模型在不同任务上平均精度以及加速对比如下:
31+
| PP-MiniLM | Accuracy(avg) | 时延(ms) | 加速比 |
32+
|:-------:|:----------:|:------------:| :------:|
33+
| 压缩前 | 72.81 | 128.01 | - |
34+
| 压缩后 | 72.44 | 17.97 | 612% |
35+
1636
性能测试的环境为
1737
- 硬件:NVIDIA Tesla T4 单卡
1838
- 软件:CUDA 11.0, cuDNN 8.0, TensorRT 8.0
1939
- 测试配置:batch_size: 40, max_seq_len: 128
2040

21-
## 环境准备
22-
23-
### 1.准备数据
24-
本案例默认以CLUE数据进行自动压缩实验,如数据集为非CLUE格式数据,请修改启动文本run.sh中dataset字段,PaddleNLP会自动下载对应数据集。
41+
## 3. 自动压缩流程
2542

26-
### 2.准备需要压缩的环境
43+
#### 3.1 准备环境
2744
- python >= 3.6
28-
- paddlepaddle >= 2.3
45+
- PaddlePaddle >= 2.2 (可从[Paddle官网](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html)下载安装)
46+
- PaddleSlim >= 2.3 或者适当develop版本
2947
- PaddleNLP >= 2.3
3048

3149
安装paddlepaddle:
@@ -36,34 +54,59 @@ pip install paddlepaddle
3654
pip install paddlepaddle-gpu
3755
```
3856

57+
安装paddleslim:
58+
```shell
59+
pip install paddleslim
60+
```
61+
3962
安装paddlenlp:
4063
```shell
4164
pip install paddlenlp
4265
```
4366

44-
安装paddleslim:
45-
```shell
46-
pip install paddleslim -i https://pypi.tuna.tsinghua.edu.cn/simple
47-
```
48-
4967
注:安装PaddleNLP的目的是为了下载PaddleNLP中的数据集和Tokenizer。
5068

51-
### 3.准备待压缩的部署模型
52-
如果已经准备好部署的model.pdmodel和model.pdiparams部署模型,跳过此步。
53-
根据[PaddleNLP文档](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples)导出Inference模型,本示例可参考[PaddleNLP PP-MiniLM 中文小模型](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/model_compression/pp-minilm)微调后保存下每个数据集下有最高准确率的模型。或直接下载以下已微调完成的Inference模型:[afqmc](https://bj.bcebos.com/v1/paddle-slim-models/act/afqmc.tar), [tnews](https://bj.bcebos.com/v1/paddle-slim-models/act/tnews.tar), [iflytek](https://bj.bcebos.com/v1/paddle-slim-models/act/iflytek.tar),[ ocnli](https://bj.bcebos.com/v1/paddle-slim-models/act/ocnli.tar), [cmnli](https://bj.bcebos.com/v1/paddle-slim-models/act/cmnli.tar), [cluewsc2020](https://bj.bcebos.com/v1/paddle-slim-models/act/cluewsc.tar), [csl](https://bj.bcebos.com/v1/paddle-slim-models/act/csl.tar)
69+
#### 3.2 准备数据集
70+
本案例默认以CLUE数据进行自动压缩实验,如数据集为非CLUE格式数据,请修改启动文本run.sh中dataset字段,PaddleNLP会自动下载对应数据集。
71+
72+
73+
#### 3.3 准备预测模型
74+
预测模型的格式为:`model.pdmodel``model.pdiparams`两个,带`pdmodel`的是模型文件,带`pdiparams`后缀的是权重文件。
75+
76+
注:其他像`__model__``__params__`分别对应`model.pdmodel``model.pdiparams`文件。
77+
78+
本示例可参考[PaddleNLP PP-MiniLM 中文小模型](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/model_compression/pp-minilm)微调后保存下每个数据集下有最高准确率的模型,也可直接下载以下已微调完成的Inference模型:[afqmc](https://bj.bcebos.com/v1/paddle-slim-models/act/afqmc.tar), [tnews](https://bj.bcebos.com/v1/paddle-slim-models/act/tnews.tar), [iflytek](https://bj.bcebos.com/v1/paddle-slim-models/act/iflytek.tar),[ ocnli](https://bj.bcebos.com/v1/paddle-slim-models/act/ocnli.tar), [cmnli](https://bj.bcebos.com/v1/paddle-slim-models/act/cmnli.tar), [cluewsc2020](https://bj.bcebos.com/v1/paddle-slim-models/act/cluewsc.tar), [csl](https://bj.bcebos.com/v1/paddle-slim-models/act/csl.tar)。其他模型可根据[PaddleNLP文档](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples)导出Inference模型。
79+
5480
```shell
5581
wget https://bj.bcebos.com/v1/paddle-slim-models/act/afqmc.tar
5682
tar -zxvf afqmc.tar
5783
```
5884

59-
## 开始自动压缩
85+
#### 3.4 自动压缩并产出模型
86+
87+
自动压缩示例通过run.py脚本启动,会使用接口```paddleslim.auto_compression.AutoCompression```对模型进行自动压缩。配置config文件中训练部分的参数,将任务名称、模型类型、数据集名称、压缩参数传入,配置完成后便可对模型进行剪枝、蒸馏训练和离线量化。
88+
数据集为CLUE,不同任务名称代表CLUE上不同的任务,可选择的任务名称有:afqmc, tnews, iflytek, ocnli, cmnli, cluewsc2020, csl。具体运行命令为
89+
90+
```shell
91+
python run.py \
92+
--model_type='ppminilm' \
93+
--model_dir='./afqmc/' \
94+
--model_filename='inference.pdmodel' \
95+
--params_filename='inference.pdiparams' \
96+
--dataset='clue' \
97+
--save_dir='./save_afqmc_pruned/' \
98+
--batch_size=16 \
99+
--max_seq_length=128 \
100+
--task_name='afqmc' \
101+
--config_path='./configs/afqmc.yaml'
102+
```
60103

61-
### 压缩配置介绍
62-
自动压缩需要准备config文件,并传入``config_path``字段,configs文件夹下可查看不同任务的配置文件,以下示例以afqmc数据集为例介绍。训练参数需要自行配置。蒸馏、剪枝和离线量化的相关配置,自动压缩策略可以自动获取得到,也可以自行配置。PaddleNLP模型的自动压缩实验默认使用剪枝、蒸馏和离线量化的策略。
104+
## 4. 压缩配置介绍
105+
自动压缩需要准备config文件,并传入```config_path```字段,configs文件夹下可查看不同任务的配置文件,以下示例以afqmc数据集为例介绍。训练参数需要自行配置。蒸馏、剪枝和离线量化的相关配置,自动压缩策略可以自动获取得到,也可以自行配置。PaddleNLP模型的自动压缩实验默认使用剪枝、蒸馏和离线量化的策略。
63106

64107
- 训练参数
65108

66-
训练参数主要设置学习率、训练轮数(epochs)和优化器等。``origin_metric``是原模型精度,如设置该参数,压缩之前会先验证模型精度是否正常。
109+
训练参数主要设置学习率、训练轮数(epochs)和优化器等。```origin_metric```是原模型精度,如设置该参数,压缩之前会先验证模型精度是否正常。
67110

68111
```yaml
69112
TrainConfig:
@@ -134,22 +177,11 @@ Quantization:
134177
weight_bits: 8
135178
```
136179
137-
### 进行剪枝蒸馏和离线量化自动压缩
138-
139-
蒸馏量化自动压缩示例通过run.py脚本启动,会使用接口``paddleslim.auto_compression.AutoCompression``对模型进行离线量化。将任务名称、模型类型、数据集名称、压缩参数传入,对模型进行剪枝、蒸馏训练和离线量化。数据集为CLUE,不同任务名称代表CLUE上不同的任务,可选择的任务名称有:afqmc, tnews, iflytek, ocnli, cmnli, cluewsc2020, csl。具体运行命令为:
140-
```shell
141-
python run.py \
142-
--model_type='ppminilm' \
143-
--model_dir='./afqmc/' \
144-
--model_filename='inference.pdmodel' \
145-
--params_filename='inference.pdiparams' \
146-
--dataset='clue' \
147-
--save_dir='./save_afqmc_pruned/' \
148-
--batch_size=16 \
149-
--max_seq_length=128 \
150-
--task_name='afqmc' \
151-
--config_path='./configs/afqmc.yaml'
152-
```
180+
## 5. 预测部署
153181
182+
- [Paddle Inference Python部署](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/docs/deployment/inference/python_inference.md)
183+
- [Paddle Inference C++部署](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/docs/deployment/inference/cpp_inference.md)
184+
- [Paddle Lite部署](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/docs/deployment/lite/lite.md)
154185
186+
## 6. FAQ
155187

0 commit comments

Comments
 (0)