1
1
# ERNIE 3.0 轻量级模型
2
2
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
+
3
23
## 模型介绍
4
24
TBD
5
25
<p align =" center " >
6
26
<img width="644" alt="image" src="https://user-images.githubusercontent.com/1371212/168254282-e6901f9a-fd9a-4bbd-a5b6-e847b7f90bb4.png">
7
27
</p >
8
28
29
+
9
30
## 模型效果
10
31
11
32
本项目开源 ** ERNIE 3.0 _ base_ *** 和 ** ERNIE 3.0 _ medium_ ** 两个模型:
368
389
<br />
369
390
370
391
392
+ 以下是本范例模型的简要目录结构及说明:
371
393
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
+ ## 微调
373
425
374
426
``` python
375
427
@@ -381,12 +433,13 @@ tokenizer = AutoTokenizer.from_pretrained("ernie-3.0-medium-zh")
381
433
seq_cls_model = AutoModelForSequenceClassificaion.from_pretrained(" ernie-3.0-medium-zh" )
382
434
383
435
# 用于命名实体识别任务
384
- token_cls_model = AutoModelForTokenClassification.from_pretrained(" ernie-3.0-medium -zh" )
436
+ token_cls_model = AutoModelForTokenClassification.from_pretrained(" ernie-3.0-base -zh" )
385
437
386
438
# 用于阅读理解任务
387
- qa_model = AutoModelForQuestionAnswering.from_pretrained(" ernie-3.0-medium -zh" )
439
+ qa_model = AutoModelForQuestionAnswering.from_pretrained(" ernie-3.0-base -zh" )
388
440
389
441
```
442
+
390
443
ERNIE 3.0 提供了针对分类、命名实体识别、阅读理解三大场景下的微调使用样例,分别参考 ` run_seq_cls.py ` 、` run_token_cls.py ` 、` run_qa.py ` 三个脚本,启动方式如下:
391
444
392
445
``` shell
@@ -401,18 +454,27 @@ python run_qa.py --model_name_or_path ernie-3.0-medium-zh --do_train
401
454
402
455
```
403
456
404
- ## 模型压缩及推理部署
457
+ <a name =" 模型压缩 " ></a >
458
+
459
+ ## 模型压缩
405
460
406
- ### 模型压缩 API 及使用
461
+ < a name = " 环境依赖 " ></ a >
407
462
408
- ERNIE 3.0 基于 PaddleNLP 的 Trainer API 发布提供了模型压缩 API。压缩 API 支持用户对 ERNIE、BERT 等Transformers 类下游任务微调模型进行裁剪、量化。用户只需要简单地调用 ` compress() ` API 即可一键启动裁剪和量化,并自动保存压缩后的模型。
463
+ ### 环境依赖
409
464
410
- 首先需要安装 paddleslim 包
465
+ 压缩功能需要安装 paddleslim 包
411
466
412
467
``` shell
413
468
pip install paddleslim
414
469
```
415
470
471
+ <a name =" 模型压缩API使用 " ></a >
472
+
473
+ ### 模型压缩 API 使用
474
+
475
+ ERNIE 3.0 基于 PaddleNLP 的 Trainer API 发布提供了模型压缩 API。压缩 API 支持用户对 ERNIE、BERT 等Transformers 类下游任务微调模型进行裁剪、量化。用户只需要简单地调用 ` compress() ` 即可一键启动裁剪和量化,并自动保存压缩后的模型。
476
+
477
+
416
478
可以这样使用压缩 API (示例代码只提供了核心调用,如需跑通完整的例子可参考下方完整样例脚本):
417
479
418
480
``` python
@@ -433,8 +495,8 @@ compress_config = CompressConfig(quantization_config=PTQConfig(
433
495
trainer.compress(
434
496
data_args.dataset,
435
497
output_dir,
436
- pruning = True ,
437
- quantization = True ,
498
+ pruning = True , # 开启裁剪
499
+ quantization = True , # 开启量化
438
500
compress_config = compress_config)
439
501
```
440
502
@@ -463,49 +525,101 @@ python infer.py --task_name tnews --model_path best_models/TNEWS/compress/0.75/h
463
525
464
526
```
465
527
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
+
466
536
467
- ### 压缩精度
537
+ <a name =" 压缩效果 " ></a >
538
+
539
+ ### 压缩效果
540
+
541
+ <a name =" 精度 " ></a >
542
+
543
+ #### 精度
468
544
469
545
这三类任务使用压缩 API 压缩精度如下:
470
546
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 >
471
560
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裁剪、量化 | | | | | | | | | | |
478
561
479
- ### 性能提升
480
562
481
- 压缩后的性能:
563
+ ##### CPU 性能
482
564
483
565
GPU:
484
566
TBD
485
567
486
568
CPU:
487
569
TBD
488
570
489
- ** 压缩 API 使用TIPS:**
490
571
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 |
492
578
493
- 2 . 裁剪类似蒸馏过程,方便起见,可以直接使用微调时的超参。为了进一步提升精度,可以对 ` batch_size ` 、` learning_rate ` 、` epoch ` 、` max_seq_length ` 等超参进行 grid search;
494
579
495
- 3 . 模型压缩主要用于推理部署,因此压缩后的模型都是静态图模型,只可用于预测,不能再通过 ` from_pretrained ` 导入继续训练。
580
+ 测试环境 & 结论:
496
581
497
- ### 推理部署
582
+ < a name = " GPU性能 " ></ a >
498
583
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 |
500
594
501
- #### Paddle Serving 部署
502
595
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
+ ### 服务化部署
503
615
TBD
504
616
617
+
505
618
## Reference
506
619
507
620
* 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.
508
621
509
622
* 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.
510
623
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