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

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

上级 9a07386f
......@@ -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. 压缩配置介绍
......
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 @@
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.
先完成此消息的编辑!
想要评论请 注册