8
8
9
9
### 快速开始
10
10
11
- 以下示例展示如何基于 FastDeploy 库完成 ERNIE 3.0 Medium 模型在 CLUE Benchmark 的 [ AFQMC 数据集] ( https://github.com/CLUEbenchmark/CLUE ) 上进行文本分类任务的 Python 预测部署,可通过命令行参数` --device ` 以及 ` --backend ` 指定运行在不同的硬件以及推理引擎后端 ,并使用` --model_dir ` 参数指定运行的模型,具体参数设置可查看下面[ 参数说明] ( #参数说明 ) 。示例中的模型是按照 [ ERNIE 3.0 训练文档] ( ../../README.md ) 导出得到的部署模型,其模型目录为` model_zoo/ernie-3.0/best_models/afqmc/export ` (用户可按实际情况设置)。
11
+ 以下示例展示如何完成 ERNIE 3.0 Medium 模型在 CLUE Benchmark 的 [ AFQMC 数据集] ( https://github.com/CLUEbenchmark/CLUE ) 上进行文本分类任务的 Python 预测部署,可通过命令行参数` --device ` 指定运行在不同的硬件 ,并使用` --model_dir ` 参数指定运行的模型,具体参数设置可查看下面[ 参数说明] ( #参数说明 ) 。示例中的模型是按照 [ ERNIE 3.0 训练文档] ( ../../README.md ) 导出得到的部署模型,其模型目录为` model_zoo/ernie-3.0/best_models/afqmc/export ` (用户可按实际情况设置)。
12
12
13
13
``` bash
14
14
15
15
# CPU 推理
16
- python seq_cls_infer.py --model_dir ../../best_models/afqmc/export --device cpu --backend paddle
16
+ python seq_cls_infer.py --model_dir ../../best_models/afqmc/export --device cpu
17
17
18
18
# GPU 推理
19
- python seq_cls_infer.py --model_dir ../../best_models/afqmc/export --device gpu --backend paddle
19
+ python seq_cls_infer.py --model_dir ../../best_models/afqmc/export --device gpu
20
20
21
21
```
22
22
23
23
运行完成后返回的结果如下:
24
24
25
25
``` bash
26
+ I0423 05:00:21.622229 8408 print_statistics.cc:44] --- detected [85, 273] subgraphs!
27
+ --- Running PIR pass [dead_code_elimination_pass]
28
+ I0423 05:00:21.622710 8408 print_statistics.cc:50] --- detected [113] subgraphs!
29
+ --- Running PIR pass [replace_fetch_with_shadow_output_pass]
30
+ I0423 05:00:21.622859 8408 print_statistics.cc:50] --- detected [1] subgraphs!
31
+ --- Running PIR pass [remove_shadow_feed_pass]
32
+ I0423 05:00:21.626749 8408 print_statistics.cc:50] --- detected [2] subgraphs!
33
+ --- Running PIR pass [inplace_pass]
34
+ I0423 05:00:21.631474 8408 print_statistics.cc:50] --- detected [2] subgraphs!
35
+ I0423 05:00:21.631560 8408 analysis_predictor.cc:1186] ======= pir optimization completed =======
36
+ I0423 05:00:21.641817 8408 pir_interpreter.cc:1640] pir interpreter is running by trace mode ...
37
+ Batch 0, example 0 | s1: 花呗收款额度限制 | s2: 收钱码,对花呗支付的金额有限制吗 | label: 1 | score: 0.5175
38
+ Batch 1, example 0 | s1: 花呗支持高铁票支付吗 | s2: 为什么友付宝不支持花呗付款 | label: 0 | score: 0.9873
26
39
27
- [INFO] fastdeploy/runtime.cc(596)::Init Runtime initialized with Backend::PDINFER in Device::CPU.
28
- Batch id:0, example id:0, sentence1:花呗收款额度限制, sentence2:收钱码,对花呗支付的金额有限制吗, label:0, similarity:0.5099
29
- Batch id:1, example id:0, sentence1:花呗支持高铁票支付吗, sentence2:为什么友付宝不支持花呗付款, label:0, similarity:0.9862
30
-
31
- ```
32
-
33
- ### 量化模型部署
34
-
35
- 该示例支持部署 Paddle INT8 新格式量化模型,仅需在` --model_dir ` 参数传入量化模型路径,并且在对应硬件上选择可用的推理引擎后端,即可完成量化模型部署。在 GPU 上部署量化模型时,可选后端为` paddle_tensorrt ` 、` tensorrt ` ;在 CPU 上部署量化模型时,可选后端为` paddle ` 、` onnx_runtime ` 。下面将展示如何使用该示例完成量化模型部署,示例中的模型是按照 [ ERNIE 3.0 训练文档] ( ../../README.md ) 压缩量化后导出得到的量化模型。
36
-
37
- ``` bash
38
-
39
- # 在GPU上使用 tensorrt 后端,模型目录可按照实际模型路径设置
40
- python seq_cls_infer.py --model_dir ../../best_models/afqmc/width_mult_0.75/mse16_1/ --device gpu --backend tensorrt --model_prefix int8
41
-
42
- # 在CPU上使用paddle_inference后端,模型目录可按照实际模型路径设置
43
- python seq_cls_infer.py --model_dir ../../best_models/afqmc/width_mult_0.75/mse16_1/ --device cpu --backend paddle --model_prefix int8
44
-
45
- ```
46
-
47
- 运行完成后返回的结果如下:
48
-
49
- ``` bash
50
- [INFO] fastdeploy/runtime/runtime.cc(101)::Init Runtime initialized with Backend::PDINFER in Device::GPU.
51
- Batch id:0, example id:0, sentence1:花呗收款额度限制, sentence2:收钱码,对花呗支付的金额有限制吗, label:0, similarity:0.5224
52
- Batch id:1, example id:0, sentence1:花呗支持高铁票支付吗, sentence2:为什么友付宝不支持花呗付款, label:0, similarity:0.9856
53
40
```
54
41
55
-
56
42
### 参数说明
57
43
58
44
` seq_cls_infer.py ` 除了以上示例的命令行参数,还支持更多命令行参数的设置。以下为各命令行参数的说明。
@@ -63,66 +49,32 @@ Batch id:1, example id:0, sentence1:花呗支持高铁票支付吗, sentence2:
63
49
| --batch_size | 输入的 batch size,默认为 1|
64
50
| --max_length | 最大序列长度,默认为 128|
65
51
| --device | 运行的设备,可选范围: [ 'cpu', 'gpu'] ,默认为'cpu' |
66
- | --backend | 支持的推理后端,可选范围: [ 'onnx_runtime', 'paddle', 'openvino', 'tensorrt', 'paddle_tensorrt'] ,默认为'paddle' |
67
- | --use_fp16 | 是否使用 FP16模式进行推理。使用 tensorrt 和 paddle_tensorrt 后端时可开启,默认为 False |
68
52
69
53
## 序列标注任务
70
54
71
55
### 快速开始
72
56
73
- 以下示例展示如何基于 FastDeploy 库完成 ERNIE 3.0 Medium 模型在 CLUE Benchmark 的[ MSRA_NER 数据集] ( https://github.com/lemonhu/NER-BERT-pytorch/tree/master/data/msra ) 上进行序列标注任务的 Python 预测部署,可通过命令行参数` --device ` 以及 ` --backend ` 指定运行在不同的硬件以及推理引擎后端 ,并使用` --model_dir ` 参数指定运行的模型,具体参数设置可查看下面[ 参数说明] ( #参数说明 ) 。示例中的模型是按照 [ ERNIE 3.0 训练文档] ( ../../README.md ) 导出得到的部署模型,其模型目录为` model_zoo/ernie-3.0/best_models/msra_ner/export ` (用户可按实际情况设置)。
57
+ 以下示例展示如何完成 ERNIE 3.0 Medium 模型在 CLUE Benchmark 的[ MSRA_NER 数据集] ( https://github.com/lemonhu/NER-BERT-pytorch/tree/master/data/msra ) 上进行序列标注任务的 Python 预测部署,可通过命令行参数` --device ` 指定运行在不同的硬件 ,并使用` --model_dir ` 参数指定运行的模型,具体参数设置可查看下面[ 参数说明] ( #参数说明 ) 。示例中的模型是按照 [ ERNIE 3.0 训练文档] ( ../../README.md ) 导出得到的部署模型,其模型目录为` model_zoo/ernie-3.0/best_models/msra_ner/export ` (用户可按实际情况设置)。
74
58
75
59
76
60
``` bash
77
61
78
62
# CPU 推理
79
- python token_cls_infer.py --model_dir ../../best_models/msra_ner/export/ --device cpu --backend paddle
63
+ python token_cls_infer.py --model_dir ../../best_models/msra_ner/export/ --device cpu
80
64
81
65
# GPU 推理
82
- python token_cls_infer.py --model_dir ../../best_models/msra_ner/export/ --device gpu --backend paddle
83
-
84
- ```
85
-
86
- 运行完成后返回的结果如下:
87
-
88
- ``` bash
89
-
90
- [INFO] fastdeploy/runtime.cc(500)::Init Runtime initialized with Backend::PDINFER in Device::CPU.
91
- input data: 北京的涮肉,重庆的火锅,成都的小吃都是极具特色的美食。
92
- The model detects all entities:
93
- entity: 北京 label: LOC pos: [0, 1]
94
- entity: 重庆 label: LOC pos: [6, 7]
95
- entity: 成都 label: LOC pos: [12, 13]
96
- -----------------------------
97
- input data: 乔丹、科比、詹姆斯和姚明都是篮球界的标志性人物。
98
- The model detects all entities:
99
- entity: 乔丹 label: PER pos: [0, 1]
100
- entity: 科比 label: PER pos: [3, 4]
101
- entity: 詹姆斯 label: PER pos: [6, 8]
102
- entity: 姚明 label: PER pos: [10, 11]
103
- -----------------------------
104
-
105
- ```
106
-
107
- ### 量化模型部署
108
-
109
- 该示例支持部署 Paddle INT8 新格式量化模型,仅需在` --model_dir ` 参数传入量化模型路径,并且在对应硬件上选择可用的推理引擎后端,即可完成量化模型部署。在 GPU 上部署量化模型时,可选后端为` paddle_tensorrt ` 、` tensorrt ` ;在 CPU 上部署量化模型时,可选后端为` paddle ` 、` onnx_runtime ` 。下面将展示如何使用该示例完成量化模型部署,示例中的模型是按照 [ ERNIE 3.0 训练文档] ( ../../README.md ) 压缩量化后导出得到的量化模型。
110
-
111
- ``` bash
112
-
113
- # 在GPU上使用 tensorrt 后端,模型目录可按照实际模型路径设置
114
- python token_cls_infer.py --model_dir ../../best_models/msra_ner/width_mult_0.75/mse16_1/ --device gpu --backend tensorrt --model_prefix int8
115
-
116
- # 在CPU上使用paddle_inference后端,模型目录可按照实际模型路径设置
117
- python token_cls_infer.py --model_dir ../../best_models/msra_ner/width_mult_0.75/mse16_1/ --device cpu --backend paddle --model_prefix int8
66
+ python token_cls_infer.py --model_dir ../../best_models/msra_ner/export/ --device gpu
118
67
119
68
```
120
69
121
70
运行完成后返回的结果如下:
122
71
123
72
``` bash
124
-
125
- [INFO] fastdeploy/runtime.cc(500)::Init Runtime initialized with Backend::PDINFER in Device::CPU.
73
+ ......
74
+ --- Running PIR pass [inplace_pass]
75
+ I0423 09:51:42.250245 4644 print_statistics.cc:50] --- detected [1] subgraphs!
76
+ I0423 09:51:42.250334 4644 analysis_predictor.cc:1186] ======= pir optimization completed =======
77
+ I0423 09:51:42.261358 4644 pir_interpreter.cc:1640] pir interpreter is running by trace mode ...
126
78
input data: 北京的涮肉,重庆的火锅,成都的小吃都是极具特色的美食。
127
79
The model detects all entities:
128
80
entity: 北京 label: LOC pos: [0, 1]
@@ -148,97 +100,7 @@ entity: 姚明 label: PER pos: [10, 11]
148
100
| --batch_size | 输入的 batch size,默认为 1|
149
101
| --max_length | 最大序列长度,默认为 128|
150
102
| --device | 运行的设备,可选范围: [ 'cpu', 'gpu'] ,默认为'cpu' |
151
- | --backend | 支持的推理后端,可选范围: [ 'onnx_runtime', 'paddle', 'openvino', 'tensorrt', 'paddle_tensorrt'] ,默认为'paddle' |
152
- | --use_fp16 | 是否使用 FP16模式进行推理。使用 tensorrt 和 paddle_tensorrt 后端时可开启,默认为 False |
153
- | --model_prefix| 模型文件前缀。前缀会分别与'.pdmodel'和'.pdiparams'拼接得到模型文件名和参数文件名。默认为 'model'|
154
-
155
-
156
- ## FastDeploy 高阶用法
157
-
158
- FastDeploy 在 Python 端上,提供 ` fastdeploy.RuntimeOption.use_xxx() ` 以及 ` fastdeploy.RuntimeOption.use_xxx_backend() ` 接口支持开发者选择不同的硬件、不同的推理引擎进行部署。在不同的硬件上部署 ERNIE 3.0 模型,需要选择硬件所支持的推理引擎进行部署,下表展示如何在不同的硬件上选择可用的推理引擎部署 ERNIE 3.0 模型。
159
-
160
- 符号说明: (1) ✅: 已经支持; (2) ❔: 正在进行中; (3) N/A: 暂不支持;
161
-
162
- <table >
163
- <tr>
164
- <td align=center> 硬件</td>
165
- <td align=center> 硬件对应的接口</td>
166
- <td align=center> 可用的推理引擎 </td>
167
- <td align=center> 推理引擎对应的接口 </td>
168
- <td align=center> 是否支持 Paddle 新格式量化模型 </td>
169
- <td align=center> 是否支持 FP16 模式 </td>
170
- </tr>
171
- <tr>
172
- <td rowspan=3 align=center> CPU </td>
173
- <td rowspan=3 align=center> use_cpu() </td>
174
- <td align=center> Paddle Inference </td>
175
- <td align=center> use_paddle_infer_backend() </td>
176
- <td align=center> ✅ </td>
177
- <td align=center> N/A </td>
178
- </tr>
179
- <tr>
180
- <td align=center> ONNX Runtime </td>
181
- <td align=center> use_ort_backend() </td>
182
- <td align=center> ✅ </td>
183
- <td align=center> N/A </td>
184
- </tr>
185
- <tr>
186
- <td align=center> OpenVINO </td>
187
- <td align=center> use_openvino_backend() </td>
188
- <td align=center> ❔ </td>
189
- <td align=center> N/A </td>
190
- </tr>
191
- <tr>
192
- <td rowspan=4 align=center> GPU </td>
193
- <td rowspan=4 align=center> use_gpu() </td>
194
- <td align=center> Paddle Inference </td>
195
- <td align=center> use_paddle_infer_backend() </td>
196
- <td align=center> ✅ </td>
197
- <td align=center> N/A </td>
198
- </tr>
199
- <tr>
200
- <td align=center> ONNX Runtime </td>
201
- <td align=center> use_ort_backend() </td>
202
- <td align=center> ✅ </td>
203
- <td align=center> ❔ </td>
204
- </tr>
205
- <tr>
206
- <td align=center> Paddle TensorRT </td>
207
- <td align=center> use_trt_backend() + enable_paddle_to_trt() </td>
208
- <td align=center> ✅ </td>
209
- <td align=center> ✅ </td>
210
- </tr>
211
- <tr>
212
- <td align=center> TensorRT </td>
213
- <td align=center> use_trt_backend() </td>
214
- <td align=center> ✅ </td>
215
- <td align=center> ✅ </td>
216
- </tr>
217
- <tr>
218
- <td align=center> 昆仑芯 XPU </td>
219
- <td align=center> use_kunlunxin() </td>
220
- <td align=center> Paddle Lite </td>
221
- <td align=center> use_paddle_lite_backend() </td>
222
- <td align=center> N/A </td>
223
- <td align=center> ✅ </td>
224
- </tr>
225
- <tr>
226
- <td align=center> 华为 昇腾 </td>
227
- <td align=center> use_ascend() </td>
228
- <td align=center> Paddle Lite </td>
229
- <td align=center> use_paddle_lite_backend() </td>
230
- <td align=center> ❔ </td>
231
- <td align=center> ✅ </td>
232
- </tr>
233
- <tr>
234
- <td align=center> Graphcore IPU </td>
235
- <td align=center> use_ipu() </td>
236
- <td align=center> Paddle Inference </td>
237
- <td align=center> use_paddle_infer_backend() </td>
238
- <td align=center> ❔ </td>
239
- <td align=center> N/A </td>
240
- </tr>
241
- </table >
103
+ | --model_prefix| 模型文件前缀。前缀会分别与'PADDLE_INFERENCE_MODEL_SUFFIX'和'PADDLE_INFERENCE_WEIGHTS_SUFFIX'拼接得到模型文件名和参数文件名。默认为 'model'|
242
104
243
105
## 相关文档
244
106
0 commit comments