Skip to content

Commit 8ee2eb9

Browse files
LiuChiachiZeyuChen
andauthored
Update ERNIE 3.0 README (#2135)
* update ernie-3.0-readme * fix dir * update precision data Co-authored-by: Zeyu Chen <[email protected]>
1 parent 380a1db commit 8ee2eb9

File tree

1 file changed

+140
-26
lines changed

1 file changed

+140
-26
lines changed

model_zoo/ernie-3.0/README.md

Lines changed: 140 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,32 @@
11
# ERNIE 3.0 轻量级模型
22

3+
**目录**
4+
* [模型介绍](#模型介绍)
5+
* [模型介绍](#模型效果)
6+
* [微调](#微调)
7+
* [模型压缩](#模型压缩)
8+
* [环境依赖](#环境依赖)
9+
* [模型压缩 API 使用](#模型压缩API使用)
10+
* [压缩效果](#压缩效果)
11+
* [精度](#精度)
12+
* [性能](#性能)
13+
* [CPU 性能](#CPU性能)
14+
* [GPU 性能](#CPU性能)
15+
* [部署](#部署)
16+
* [Python 部署](#Python部署)
17+
* [环境依赖](#环境依赖)
18+
* [服务化部署](#服务化部署)
19+
* [环境依赖](#环境依赖)
20+
21+
22+
323
## 模型介绍
424
TBD
525
<p align="center">
626
<img width="644" alt="image" src="https://user-images.githubusercontent.com/1371212/168254282-e6901f9a-fd9a-4bbd-a5b6-e847b7f90bb4.png">
727
</p>
828

29+
930
## 模型效果
1031

1132
本项目开源 **ERNIE 3.0 _base_*****ERNIE 3.0 _medium_**两个模型:
@@ -368,8 +389,39 @@ TBD
368389
<br />
369390

370391

392+
以下是本范例模型的简要目录结构及说明:
371393

372-
## ERNIE 3.0 模型使用
394+
395+
396+
```shell
397+
.
398+
├── run_seq_cls.py # 分类任务的微调脚本
399+
├── run_token_cls.py # 命名实体识别任务的微调脚本
400+
├── run_qa.py # 阅读理解任务的微调脚本
401+
├── compress_seq_cls.py # 分类任务的压缩脚本
402+
├── compress_token_cls.py # 命名实体识别任务的压缩脚本
403+
├── compress_qa.py # 阅读理解任务的压缩脚本
404+
├── config.yml # 压缩配置文件
405+
├── infer.py # 支持CLUE分类、CMRC2018、MSRA_NER 任务的预测脚本
406+
├── deploy # 部署目录
407+
│ └── python
408+
│ └── ernie_predictor.py # TODO
409+
│ └── infer_cpu.py
410+
│ └── infer_gpu.py
411+
│ └── serving
412+
│ └── seq_cls_rpc_client.py
413+
│ └── seq_cls_service.py
414+
│ └── seq_cls_config.yml
415+
│ └── token_cls_rpc_client.py
416+
│ └── token_cls_service.py
417+
│ └── token_cls_config.yml
418+
└── README.md # 文档,本文件
419+
420+
```
421+
422+
<a name="微调"></a>
423+
424+
## 微调
373425

374426
```python
375427

@@ -381,12 +433,13 @@ tokenizer = AutoTokenizer.from_pretrained("ernie-3.0-medium-zh")
381433
seq_cls_model = AutoModelForSequenceClassificaion.from_pretrained("ernie-3.0-medium-zh")
382434

383435
# 用于命名实体识别任务
384-
token_cls_model = AutoModelForTokenClassification.from_pretrained("ernie-3.0-medium-zh")
436+
token_cls_model = AutoModelForTokenClassification.from_pretrained("ernie-3.0-base-zh")
385437

386438
# 用于阅读理解任务
387-
qa_model = AutoModelForQuestionAnswering.from_pretrained("ernie-3.0-medium-zh")
439+
qa_model = AutoModelForQuestionAnswering.from_pretrained("ernie-3.0-base-zh")
388440

389441
```
442+
390443
ERNIE 3.0 提供了针对分类、命名实体识别、阅读理解三大场景下的微调使用样例,分别参考 `run_seq_cls.py``run_token_cls.py``run_qa.py` 三个脚本,启动方式如下:
391444

392445
```shell
@@ -401,18 +454,27 @@ python run_qa.py --model_name_or_path ernie-3.0-medium-zh --do_train
401454

402455
```
403456

404-
## 模型压缩及推理部署
457+
<a name="模型压缩"></a>
458+
459+
## 模型压缩
405460

406-
### 模型压缩 API 及使用
461+
<a name="环境依赖"></a>
407462

408-
ERNIE 3.0 基于 PaddleNLP 的 Trainer API 发布提供了模型压缩 API。压缩 API 支持用户对 ERNIE、BERT 等Transformers 类下游任务微调模型进行裁剪、量化。用户只需要简单地调用 `compress()` API 即可一键启动裁剪和量化,并自动保存压缩后的模型。
463+
### 环境依赖
409464

410-
首先需要安装 paddleslim 包
465+
压缩功能需要安装 paddleslim 包
411466

412467
```shell
413468
pip install paddleslim
414469
```
415470

471+
<a name="模型压缩API使用"></a>
472+
473+
### 模型压缩 API 使用
474+
475+
ERNIE 3.0 基于 PaddleNLP 的 Trainer API 发布提供了模型压缩 API。压缩 API 支持用户对 ERNIE、BERT 等Transformers 类下游任务微调模型进行裁剪、量化。用户只需要简单地调用 `compress()` 即可一键启动裁剪和量化,并自动保存压缩后的模型。
476+
477+
416478
可以这样使用压缩 API (示例代码只提供了核心调用,如需跑通完整的例子可参考下方完整样例脚本):
417479

418480
```python
@@ -433,8 +495,8 @@ compress_config = CompressConfig(quantization_config=PTQConfig(
433495
trainer.compress(
434496
data_args.dataset,
435497
output_dir,
436-
pruning=True,
437-
quantization=True,
498+
pruning=True, # 开启裁剪
499+
quantization=True, # 开启量化
438500
compress_config=compress_config)
439501
```
440502

@@ -463,49 +525,101 @@ python infer.py --task_name tnews --model_path best_models/TNEWS/compress/0.75/h
463525

464526
```
465527

528+
**压缩 API 使用TIPS:**
529+
530+
1. 压缩 API 提供裁剪和量化两个过程,建议两种都选择,裁剪需要训练,训练时间视下游任务数据量而定且和微调是一个量级的。量化不需要训练,更快;因此也可以只选择量化;
531+
532+
2. 裁剪类似蒸馏过程,方便起见,可以直接使用微调时的超参。为了进一步提升精度,可以对 `batch_size``learning_rate``epoch``max_seq_length` 等超参进行 grid search;
533+
534+
3. 模型压缩主要用于推理部署,因此压缩后的模型都是静态图模型,只可用于预测,不能再通过 `from_pretrained` 导入继续训练。
535+
466536

467-
### 压缩精度
537+
<a name="压缩效果"></a>
538+
539+
### 压缩效果
540+
541+
<a name="精度"></a>
542+
543+
#### 精度
468544

469545
这三类任务使用压缩 API 压缩精度如下:
470546

547+
| Model | AFQMC | TNEWS | IFLYTEK | CMNLI | OCNLI | CLUEWSC2020 | CSL | CMRC2018 | MSRA_NER:precision/recall/f1/ | AVG |
548+
| -------------------------- | ----- | ----- | ------- | ----- | ----- | ----------- | ----- | ----------- | ----------------------------- | ----- |
549+
| ERNIE 3.0-Medium | 75.35 | 57.45 | 60.18 | 81.16 | 77.19 | 80.59 | 81.93 | 66.95/87.15 | 92.65/93.43/93.04 | 74.87 |
550+
| ERNIE 3.0-Medium+FP16 | 75.32 | 57.45 | 60.22 | 81.16 | 77.22 | 80.59 | 79.73 | 66.95/87.16 | 92.65/93.45/93.05 | 74.63 |
551+
| ERNIE 3.0-Medium量化 | 74.67 | 56.99 | 59.91 | 81.03 | 75.05 | 78.62 | 80.47 | 66.32/86.82 | 93.10/92.90/92.70 | 73.97 |
552+
| ERNIE 3.0-Medium裁剪 | 75.14 | 57.31 | 60.29 | 81.25 | 77.46 | 79.93 | 81.70 | 65.55/86.24 | 93.10/93.43/93.27 | 74.65 |
553+
| ERNIE 3.0-Medium裁剪+FP16 | 75.21 | 57.27 | 60.29 | 81.24 | 77.56 | 79.93 | 79.67 | 65.39/86.17 | 93.10/93.43/93.27 | 74.43 |
554+
| ERNIE 3.0-Medium裁剪、量化 | 75.02 | 57.26 | | | 77.25 | 78.62 | 79.67 | 65.30/86.03 | 93.17/93.23/93.20 | |
555+
556+
557+
TODO 完善数据,结论
558+
559+
<a name="性能"></a>
471560

472-
| | Model | AFQMC | TNEWS | IFLYTEK | CMNLI | OCNLI | CLUEWSC2020 | CSL | CMRC2018 | MSRA_NER | AVG |
473-
| ---- | -------------------------- | ----- | ----- | ------- | ----- | ----- | ----------- | ----- | ----------- | ----------------- | ----- |
474-
| 1 | ERNIE 3.0-Medium | 75.35 | 57.45 | 60.18 | 81.16 | 77.19 | 80.59 | 81.93 | 66.67/87.49 | 93.04/92.68/93.43 | 74.75 |
475-
| 2 | ERNIE 3.0-Medium量化 | | | | | | | | | | |
476-
| 3 | ERNIE 3.0-Medium裁剪 | 75.14 | 57.31 | 60.29 | 81.25 | 77.46 | 79.93 | 81.7 | 65.67/86.55 | 93.10/92.77/93.43 | 74.65 |
477-
| 4 | ERNIE 3.0-Medium裁剪、量化 | | | | | | | | | | |
478561

479-
### 性能提升
480562

481-
压缩后的性能:
563+
##### CPU 性能
482564

483565
GPU:
484566
TBD
485567

486568
CPU:
487569
TBD
488570

489-
**压缩 API 使用TIPS:**
490571

491-
1. 压缩 API 提供裁剪和量化两个过程,建议两种都选择,裁剪需要训练,训练时间视下游任务数据量而定且和微调是一个量级的。量化不需要训练,更快;因此也可以只选择量化;
572+
| | 文本分类 性能 QPS (seq/s) | NER 性能 QPS (seq/s)(叶梁) | 阅读理解性能 QPS (seq/s) |
573+
| ---------------------------- | -------------------------- | --------------------------- | ------------------------- |
574+
| ERNIE-3.0-medium + FP32 | 311.95 | 90.91 | 33.74 |
575+
| ERNIE-3.0-medium+ INT8 | 600.35 | 141.00 | 56.51 |
576+
| ERNIE-3.0-medium+ 裁剪+FP32 | 408.65 | 122.13 | 48.47 |
577+
| ERNIE-3.0-medium + 裁减+INT8 | 704.42 | 215.58 | 75.23 |
492578

493-
2. 裁剪类似蒸馏过程,方便起见,可以直接使用微调时的超参。为了进一步提升精度,可以对 `batch_size``learning_rate``epoch``max_seq_length` 等超参进行 grid search;
494579

495-
3. 模型压缩主要用于推理部署,因此压缩后的模型都是静态图模型,只可用于预测,不能再通过 `from_pretrained` 导入继续训练。
580+
测试环境 & 结论:
496581

497-
### 推理部署
582+
<a name="GPU性能"></a>
498583

499-
TBD
584+
##### GPU 性能
585+
586+
| | 文本分类 性能 QPS (seq/s) | NER 性能 QPS (seq/s) | 阅读理解性能 QPS (seq/s) |
587+
| ------------------------------ | ------------------------- | -------------------- | ------------------------ |
588+
| ERNIE-3.0-medium + FP32 | 1123.85 | 366.75 | 146.84 |
589+
| ERNIE-3.0-medium + FP16 | 2672.41 | 840.11 | 303.43 |
590+
| ERNIE-3.0-medium + INT8 | 3226.26 | 889.33 | 348.84 |
591+
| ERNIE-3.0-medium+ 裁减 + FP32 | 1424.01 | 454.27 | 183.77 |
592+
| ERNIE-3.0-medium+ 裁减 + FP16 | 3577.62 | 1138.77 | 445.71 |
593+
| ERNIE-3.0-medium + 裁减 + INT8 | 3635.48 | 1105.26 | 444.27 |
500594

501-
#### Paddle Serving 部署
502595

596+
测试环境 & 结论:
597+
598+
599+
<a name="部署"></a>
600+
601+
## 部署
602+
603+
<a name="Python部署"></a>
604+
605+
### Python 部署
606+
607+
<a name="环境依赖"></a>
608+
609+
#### 环境依赖
610+
611+
<a name="服务化部署"></a>
612+
613+
614+
### 服务化部署
503615
TBD
504616

617+
505618
## Reference
506619

507620
* Sun Y, Wang S, Feng S, et al. ERNIE 3.0: Large-scale Knowledge Enhanced Pre-training for Language Understanding and Generation[J]. arXiv preprint arXiv:2107.02137, 2021.
508621

509622
* Su W, Chen X, Feng S, et al. ERNIE-Tiny: A Progressive Distillation Framework for Pretrained Transformer Compression[J]. arXiv preprint arXiv:2106.02241, 2021.
510623

511-
* Wang S, Sun Y, Xiang Y, et al. ERNIE 3.0 Titan: Exploring Larger-scale Knowledge Enhanced Pre-training for Language Understanding and Generation[J]. arXiv preprint arXiv:2112.12731, 2021.
624+
* Wang S, Sun Y, Xiang Y, et al. ERNIE 3.0 Titan: Exploring Larger-scale Knowledge Enhanced Pre-training for Language Understanding and Generation[J]. arXiv preprint arXiv:2112.12731, 2021.
625+

0 commit comments

Comments
 (0)