1
- # FastDeploy ERNIE 3.0 Tiny 模型 Python 部署示例
2
-
3
- 在部署前,参考 [ FastDeploy SDK 安装文档] ( https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/build_and_install/download_prebuilt_libraries.md ) 安装 FastDeploy Python SDK。
1
+ # ERNIE 3.0 Tiny 模型 Python 推理示例
4
2
5
3
本目录下分别提供 ` infer_demo.py ` 快速完成在 CPU/GPU 的车载语音场景下的口语理解(Spoken Language Understanding,SLU)任务的 Python 部署示例,并展示端到端预测性能的 Benchmark。
6
4
7
5
8
- ## 依赖安装
9
-
10
- 直接执行以下命令安装部署示例的依赖。
11
-
12
- ``` bash
13
-
14
- # 安装GPU版本fastdeploy
15
- pip install fastdeploy-gpu-python -f https://www.paddlepaddle.org.cn/whl/fastdeploy.html
16
-
17
- ```
18
-
19
6
## 快速开始
20
7
21
- 以下示例可通过命令行参数` --device ` 以及 ` --backend ` 指定运行在不同的硬件以及推理引擎后端 ,并使用` --model_dir ` 参数指定运行的模型,具体参数设置可查看下面[ 参数说明] ( #参数说明 ) 。示例中的模型是按照[ ERNIE 3.0 Tiny 训练文档] ( ../../README.md ) 导出得到的部署模型,其模型目录为` model_zoo/ernie-tiny/output/BS64_LR5e-5_20EPOCHS_WD0.01_WR0.1 / ` (用户可按实际情况设置)。
8
+ 以下示例可通过命令行参数` --device ` 指定运行在不同的硬件 ,并使用` --model_dir ` 参数指定运行的模型,具体参数设置可查看下面[ 参数说明] ( #参数说明 ) 。示例中的模型是按照[ ERNIE 3.0 Tiny 训练文档] ( ../../README.md ) 导出得到的部署模型,其模型目录为` model_zoo/ernie-tiny/output/BS64_LR5e-5_EPOCHS30 / ` (用户可按实际情况设置)。
22
9
23
10
``` bash
24
11
25
12
# 在GPU上使用paddle_inference后端,模型目录可按照实际模型路径设置
26
- python infer_demo.py --device gpu --backend paddle -- model_dir ../../output/BS64_LR5e-5_20EPOCHS_WD0.01_WR0.1 --slot_label_path ../../data/slot_label.txt --intent_label_path ../../data/intent_label.txt
13
+ python infer_demo.py --device gpu --model_dir ../../output/BS64_LR5e-5_EPOCHS30 --slot_label_path ../../data/slot_label.txt --intent_label_path ../../data/intent_label.txt
27
14
28
15
# 在CPU上使用paddle_inference后端,模型目录可按照实际模型路径设置
29
- python infer_demo.py --device cpu --backend paddle --model_dir ../../output/BS64_LR5e-5_20EPOCHS_WD0.01_WR0.1 --slot_label_path ../../data/slot_label.txt --intent_label_path ../../data/intent_label.txt
16
+ python infer_demo.py --device cpu --backend paddle --model_dir ../../output/BS64_LR5e-5_EPOCHS30 --slot_label_path ../../data/slot_label.txt --intent_label_path ../../data/intent_label.txt
30
17
31
18
```
32
19
33
20
运行完成后返回的结果如下:
34
21
35
22
``` bash
36
-
37
- [INFO] fastdeploy/runtime.cc(596)::Init Runtime initialized with Backend::PDINFER in Device::GPU.
23
+ ......
24
+ --- Running PIR pass [inplace_pass]
25
+ I0423 14:02:46.963447 2082 print_statistics.cc:50] --- detected [2] subgraphs!
26
+ I0423 14:02:46.963521 2082 analysis_predictor.cc:1186] ======= pir optimization completed =======
27
+ I0423 14:02:46.971112 2082 pir_interpreter.cc:1640] pir interpreter is running by trace mode ...
38
28
No. 0 text = 来一首周华健的花心
39
- {' intent' : ' music.play' , ' confidence' : 0.99833965 , ' slot' : [{' slot' : ' singer ' , ' entity' : ' 周华健 ' , ' pos ' : [3, 5] }, {' slot' : ' song' , ' entity' : ' 花心 ' , ' pos ' : [7, 8] }]}
29
+ {' intent' : ' music.play' , ' confidence' : 0.9986396431922913 , ' slot' : [{' slot' : ' song ' , ' entity' : ' 来 ' }, { ' slot ' : ' singer ' , ' entity ' : ' 华健的 ' }, {' slot' : ' song' , ' entity' : ' 心 ' }]}
40
30
No. 1 text = 播放我们都一样
41
- {' intent' : ' music.play' , ' confidence' : 0.9985164 , ' slot' : [{' slot' : ' song' , ' entity' : ' 我们都一样 ' , ' pos ' : [2, 6] }]}
31
+ {' intent' : ' music.play' , ' confidence' : 0.9983224272727966 , ' slot' : [{' slot' : ' song' , ' entity' : ' 们都一样 ' }]}
42
32
No. 2 text = 到信阳市汽车配件城
43
- {' intent' : ' navigation.navigation' , ' confidence' : 0.998626, ' slot' : [{' slot' : ' destination' , ' entity' : ' 信阳市汽车配件城' , ' pos' : [1, 8]}]}
44
-
45
- ```
46
-
47
- ### 量化模型部署
48
-
49
- 该示例支持部署 Paddle INT8 新格式量化模型,仅需在` --model_dir ` 参数传入量化模型路径,并且在对应硬件上选择可用的推理引擎后端,即可完成量化模型部署。在 GPU 上部署量化模型时,可选后端为` paddle_tensorrt ` 、` tensorrt ` ;在 CPU 上部署量化模型时,可选后端为` paddle ` 、` onnx_runtime ` 。下面将展示如何使用该示例完成量化模型部署,示例中的模型是按照 [ ERNIE 3.0 Tiny 训练文档] ( ../../README.md ) 压缩量化后导出得到的量化模型。
50
-
51
- ``` bash
52
-
53
- # 在 GPU 上使用 tensorrt 后端,模型目录可按照实际模型路径设置
54
- python infer_demo.py --device gpu --backend tensorrt --model_prefix int8 --model_dir ../../output/BS64_LR5e-5_20EPOCHS_WD0.01_WR0.1 --slot_label_path ../../data/slot_label.txt --intent_label_path ../../data/intent_label.txt
55
-
56
- # 在 CPU 上使用 paddle_inference 后端,模型目录可按照实际模型路径设置
57
- python infer_demo.py --device cpu --backend paddle --model_prefix int8 --model_dir ../../output/BS64_LR5e-5_20EPOCHS_WD0.01_WR0.1_quant --slot_label_path ../../data/slot_label.txt --intent_label_path ../../data/intent_label.txt
58
-
33
+ {' intent' : ' navigation.navigation' , ' confidence' : 0.9985769987106323, ' slot' : [{' slot' : ' destination' , ' entity' : ' 到' }, {' slot' : ' destination' , ' entity' : ' 阳市汽车配件城' }]}
59
34
```
60
35
61
36
运行完成后返回的结果如下:
@@ -79,187 +54,13 @@ No. 2 text = 到信阳市汽车配件城
79
54
| 参数 | 参数说明 |
80
55
| ----------| --------------|
81
56
| --device | 运行的设备,可选范围: [ 'cpu', 'gpu'] ,默认为'cpu' |
82
- | --backend | 支持的推理后端,可选范围: [ 'onnx_runtime', 'paddle', 'openvino', 'tensorrt', 'paddle_tensorrt'] ,默认为'paddle' |
83
57
| --model_dir | 指定部署模型的目录。支持传入 Paddle INT8 新格式量化模型。 |
84
58
| --slot_label_path| 指定的 slot label 文件路径 |
85
59
| --intent_label_path| 指定的 intent label 文件路径 |
86
60
| --batch_size | 最大可测的 batch size,默认为 1|
87
61
| --max_length | 最大序列长度,默认为 128|
88
- | --use_trt_fp16 | 是否使用 FP16 模式进行推理。使用 TensorRT 和 Paddle TensorRT 后端时可开启,默认为 False |
89
62
| --model_prefix| 模型文件前缀。前缀会分别与'.pdmodel'和'.pdiparams'拼接得到模型文件名和参数文件名。默认为 'infer_model'|
90
63
91
- ## FastDeploy 高阶用法
92
-
93
- FastDeploy 在 Python 端上,提供 ` fastdeploy.RuntimeOption.use_xxx() ` 以及 ` fastdeploy.RuntimeOption.use_xxx_backend() ` 接口支持开发者选择不同的硬件、不同的推理引擎进行部署。在不同的硬件上部署 ERNIE 3.0 Tiny 模型,需要选择硬件所支持的推理引擎进行部署,下表展示如何在不同的硬件上选择可用的推理引擎部署 ERNIE 3.0 Tiny 模型。
94
-
95
- 符号说明: (1) ✅: 已经支持; (2) ❔: 正在进行中; (3) N/A: 暂不支持;
96
-
97
- <table >
98
- <tr>
99
- <td align=center> 硬件</td>
100
- <td align=center> 硬件对应的接口</td>
101
- <td align=center> 可用的推理引擎 </td>
102
- <td align=center> 推理引擎对应的接口 </td>
103
- <td align=center> 是否支持 ERNIE 3.0 Tiny 模型 </td>
104
- <td align=center> 是否支持 Paddle 新格式量化模型 </td>
105
- <td align=center> 是否支持 FP16模式 </td>
106
- </tr>
107
- <tr>
108
- <td rowspan=3 align=center> CPU </td>
109
- <td rowspan=3 align=center> use_cpu() </td>
110
- <td align=center> Paddle Inference </td>
111
- <td align=center> use_paddle_infer_backend() </td>
112
- <td align=center> ✅ </td>
113
- <td align=center> ✅ </td>
114
- <td align=center> N/A </td>
115
- </tr>
116
- <tr>
117
- <td align=center> ONNX Runtime </td>
118
- <td align=center> use_ort_backend() </td>
119
- <td align=center> ✅ </td>
120
- <td align=center> ✅ </td>
121
- <td align=center> N/A </td>
122
- </tr>
123
- <tr>
124
- <td align=center> OpenVINO </td>
125
- <td align=center> use_openvino_backend() </td>
126
- <td align=center> ✅ </td>
127
- <td align=center> ❔ </td>
128
- <td align=center> N/A </td>
129
- </tr>
130
- <tr>
131
- <td rowspan=4 align=center> GPU </td>
132
- <td rowspan=4 align=center> use_gpu() </td>
133
- <td align=center> Paddle Inference </td>
134
- <td align=center> use_paddle_infer_backend() </td>
135
- <td align=center> ✅ </td>
136
- <td align=center> ✅ </td>
137
- <td align=center> N/A </td>
138
- </tr>
139
- <tr>
140
- <td align=center> ONNX Runtime </td>
141
- <td align=center> use_ort_backend() </td>
142
- <td align=center> ✅ </td>
143
- <td align=center> ✅ </td>
144
- <td align=center> ❔ </td>
145
- </tr>
146
- <tr>
147
- <td align=center> Paddle TensorRT </td>
148
- <td align=center> use_trt_backend() + enable_paddle_to_trt() </td>
149
- <td align=center> ✅ </td>
150
- <td align=center> ✅ </td>
151
- <td align=center> ✅ </td>
152
- </tr>
153
- <tr>
154
- <td align=center> TensorRT </td>
155
- <td align=center> use_trt_backend() </td>
156
- <td align=center> ✅ </td>
157
- <td align=center> ✅ </td>
158
- <td align=center> ✅ </td>
159
- </tr>
160
- <tr>
161
- <td align=center> 昆仑芯 XPU </td>
162
- <td align=center> use_kunlunxin() </td>
163
- <td align=center> Paddle Lite </td>
164
- <td align=center> use_paddle_lite_backend() </td>
165
- <td align=center> ✅ </td>
166
- <td align=center> N/A </td>
167
- <td align=center> ✅ </td>
168
- </tr>
169
- <tr>
170
- <td align=center> 华为 昇腾 </td>
171
- <td align=center> use_ascend() </td>
172
- <td align=center> Paddle Lite </td>
173
- <td align=center> use_paddle_lite_backend() </td>
174
- <td align=center> ✅ </td>
175
- <td align=center> ❔ </td>
176
- <td align=center> ✅ </td>
177
- </tr>
178
- <tr>
179
- <td align=center> Graphcore IPU </td>
180
- <td align=center> use_ipu() </td>
181
- <td align=center> Paddle Inference </td>
182
- <td align=center> use_paddle_infer_backend() </td>
183
- <td align=center> ❔ </td>
184
- <td align=center> ❔ </td>
185
- <td align=center> N/A </td>
186
- </tr>
187
- </table >
188
-
189
- ## 性能 Benchmark
190
- ### 实验环境
191
-
192
- <table >
193
- <tr>
194
- <td align=center> GPU 型号 </td>
195
- <td align=center> A10 </td>
196
- </tr>
197
- <tr>
198
- <td align=center> CUDA 版本 </td>
199
- <td align=center> 11.6 </td>
200
- </tr>
201
- <tr>
202
- <td align=center> cuDNN 版本 </td>
203
- <td align=center> 8.4.0 </td>
204
- </tr>
205
- <tr>
206
- <td align=center> CPU 型号 </td>
207
- <td align=center> Intel(R) Xeon(R) Gold 6271C CPU @ 2.60GHz </td>
208
- </tr>
209
- </table >
210
-
211
- ### 参数设置
212
-
213
- batch size = 32,max length = 16。
214
-
215
- 测试文本长度15。
216
-
217
- ### 性能对比
218
-
219
- #### FP32 模型
220
-
221
- ** 使用 Paddle Inference 后端预测** 。
222
-
223
- <table >
224
- <tr >
225
- <td align=center> 切词方式 </td>
226
- <td align=center> 端到端延时(ms) </td>
227
- <td align=center> Runtime 延时(ms) </td>
228
- <td align=center> Tokenizer 延时(ms) </td>
229
- <td align=center> PostProcess 延时(ms) </td>
230
- </tr >
231
- <tr >
232
- <td align=center> Python Tokenizer </td>
233
- <td align=center> 8.9028 </td>
234
- <td align=center> 0.9987 </td>
235
- <td align=center> 7.5499 </td>
236
- <td align=center> 0.3541 </td>
237
- </tr >
238
- </table >
239
-
240
- #### INT8 模型
241
-
242
- ** 使用 Paddle TensorRT 后端预测** 。
243
-
244
- <table >
245
- <tr >
246
- <td align=center> 切词方式 </td>
247
- <td align=center> 端到端延时(ms) </td>
248
- <td align=center> Runtime 延时(ms) </td>
249
- <td align=center> Tokenizer 延时(ms) </td>
250
- <td align=center> PostProcess 延时(ms) </td>
251
- </tr >
252
- <tr >
253
- <td align=center> Python Tokenizer </td>
254
- <td align=center> 9.2509 </td>
255
- <td align=center> 1.0543 </td>
256
- <td align=center> 7.8407 </td>
257
- <td align=center> 0.3559 </td>
258
- </tr >
259
- </table >
260
-
261
64
## 相关文档
262
65
263
66
[ ERNIE 3.0 Tiny 模型详细介绍] ( ../../README.md )
264
-
265
- [ FastDeploy SDK 安装文档] ( https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/build_and_install/download_prebuilt_libraries.md )
0 commit comments