未验证 提交 8cc39f55 编写于 作者: W whs 提交者: GitHub

Add demo of ACT for ernie3.0 (#1184)

上级 9a07386f
...@@ -14,24 +14,29 @@ ...@@ -14,24 +14,29 @@
## 1. 简介 ## 1. 简介
本示例将以自然语言处理模型PP-MiniLM为例,介绍如何使用PaddleNLP中Inference部署模型进行自动压缩。本示例使用的自动压缩策略为剪枝蒸馏和离线量化(Post-training quantization)。 本示例将以自然语言处理模型PP-MiniLM和ERNIE 3.0-Medium为例,介绍如何使用PaddleNLP中Inference部署模型进行自动压缩.
## 2. Benchmark ## 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 | | 模型 | 策略 | 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 | 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 | | 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) | 加速比 | | 模型 |策略| Accuracy(avg) | 时延(ms) | 加速比 |
|:-------:|:----------:|:------------:| :------:| |:-------:|:--------:|:----------:|:------------:| :------:|
| 压缩前 | 72.81 | 128.01 | - | |PP-MiniLM| Base模型| 72.81 | 128.01 | - |
| 压缩后 | 72.44 | 17.97 | 612% | |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 单卡 - 硬件:NVIDIA Tesla T4 单卡
...@@ -76,13 +81,25 @@ pip install paddlenlp ...@@ -76,13 +81,25 @@ pip install paddlenlp
注:其他像`__model__``__params__`分别对应`model.pdmodel``model.pdiparams`文件。 注:其他像`__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 ```shell
wget https://bj.bcebos.com/v1/paddle-slim-models/act/afqmc.tar wget https://bj.bcebos.com/v1/paddle-slim-models/act/afqmc.tar
tar -zxvf 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 自动压缩并产出模型 #### 3.4 自动压缩并产出模型
自动压缩示例通过run.py脚本启动,会使用接口```paddleslim.auto_compression.AutoCompression```对模型进行自动压缩。配置config文件中训练部分的参数,将任务名称、模型类型、数据集名称、压缩参数传入,配置完成后便可对模型进行剪枝、蒸馏训练和离线量化。 自动压缩示例通过run.py脚本启动,会使用接口```paddleslim.auto_compression.AutoCompression```对模型进行自动压缩。配置config文件中训练部分的参数,将任务名称、模型类型、数据集名称、压缩参数传入,配置完成后便可对模型进行剪枝、蒸馏训练和离线量化。
...@@ -100,7 +117,7 @@ python run.py \ ...@@ -100,7 +117,7 @@ python run.py \
--batch_size=16 \ --batch_size=16 \
--max_seq_length=128 \ --max_seq_length=128 \
--task_name='afqmc' \ --task_name='afqmc' \
--config_path='./configs/afqmc.yaml' --config_path='./configs/pp-minilm/auto/afqmc.yaml'
``` ```
## 4. 压缩配置介绍 ## 4. 压缩配置介绍
......
TrainConfig:
epochs: 6
eval_iter: 1070
learning_rate: 2.0e-5
optimizer_builder:
optimizer:
type: AdamW
weight_decay: 0.01
origin_metric: 0.7334
TrainConfig:
epochs: 100
eval_iter: 70
learning_rate: 1.0e-5
optimizer_builder:
optimizer:
type: AdamW
weight_decay: 0.01
origin_metric: 0.7928
TrainConfig:
epochs: 6
eval_iter: 2000
learning_rate: 3.0e-5
optimizer_builder:
optimizer:
type: AdamW
weight_decay: 0.01
origin_metric: 0.8064
TrainConfig:
epochs: 16
eval_iter: 1000
learning_rate: 1.0e-5
optimizer_builder:
optimizer:
type: AdamW
weight_decay: 0.01
origin_metric: 0.8160
TrainConfig:
epochs: 12
eval_iter: 750
learning_rate: 2.0e-5
optimizer_builder:
optimizer:
type: AdamW
weight_decay: 0.01
origin_metric: 0.6067
TrainConfig:
epochs: 20
eval_iter: 1050
learning_rate: 3.0e-5
optimizer_builder:
optimizer:
type: AdamW
weight_decay: 0.01
origin_metric: 0.7688
TrainConfig:
epochs: 6
eval_iter: 1110
learning_rate: 2.0e-5
optimizer_builder:
optimizer:
type: AdamW
weight_decay: 0.01
origin_metric: 0.5700
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
import logging import logging
import os import os
import sys import sys
import copy
import numpy as np import numpy as np
import copy import copy
import inspect import inspect
...@@ -300,6 +301,7 @@ class AutoCompression: ...@@ -300,6 +301,7 @@ class AutoCompression:
def _prepare_envs(self): def _prepare_envs(self):
devices = paddle.device.get_device().split(':')[0] devices = paddle.device.get_device().split(':')[0]
places = paddle.device._convert_to_place(devices) places = paddle.device._convert_to_place(devices)
_logger.info(f"devices: {devices}")
exe = paddle.static.Executor(places) exe = paddle.static.Executor(places)
return exe, places return exe, places
...@@ -309,6 +311,7 @@ class AutoCompression: ...@@ -309,6 +311,7 @@ class AutoCompression:
model_filename=model_filename, params_filename=params_filename, model_filename=model_filename, params_filename=params_filename,
executor=exe) executor=exe)
_, _, model_type = get_patterns(inference_program) _, _, model_type = get_patterns(inference_program)
_logger.info(f"Detect model type: {model_type}")
return model_type return model_type
def _prepare_strategy(self, strategy_config): def _prepare_strategy(self, strategy_config):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册