Skip to content

Commit

Permalink
[Model] Add readme for fastdeploy (PaddlePaddle#4447)
Browse files Browse the repository at this point in the history
* Add ft readme

* Add readme for ft

* add char style

* Add space between Chinese and English

* Add space

* Add detail

* Add detail

* Add detail

* Add space

* Add space

* Add x

* update supportted hardware

* update android tokenization latency

* add FastTokenizer desc

* Update ernie-tiny doc

* Update doc

* Add FT desc

* Add emoji

* Update benchmark

* Update url
  • Loading branch information
joey12300 authored Jan 13, 2023
1 parent 4bec43f commit 69121b3
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 42 deletions.
28 changes: 19 additions & 9 deletions model_zoo/ernie-tiny/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

- **ERNIE 3.0 Tiny** 百度 ERNIE 使用 ERNIE-Tiny 系列的知识蒸馏技术,将 ERNIE 3.0 Titan 大模型的能力传递给小模型,产出并开源了易于部署的 ERNIE 3.0 Tiny 系列预训练模型,刷新了中文小模型的 SOTA 成绩。在这些较少参数量的 ERNIE 3.0 Tiny 系列模型中,有一部分可以直接部署在 CPU 上。

- **端上语义理解压缩方案** 在语义理解任务中使用 ERNIE 3.0 Tiny 微调的基础上,我们建议进一步使用包含模型裁剪、量化训练、Embedding 量化等策略的压缩方案,在保持模型精度不降的情况下,可将模型体积减小为原来的 7.8%,达到 5.4 MB,内存占用也随之大幅减小,从而将 ERNIE 3.0 Tiny 模型成功部署至 **📱移动端**。经过模型压缩并使用 FastTokenizer,端到端的推理性能也有显著 🚀加速。由于移动端部署对内存占用的要求比服务端更高,因此该方案也同样适用于 🖥服务端部署。
- **端上语义理解压缩方案** 在语义理解任务中使用 ERNIE 3.0 Tiny 微调的基础上,我们建议进一步使用包含模型裁剪、量化训练、Embedding 量化等策略的压缩方案,在保持模型精度不降的情况下,可将模型体积减小为原来的 7.8%,达到 5.4 MB,内存占用也随之大幅减小,从而将 ERNIE 3.0 Tiny 模型成功部署至 **📱移动端**。经过模型压缩并使用 [FastTokenizer](../../fast_tokenizer/README.md) 加速分词阶段,单条文本的分词延时低于 **0.1 毫秒**,端到端的推理性能也有显著 🚀加速。由于移动端部署对内存占用的要求比服务端更高,因此该方案也同样适用于 🖥服务端部署。

<a name="模型介绍"></a>

Expand Down Expand Up @@ -629,29 +629,39 @@ python run_train.py \

| 模型 | 模型精度(acc.) | 推理精度 | 端到端时延(ms) | 内存占用 Pss (MB) | 模型体积(MB) |
|-----------------------------------|--------------|-----------|--------------|----------------|--------------|
| 原模型 | 82.34 | FP32 | 23.22 | 115.72 | 69.0 |
| 原模型 | 82.34(-0.00) | FP16 | 19.52(1.00x) | 106.24(-8.2%) | 69.0(-0.0%) |
| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | FP32 | 20.34(1.14x) | 59.49(-48.59%) | 64.0(-7.2%) |
| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | FP16 | 15.97(1.45x) | 52.23(-54.87%) | 64.0(-7.2%) |
| 原模型+裁剪(词表+模型宽度)+量化(矩阵乘) | 82.21(-0.13) | FP32+INT8 | 15.59(1.49x) | 49.17(-57.51%) | 11.0(-84.1%) |
|**原模型+裁剪(词表+模型宽度)+量化(矩阵乘+Embedding)** | 82.21(-0.13) | FP32+INT8 |**15.92(1.46x)**|**43.77(-62.18%)**| **5.4(-92.2%)** |
| 原模型 | 82.34 | FP32 | 9.77 | 115.72 | 69.0 |
| 原模型 | 82.34(-0.00) | FP16 | 5.91(1.65x) | 106.24(-8.2%) | 69.0(-0.0%) |
| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | FP32 | 7.42(1.31x) | 59.49(-48.59%) | 64.0(-7.2%) |
| 原模型+裁剪(词表+模型宽度) | 82.11(-0.23) | FP16 | 4.54(2.15x) | 52.23(-54.87%) | 64.0(-7.2%) |
| 原模型+裁剪(词表+模型宽度)+量化(矩阵乘) | 82.21(-0.13) | FP32+INT8 | 4.45(2.19x) | 49.17(-57.51%) | 11.0(-84.1%) |
|**原模型+裁剪(词表+模型宽度)+量化(矩阵乘+Embedding)** | 82.21(-0.13) | FP32+INT8 |**4.51(2.16x)**|**43.77(-62.18%)**| **5.4(-92.2%)** |

**测试条件**:max_seq_length=16,batch_size=1,thread_num=1

由此可见,模型经过压缩后,精度基本无损,体积减小了 92.2%。在以上测试条件下,端到端推理(包括前后处理)速度达到原来的 1.46 倍,内存占用(包括加载 FastTokenizer 库)减小了 62.18%。
由此可见,模型经过压缩后,精度基本无损,体积减小了 92.2%。在以上测试条件下,端到端推理(包括前后处理)速度达到原来的 2.16 倍,内存占用(包括加载 FastTokenizer 库)减小了 62.18%。

<a name="FastDeploy部署"></a>

## ⚡️FastDeplopy 部署

FastDeploy 是一款全场景、易用灵活、极致高效的 AI 推理部署工具,提供开箱即用的云边端部署体验。本项目提供了对 ERNIE 3.0 Tiny 使用 FastDeploy 云边端部署的示例代码和文档,请参考 [ERNIE 3.0 Tiny 部署文档](deploy/README.md)
FastDeploy 是一款全场景、易用灵活、极致高效的 AI 推理部署工具,提供开箱即用的部署体验。

本项目基于 FastDeploy 工具,提供了 ERNIE 3.0 Tiny 移动端和服务端的高效部署示例。为了支持多种场景的部署, FastDeploy 提供了一整套完整的部署 Pipeline:

- 在文本预处理阶段,FastDeploy 使用 PaddleNLP 提供的简单易用的高效分词工具 [FastTokenizer](../../fast_tokenizer/README.md) 完成文本预处理,开发者只需调用几行代码就能完成分词阶段开发。在华为 nova 7 Pro (麒麟 985 芯片)上测试 FastTokenizer,**单条文本的分词延时低于 0.1 毫秒**
- 在Runtime阶段,FastDeploy 集成多款硬件以及推理引擎后端,开发者可以通过几行代码设置 `fastdeploy::RuntimeOption` 结构,完成在不同硬件以及使用不同的推理引擎进行部署。
- 在后处理阶段,FastDeploy 提供了张量级别的 [数值运算模块](https://baidu-paddle.github.io/fastdeploy-api/cpp/html/namespacefastdeploy_1_1function.html), 基于该模块可以快速完成各类任务的后处理计算,如文本分类任务的 Softmax 等数值计算。

通过结合 FastTokenizer,FastDeploy 提供 ERNIE 3.0 Tiny 模型从文本预处理、推理引擎 Runtime 以及后处理三个阶段所需要的接口模块,开发者可以基于这些接口模块在移动端以及服务端上开发各种常见的NLP模型任务,如文本分类、序列标注、信息抽取等。

以下动图是 ERNIE 3.0 Tiny 意图识别、槽位填充联合模型使用 FastDeploy 部署在 Android App 上推理的效果展示:

<p align="center">
<img width="200" alt="image" src="https://user-images.githubusercontent.com/26483581/210997849-9d3b7f7f-9363-4a3d-87c9-b29496a6b5b0.gif" title="compression plan">
</p>

除了支持移动端设备上部署,本项目还提供了服务端部署示例,并使用 FastTokenizer 加速文本预处理阶段。在 GPU 硬件上,Python 端部署时,可以使用 FastTokenizer 工具加速分词阶段,在车载语音口语理解任务场景下端到端性能可提升 **3.56倍** ,更多详情请参考 [ERNIE 3.0 Tiny 部署文档](deploy/README.md)

想要更多了解 FastDeploy 可以参考 [FastDeploy 仓库](https://github.com/PaddlePaddle/FastDeploy)。目前,FastDeploy 已支持多种后端:

- 在移动端上支持 `Paddle Lite` 后端;
Expand Down
8 changes: 5 additions & 3 deletions model_zoo/ernie-tiny/deploy/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# FastDeploy ERNIE 3.0 Tiny模型高性能部署
# FastDeploy ERNIE 3.0 Tiny 模型高性能部署

**目录**
* [FastDeploy部署介绍](#FastDeploy部署介绍)
Expand All @@ -10,9 +10,11 @@

## FastDeploy部署介绍

**⚡️FastDeploy**是一款**全场景****易用灵活****极致高效**的AI推理部署工具,满足开发者**多硬件、多平台**的产业部署需求。开发者可以基于FastDeploy将训练好的预测模型在不同的硬件、不同的操作系统以及不同的推理引擎后端上进行部署。目前FastDeploy提供多种编程语言的SDK,包括C++、Python以及Java SDK。
**⚡️FastDeploy**是一款**全场景****易用灵活****极致高效**的AI推理部署工具,满足开发者**多硬件、多平台**的产业部署需求。开发者可以基于FastDeploy将训练好的预测模型在不同的硬件、不同的操作系统以及不同的推理引擎后端上进行部署。目前FastDeploy提供多种编程语言的 SDK,包括 C++、Python 以及 Java SDK。

目前ERNIE 3.0 Tiny模型已提供基于FastDeploy的云边端的部署示例,在服务端上的GPU硬件上,支持`PaddleInference``ONNX Runtime``Paddle TensorRT`以及`TensorRT`后端,在CPU上支持`PaddleInference``ONNX Runtime`以及`OpenVINO`后端;在移动端上支持`PaddleLite`后端。多硬件、多推理引擎后端的支持可以满足开发者不同的部署需求。
目前 ERNIE 3.0 Tiny 模型已提供基于 FastDeploy 的云边端的部署示例,在服务端上的 GPU 硬件上,支持`Paddle Inference``ONNX Runtime``Paddle TensorRT`以及`TensorRT`后端,在CPU上支持`Paddle Inference``ONNX Runtime`以及`OpenVINO`后端;在移动端上支持`Paddle Lite`后端。多硬件、多推理引擎后端的支持可以满足开发者不同的部署需求。

为了提供 ERNIE 3.0 Tiny 高性能端到端部署能力,我们使用 [FastTokenizer](../../../fast_tokenizer/README.md) 工具完成高效分词,大大提升端到端预测性能。针对 ERNIE 3.0 Tiny 模型,FastTokenizer 集成了Google提出的 [Fast WordPiece Tokenization](https://arxiv.org/pdf/2012.15524.pdf) 快速分词算法,可大幅提升分词效率。在 ERNIE 3.0 Tiny 性能测试中,使用 FastTokenizer 可提升端到端性能 **3.56倍** 。我们在 [Python部署](python/README.md) 文档更全面地展示使用 FastTokenizer 的加速能力。

本部署示例是车载语音场景下的口语理解(Spoken Language Understanding,SLU)任务,详细可看[ERNIE 3.0 Tiny介绍](../README.md)

Expand Down
30 changes: 15 additions & 15 deletions model_zoo/ernie-tiny/deploy/cpp/README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# FastDeploy ERNIE 3.0 Tiny 模型C++部署示例
# FastDeploy ERNIE 3.0 Tiny 模型 C++ 部署示例

在部署前,参考[FastDeploy SDK安装文档](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/build_and_install/download_prebuilt_libraries.md)安装FastDeploy C++ SDK。
在部署前,参考 [FastDeploy SDK安装文档](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/build_and_install/download_prebuilt_libraries.md) 安装 FastDeploy C++ SDK。

本目录下分别提供`infer_demo.cc`快速完成在CPU/GPU的车载语音场景下的口语理解(Spoken Language Understanding,SLU)任务的C++部署示例。
本目录下分别提供 `infer_demo.cc` 快速完成在 CPU/GPU 的车载语音场景下的口语理解(Spoken Language Understanding,SLU)任务的 C++ 部署示例。

## 依赖安装

下载FastDeploy预编译库,用户可在上文提到的[FastDeploy SDK安装文档](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/build_and_install/download_prebuilt_libraries.md)中自行选择合适的版本使用(例如1.0.2)。在Linux 64位系统下,可以执行以下命令完成安装。
下载 FastDeploy 预编译库,用户可在上文提到的 [FastDeploy SDK安装文档](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/build_and_install/download_prebuilt_libraries.md) 中自行选择合适的版本使用(例如1.0.2)。在 Linux 64位系统下,可以执行以下命令完成安装。

```bash

Expand All @@ -18,7 +18,7 @@ tar xvf fastdeploy-linux-x64-gpu-x.x.x.tgz

## 快速开始

以下示例可通过命令行参数`--device`以及`--backend`指定运行在不同的硬件以及推理引擎后端,并使用`--model_dir`参数指定运行的模型,具体参数设置可查看下面[参数说明](#参数说明)。示例中的模型是按照[ERNIE 3.0 Tiny训练文档](../../README.md)导出得到的部署模型,其模型目录为`model_zoo/ernie-tiny/output/BS64_LR5e-5_20EPOCHS_WD0.01_WR0.1/`(用户可按实际情况设置)。
以下示例可通过命令行参数`--device`以及`--backend`指定运行在不同的硬件以及推理引擎后端,并使用`--model_dir`参数指定运行的模型,具体参数设置可查看下面[参数说明](#参数说明)。示例中的模型是按照 [ERNIE 3.0 Tiny 训练文档](../../README.md) 导出得到的部署模型,其模型目录为`model_zoo/ernie-tiny/output/BS64_LR5e-5_20EPOCHS_WD0.01_WR0.1/`(用户可按实际情况设置)。

```bash

Expand Down Expand Up @@ -63,7 +63,7 @@ slot = destination, entity = '信阳市汽车配件城', pos = [1, 8]

### 量化模型部署

该示例支持部署Paddle INT8新格式量化模型,仅需在`--model_dir`参数传入量化模型路径,并且在对应硬件上选择可用的推理引擎后端,即可完成量化模型部署。在GPU上部署量化模型时,可选后端为`paddle_tensorrt``tensorrt`;在CPU上部署量化模型时,可选后端为`paddle``onnx_runtime`。下面将展示如何使用该示例完成量化模型部署,示例中的模型是按照[ERNIE 3.0 Tiny训练文档](../../README.md)压缩量化后导出得到的量化模型。
该示例支持部署 Paddle INT8 新格式量化模型,仅需在`--model_dir`参数传入量化模型路径,并且在对应硬件上选择可用的推理引擎后端,即可完成量化模型部署。在 GPU 上部署量化模型时,可选后端为`paddle_tensorrt``tensorrt`;在CPU上部署量化模型时,可选后端为`paddle``onnx_runtime`。下面将展示如何使用该示例完成量化模型部署,示例中的模型是按照 [ERNIE 3.0 Tiny训练文档](../../README.md) 压缩量化后导出得到的量化模型。

```bash

Expand Down Expand Up @@ -105,19 +105,19 @@ slot = destination, entity = '信阳市汽车配件城', pos = [1, 8]
|----------|--------------|
|--device | 运行的设备,可选范围: ['cpu', 'gpu'],默认为'cpu' |
|--backend | 支持的推理后端,可选范围: ['onnx_runtime', 'paddle', 'openvino', 'tensorrt', 'paddle_tensorrt'],默认为'paddle' |
|--model_dir | 指定部署模型的目录。支持传入Paddle INT8新格式量化模型|
|--model_dir | 指定部署模型的目录。支持传入 Paddle INT8 新格式量化模型|
|--vocab_path| 指定的模型词表路径,默认为`model_dir`目录下的vocab.txt文件 |
|--added_tokens_path| 指定的模型词表路径,默认为`model_dir`目录下的added_tokens.json文件 |
|--slot_label_path| 指定的slot label文件路径 |
|--intent_label_path| 指定的intent label文件路径 |
|--slot_label_path| 指定的 slot label 文件路径 |
|--intent_label_path| 指定的 intent label 文件路径 |
|--batch_size |最大可测的 batch size,默认为 1|
|--max_length |最大序列长度,默认为 128|
|--use_trt_fp16 | 是否使用FP16模式进行推理。使用tensorrt和paddle_tensorrt后端时可开启,默认为False |
|--use_trt_fp16 | 是否使用 FP16 模式进行推理。使用 TensorRT 和 Paddle TensorRT 后端时可开启,默认为False |
|--model_prefix| 模型文件前缀。前缀会分别与'.pdmodel'和'.pdiparams'拼接得到模型文件名和参数文件名。默认为 'infer_model'|

## FastDeploy 高阶用法

FastDeploy在C++端上,提供`fastdeploy::RuntimeOption::UseXXX()`以及`fastdeploy::RuntimeOption::UseXXXBackend()`接口支持开发者选择不同的硬件、不同的推理引擎进行部署。在不同的硬件上部署ERNIE 3.0 Tiny模型,需要选择硬件所支持的推理引擎进行部署,下表展示如何在不同的硬件上选择可用的推理引擎部署ERNIE 3.0 Tiny模型
FastDeploy 在 C++ 端上,提供 `fastdeploy::RuntimeOption::UseXXX()` 以及 `fastdeploy::RuntimeOption::UseXXXBackend()` 接口支持开发者选择不同的硬件、不同的推理引擎进行部署。在不同的硬件上部署 ERNIE 3.0 Tiny 模型,需要选择硬件所支持的推理引擎进行部署,下表展示如何在不同的硬件上选择可用的推理引擎部署 ERNIE 3.0 Tiny 模型

符号说明: (1) ✅: 已经支持; (2) ❔: 正在进行中; (3) N/A: 暂不支持;

Expand All @@ -127,9 +127,9 @@ FastDeploy在C++端上,提供`fastdeploy::RuntimeOption::UseXXX()`以及`fastd
<td align=center> 硬件对应的接口</td>
<td align=center> 可用的推理引擎 </td>
<td align=center> 推理引擎对应的接口 </td>
<td align=center> 是否支持ERNIE 3.0 Tiny模型 </td>
<td align=center> 是否支持Paddle新格式量化模型 </td>
<td align=center> 是否支持FP16模式 </td>
<td align=center> 是否支持 ERNIE 3.0 Tiny 模型 </td>
<td align=center> 是否支持 Paddle 新格式量化模型 </td>
<td align=center> 是否支持 FP16 模式 </td>
</tr>
<tr>
<td rowspan=3 align=center> CPU </td>
Expand Down Expand Up @@ -191,7 +191,7 @@ FastDeploy在C++端上,提供`fastdeploy::RuntimeOption::UseXXX()`以及`fastd
<td align=center> UsePaddleLiteBackend() </td>
<td align=center> ✅ </td>
<td align=center> N/A </td>
<td align=center> N/A </td>
<td align=center> </td>
</tr>
<tr>
<td align=center> 华为 昇腾 </td>
Expand Down
Loading

0 comments on commit 69121b3

Please sign in to comment.