Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleSlim
提交
8cc39f55
P
PaddleSlim
项目概览
PaddlePaddle
/
PaddleSlim
大约 1 年 前同步成功
通知
51
Star
1434
Fork
344
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
53
列表
看板
标记
里程碑
合并请求
16
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleSlim
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
53
Issue
53
列表
看板
标记
里程碑
合并请求
16
合并请求
16
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
8cc39f55
编写于
6月 24, 2022
作者:
W
whs
提交者:
GitHub
6月 24, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add demo of ACT for ernie3.0 (#1184)
上级
9a07386f
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
92 addition
and
9 deletion
+92
-9
demo/auto_compression/nlp/README.md
demo/auto_compression/nlp/README.md
+26
-9
demo/auto_compression/nlp/configs/ernie3.0/afqmc.yaml
demo/auto_compression/nlp/configs/ernie3.0/afqmc.yaml
+9
-0
demo/auto_compression/nlp/configs/ernie3.0/cluewsc.yaml
demo/auto_compression/nlp/configs/ernie3.0/cluewsc.yaml
+9
-0
demo/auto_compression/nlp/configs/ernie3.0/cmnli.yaml
demo/auto_compression/nlp/configs/ernie3.0/cmnli.yaml
+9
-0
demo/auto_compression/nlp/configs/ernie3.0/csl.yaml
demo/auto_compression/nlp/configs/ernie3.0/csl.yaml
+9
-0
demo/auto_compression/nlp/configs/ernie3.0/iflytek.yaml
demo/auto_compression/nlp/configs/ernie3.0/iflytek.yaml
+9
-0
demo/auto_compression/nlp/configs/ernie3.0/ocnli.yaml
demo/auto_compression/nlp/configs/ernie3.0/ocnli.yaml
+9
-0
demo/auto_compression/nlp/configs/ernie3.0/tnews.yaml
demo/auto_compression/nlp/configs/ernie3.0/tnews.yaml
+9
-0
demo/auto_compression/nlp/configs/pp-minilm/auto/afqmc.yaml
demo/auto_compression/nlp/configs/pp-minilm/auto/afqmc.yaml
+0
-0
demo/auto_compression/nlp/configs/pp-minilm/auto/cluewsc.yaml
.../auto_compression/nlp/configs/pp-minilm/auto/cluewsc.yaml
+0
-0
demo/auto_compression/nlp/configs/pp-minilm/auto/cmnli.yaml
demo/auto_compression/nlp/configs/pp-minilm/auto/cmnli.yaml
+0
-0
demo/auto_compression/nlp/configs/pp-minilm/auto/csl.yaml
demo/auto_compression/nlp/configs/pp-minilm/auto/csl.yaml
+0
-0
demo/auto_compression/nlp/configs/pp-minilm/auto/iflytek.yaml
.../auto_compression/nlp/configs/pp-minilm/auto/iflytek.yaml
+0
-0
demo/auto_compression/nlp/configs/pp-minilm/auto/ocnli.yaml
demo/auto_compression/nlp/configs/pp-minilm/auto/ocnli.yaml
+0
-0
demo/auto_compression/nlp/configs/pp-minilm/auto/tnews.yaml
demo/auto_compression/nlp/configs/pp-minilm/auto/tnews.yaml
+0
-0
paddleslim/auto_compression/compressor.py
paddleslim/auto_compression/compressor.py
+3
-0
未找到文件。
demo/auto_compression/nlp/README.md
浏览文件 @
8cc39f55
...
...
@@ -14,24 +14,29 @@
## 1. 简介
本示例将以自然语言处理模型PP-MiniLM
为例,介绍如何使用PaddleNLP中Inference部署模型进行自动压缩。本示例使用的自动压缩策略为剪枝蒸馏和离线量化(Post-training quantization)。
本示例将以自然语言处理模型PP-MiniLM
和ERNIE 3.0-Medium为例,介绍如何使用PaddleNLP中Inference部署模型进行自动压缩.
## 2. Benchmark
-
PP-MiniLM模型
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
)
。
-
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
)
。
-
ERNIE 3.0-Medium: 中文预训练模型, 关键参数为(6-layer, 768-hidden, 12-heads), 详情请参考
[
PaddleNLP ERNIE 3.0
](
https://github.com/PaddlePaddle/PaddleNLP/tree/v2.3.3/model_zoo/ernie-3.0
)
模型精度对比如下:
| 模型 | 策略 | AFQMC | TNEWS | IFLYTEK | CMNLI | OCNLI | CLUEWSC2020 | CSL | AVG |
|:------:|:------:|:------:|:------:|:------:|:------:|:-----------:|:------:|:------:|:------:|
| PP-MiniLM | Base模型| 74.03 | 56.66 | 60.21 | 80.98 | 76.20 | 84.21 | 77.36 | 72.81 |
| PP-MiniLM |剪枝蒸馏+离线量化| 73.56 | 56.38 | 59.87 | 80.80 | 76.44 | 82.23 | 77.77 | 72.44 |
| ERNIE 3.0-Medium | Base模型| 75.35 | 57.45 | 60.17 | 81.16 | 77.19 | 80.59 | 79.70 | 73.09 |
| ERNIE 3.0-Medium | 剪枝+量化训练| 74.17 | 56.84 | 59.75 | 80.54 | 76.03 | 76.97 | 80.80 | 72.16 |
模型在不同任务上平均精度以及加速对比如下:
| PP-MiniLM | Accuracy(avg) | 时延(ms) | 加速比 |
|:-------:|:----------:|:------------:| :------:|
| 压缩前 | 72.81 | 128.01 | - |
| 压缩后 | 72.44 | 17.97 | 612% |
| 模型 |策略| Accuracy(avg) | 时延(ms) | 加速比 |
|:-------:|:--------:|:----------:|:------------:| :------:|
|PP-MiniLM| Base模型| 72.81 | 128.01 | - |
|PP-MiniLM| 剪枝+离线量化 | 72.44 | 17.97 | 7.12 |
|ERNIE 3.0-Medium| Base模型| 73.09 | 29.25(fp16) | - |
|ERNIE 3.0-Medium| 剪枝+量化训练 | 72.16 | 19.61 | 1.49 |
性能测试的环境为
-
硬件:NVIDIA Tesla T4 单卡
...
...
@@ -76,13 +81,25 @@ pip install paddlenlp
注:其他像
`__model__`
和
`__params__`
分别对应
`model.pdmodel`
和
`model.pdiparams`
文件。
本示例可参考
[
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模型。
##### 直接下载已微调模型
| 模型 | AFQMC | TNEWS | IFLYTEK | CMNLI | OCNLI | CLUEWSC2020 | CSL |
|:------:|:------:|:------:|:------:|:------:|:-----------:|:------:|:------:|
| PP-MiniLM |
[
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
)
|
[
cmnli
](
https://bj.bcebos.com/v1/paddle-slim-models/act/cmnli.tar
)
|
[
ocnli
](
https://bj.bcebos.com/v1/paddle-slim-models/act/ocnli.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
)
|
| ERNIE 3.0-Medium |
[
afqmc
](
)
|
[
tnews
](
)
|
[
iflytek
](
)
|
[
cmnli
](
)
|
[
ocnli
](
)
|
[
cluewsc2020
](
)
|
[
csl
](
)
|
从上表获得模型超链接, 并用以下命令下载推理模型文件:
```
shell
wget https://bj.bcebos.com/v1/paddle-slim-models/act/afqmc.tar
tar
-zxvf
afqmc.tar
```
##### 重新微调模型
可参考
[
PaddleNLP PP-MiniLM 中文小模型
](
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/model_compression/pp-minilm
)
微调后保存下每个数据集下有最高准确率的模型。
其他模型可根据
[
PaddleNLP文档
](
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples
)
导出Inference模型。
#### 3.4 自动压缩并产出模型
自动压缩示例通过run.py脚本启动,会使用接口
```paddleslim.auto_compression.AutoCompression```
对模型进行自动压缩。配置config文件中训练部分的参数,将任务名称、模型类型、数据集名称、压缩参数传入,配置完成后便可对模型进行剪枝、蒸馏训练和离线量化。
...
...
@@ -100,7 +117,7 @@ python run.py \
--batch_size
=
16
\
--max_seq_length
=
128
\
--task_name
=
'afqmc'
\
--config_path
=
'./configs/afqmc.yaml'
--config_path
=
'./configs/
pp-minilm/auto/
afqmc.yaml'
```
## 4. 压缩配置介绍
...
...
demo/auto_compression/nlp/configs/ernie3.0/afqmc.yaml
0 → 100644
浏览文件 @
8cc39f55
TrainConfig
:
epochs
:
6
eval_iter
:
1070
learning_rate
:
2.0e-5
optimizer_builder
:
optimizer
:
type
:
AdamW
weight_decay
:
0.01
origin_metric
:
0.7334
demo/auto_compression/nlp/configs/ernie3.0/cluewsc.yaml
0 → 100644
浏览文件 @
8cc39f55
TrainConfig
:
epochs
:
100
eval_iter
:
70
learning_rate
:
1.0e-5
optimizer_builder
:
optimizer
:
type
:
AdamW
weight_decay
:
0.01
origin_metric
:
0.7928
demo/auto_compression/nlp/configs/ernie3.0/cmnli.yaml
0 → 100644
浏览文件 @
8cc39f55
TrainConfig
:
epochs
:
6
eval_iter
:
2000
learning_rate
:
3.0e-5
optimizer_builder
:
optimizer
:
type
:
AdamW
weight_decay
:
0.01
origin_metric
:
0.8064
demo/auto_compression/nlp/configs/ernie3.0/csl.yaml
0 → 100644
浏览文件 @
8cc39f55
TrainConfig
:
epochs
:
16
eval_iter
:
1000
learning_rate
:
1.0e-5
optimizer_builder
:
optimizer
:
type
:
AdamW
weight_decay
:
0.01
origin_metric
:
0.8160
demo/auto_compression/nlp/configs/ernie3.0/iflytek.yaml
0 → 100644
浏览文件 @
8cc39f55
TrainConfig
:
epochs
:
12
eval_iter
:
750
learning_rate
:
2.0e-5
optimizer_builder
:
optimizer
:
type
:
AdamW
weight_decay
:
0.01
origin_metric
:
0.6067
demo/auto_compression/nlp/configs/ernie3.0/ocnli.yaml
0 → 100644
浏览文件 @
8cc39f55
TrainConfig
:
epochs
:
20
eval_iter
:
1050
learning_rate
:
3.0e-5
optimizer_builder
:
optimizer
:
type
:
AdamW
weight_decay
:
0.01
origin_metric
:
0.7688
demo/auto_compression/nlp/configs/ernie3.0/tnews.yaml
0 → 100644
浏览文件 @
8cc39f55
TrainConfig
:
epochs
:
6
eval_iter
:
1110
learning_rate
:
2.0e-5
optimizer_builder
:
optimizer
:
type
:
AdamW
weight_decay
:
0.01
origin_metric
:
0.5700
demo/auto_compression/nlp/configs/afqmc.yaml
→
demo/auto_compression/nlp/configs/
pp-minilm/auto/
afqmc.yaml
浏览文件 @
8cc39f55
文件已移动
demo/auto_compression/nlp/configs/cluewsc.yaml
→
demo/auto_compression/nlp/configs/
pp-minilm/auto/
cluewsc.yaml
浏览文件 @
8cc39f55
文件已移动
demo/auto_compression/nlp/configs/cmnli.yaml
→
demo/auto_compression/nlp/configs/
pp-minilm/auto/
cmnli.yaml
浏览文件 @
8cc39f55
文件已移动
demo/auto_compression/nlp/configs/csl.yaml
→
demo/auto_compression/nlp/configs/
pp-minilm/auto/
csl.yaml
浏览文件 @
8cc39f55
文件已移动
demo/auto_compression/nlp/configs/iflytek.yaml
→
demo/auto_compression/nlp/configs/
pp-minilm/auto/
iflytek.yaml
浏览文件 @
8cc39f55
文件已移动
demo/auto_compression/nlp/configs/ocnli.yaml
→
demo/auto_compression/nlp/configs/
pp-minilm/auto/
ocnli.yaml
浏览文件 @
8cc39f55
文件已移动
demo/auto_compression/nlp/configs/tnews.yaml
→
demo/auto_compression/nlp/configs/
pp-minilm/auto/
tnews.yaml
浏览文件 @
8cc39f55
文件已移动
paddleslim/auto_compression/compressor.py
浏览文件 @
8cc39f55
...
...
@@ -15,6 +15,7 @@
import
logging
import
os
import
sys
import
copy
import
numpy
as
np
import
copy
import
inspect
...
...
@@ -300,6 +301,7 @@ class AutoCompression:
def
_prepare_envs
(
self
):
devices
=
paddle
.
device
.
get_device
().
split
(
':'
)[
0
]
places
=
paddle
.
device
.
_convert_to_place
(
devices
)
_logger
.
info
(
f
"devices:
{
devices
}
"
)
exe
=
paddle
.
static
.
Executor
(
places
)
return
exe
,
places
...
...
@@ -309,6 +311,7 @@ class AutoCompression:
model_filename
=
model_filename
,
params_filename
=
params_filename
,
executor
=
exe
)
_
,
_
,
model_type
=
get_patterns
(
inference_program
)
_logger
.
info
(
f
"Detect model type:
{
model_type
}
"
)
return
model_type
def
_prepare_strategy
(
self
,
strategy_config
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录