forked from PaddlePaddle/FastDeploy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Model] Add text classification task for ernie-3.0 (PaddlePaddle#430)
* move text_cls to ernie-3.0 * Add main page of ernie-3.0 * rename infer -> seq_cls_infer * Fix the links * Add ernie-3.0 python, cpp readme * Fix some cpp readme * Add fastdeploy::FDERROR * Add python readme for ernie-3.0 * update README.md * Add empty line * update readme * Fix readme * remove the - from ernie 3.0 * ernie-3.0 -> ernie 3.0 * Use AutoTokenizer to tokenize * Ernie -> ERNIE
- Loading branch information
Showing
11 changed files
with
738 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
# ERNIE 3.0 模型部署 | ||
|
||
## 模型详细说明 | ||
- [PaddleNLP ERNIE 3.0模型说明](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.4/model_zoo/ernie-3.0) | ||
|
||
## 支持的模型列表 | ||
|
||
| 模型 | 结构 | 语言 | | ||
| :---: | :--------: | :--------: | | ||
| `ERNIE 3.0-Base`| 12-layers, 768-hidden, 12-heads | 中文 | | ||
| `ERNIE 3.0-Medium`| 6-layers, 768-hidden, 12-heads | 中文 | | ||
| `ERNIE 3.0-Mini`| 6-layers, 384-hidden, 12-heads | 中文 | | ||
| `ERNIE 3.0-Micro`| 4-layers, 384-hidden, 12-heads | 中文 | | ||
| `ERNIE 3.0-Nano `| 4-layers, 312-hidden, 12-heads | 中文 | | ||
|
||
## 支持的NLP任务列表 | ||
|
||
| 任务 Task | 是否支持 | | ||
| :--------------- | ------- | | ||
| 文本分类 | ✅ | | ||
| 序列标注 | ❌ | | ||
|
||
## 导出部署模型 | ||
|
||
在部署前,需要先将训练好的ERNIE模型导出成部署模型,导出步骤可参考文档[导出模型](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.4/model_zoo/ernie-3.0). | ||
|
||
## 下载微调模型 | ||
|
||
### 分类任务 | ||
|
||
为了方便开发者的测试,下面提供了在文本分类[AFQMC数据集](https://bj.bcebos.com/paddlenlp/datasets/afqmc_public.zip)上微调的ERNIE 3.0-Medium模型,开发者可直接下载体验。 | ||
|
||
- [ERNIE 3.0 Medium AFQMC](https://bj.bcebos.com/fastdeploy/models/ernie-3.0/ernie-3.0-medium-zh-afqmc.tgz) | ||
|
||
## 详细部署文档 | ||
|
||
- [Python部署](python) | ||
- [C++部署](cpp) | ||
- [Serving部署](serving) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
PROJECT(infer_demo C CXX) | ||
CMAKE_MINIMUM_REQUIRED (VERSION 3.10) | ||
|
||
option(FASTDEPLOY_INSTALL_DIR "Path of downloaded fastdeploy sdk.") | ||
set(THIRD_LIBS "") | ||
include(gflags.cmake) | ||
include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake) | ||
|
||
include_directories(${FASTDEPLOY_INCS}) | ||
|
||
add_executable(seq_cls_infer_demo ${PROJECT_SOURCE_DIR}/seq_cls_infer.cc) | ||
target_link_libraries(seq_cls_infer_demo ${FASTDEPLOY_LIBS} ${THIRD_LIBS}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# ERNIE 3.0 模型C++部署示例 | ||
|
||
在部署前,需确认以下两个步骤 | ||
|
||
- 1. 软硬件环境满足要求,参考[FastDeploy环境要求](../../../../docs/cn/build_and_install/download_prebuilt_libraries.md) | ||
- 2. 根据开发环境,下载预编译部署库和samples代码,参考[FastDeploy预编译库](../../../../docs/cn/build_and_install/download_prebuilt_libraries.md) | ||
|
||
本目录下提供`seq_cls_infer.cc`快速完成在CPU/GPU的文本分类任务的C++部署示例。 | ||
|
||
|
||
## 文本分类任务 | ||
|
||
### 快速开始 | ||
|
||
以下示例展示如何基于FastDeploy库完成ERNIE 3.0 Medium模型在CLUE Benchmark的[AFQMC数据集](https://bj.bcebos.com/paddlenlp/datasets/afqmc_public.zip)上进行文本分类任务的C++预测部署。 | ||
|
||
```bash | ||
# 下载SDK,编译模型examples代码(SDK中包含了examples代码) | ||
wget https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-linux-x64-gpu-0.4.0.tgz | ||
tar xvf fastdeploy-linux-x64-gpu-0.4.0.tgz | ||
|
||
cd fastdeploy-linux-x64-gpu-0.4.0/examples/text/ernie-3.0/cpp | ||
mkdir build | ||
cd build | ||
# 执行cmake,需要指定FASTDEPLOY_INSTALL_DIR为FastDeploy SDK的目录。 | ||
cmake .. -DFASTDEPLOY_INSTALL_DIR=${PWD}/../../../../../../fastdeploy-linux-x64-gpu-0.4.0 | ||
make -j | ||
|
||
# 下载AFQMC数据集的微调后的ERNIE 3.0模型以及词表 | ||
wget https://bj.bcebos.com/fastdeploy/models/ernie-3.0/ernie-3.0-medium-zh-afqmc.tgz | ||
tar xvfz ernie-3.0-medium-zh-afqmc.tgz | ||
|
||
# CPU 推理 | ||
./seq_cls_infer_demo --device cpu --model_dir ernie-3.0-medium-zh-afqmc | ||
|
||
# GPU 推理 | ||
./seq_cls_infer_demo --device gpu --model_dir ernie-3.0-medium-zh-afqmc | ||
|
||
``` | ||
|
||
运行完成后返回的结果如下: | ||
```bash | ||
[INFO] /paddle/FastDeploy/examples/text/ernie-3.0/cpp/seq_cls_infer.cc(93)::CreateRuntimeOption model_path = ernie-3.0-medium-zh-afqmc/infer.pdmodel, param_path = ernie-3.0-medium-zh-afqmc/infer.pdiparams | ||
[INFO] fastdeploy/runtime.cc(469)::Init Runtime initialized with Backend::ORT in Device::CPU. | ||
Batch id: 0, example id: 0, sentence 1: 花呗收款额度限制, sentence 2: 收钱码,对花呗支付的金额有限制吗, label: 1, confidence: 0.581852 | ||
Batch id: 1, example id: 0, sentence 1: 花呗支持高铁票支付吗, sentence 2: 为什么友付宝不支持花呗付款, label: 0, confidence: 0.997921 | ||
``` | ||
|
||
|
||
|
||
### 参数说明 | ||
|
||
`seq_cls_infer_demo` 除了以上示例的命令行参数,还支持更多命令行参数的设置。以下为各命令行参数的说明。 | ||
|
||
| 参数 |参数说明 | | ||
|----------|--------------| | ||
|--model_dir | 指定部署模型的目录, | | ||
|--batch_size |最大可测的 batch size,默认为 1| | ||
|--max_length |最大序列长度,默认为 128| | ||
|--device | 运行的设备,可选范围: ['cpu', 'gpu'],默认为'cpu' | | ||
|--backend | 支持的推理后端,可选范围: ['onnx_runtime', 'paddle', 'openvino', 'tensorrt', 'paddle_tensorrt'],默认为'onnx_runtime' | | ||
|--use_fp16 | 是否使用FP16模式进行推理。使用tensorrt和paddle_tensorrt后端时可开启,默认为False | | ||
|
||
## 相关文档 | ||
|
||
[ERNIE 3.0模型详细介绍](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.4/model_zoo/ernie-3.0) | ||
|
||
[ERNIE 3.0模型导出方法](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.4/model_zoo/ernie-3.0) | ||
|
||
[ERNIE 3.0模型Python部署方法](../python/README.md) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
INCLUDE(ExternalProject) | ||
SET(GIT_URL "https://github.com") | ||
SET(GFLAGS_PREFIX_DIR ${CMAKE_CURRENT_BINARY_DIR}/gflags) | ||
SET(GFLAGS_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/install/gflags) | ||
SET(GFLAGS_INCLUDE_DIR "${GFLAGS_INSTALL_DIR}/include" CACHE PATH "gflags include directory." FORCE) | ||
set(GFLAGS_REPOSITORY ${GIT_URL}/gflags/gflags.git) | ||
set(GFLAGS_TAG "v2.2.2") | ||
IF(WIN32) | ||
set(GFLAGS_LIBRARIES "${GFLAGS_INSTALL_DIR}/lib/gflags_static.lib" CACHE FILEPATH "GFLAGS_LIBRARIES" FORCE) | ||
ELSE(WIN32) | ||
set(GFLAGS_LIBRARIES "${GFLAGS_INSTALL_DIR}/lib/libgflags.a" CACHE FILEPATH "GFLAGS_LIBRARIES" FORCE) | ||
set(BUILD_COMMAND $(MAKE) --silent) | ||
set(INSTALL_COMMAND $(MAKE) install) | ||
ENDIF(WIN32) | ||
|
||
INCLUDE_DIRECTORIES(${GFLAGS_INCLUDE_DIR}) | ||
|
||
ExternalProject_Add( | ||
extern_gflags | ||
${EXTERNAL_PROJECT_LOG_ARGS} | ||
${SHALLOW_CLONE} | ||
GIT_REPOSITORY ${GFLAGS_REPOSITORY} | ||
GIT_TAG ${GFLAGS_TAG} | ||
PREFIX ${GFLAGS_PREFIX_DIR} | ||
UPDATE_COMMAND "" | ||
BUILD_COMMAND ${BUILD_COMMAND} | ||
INSTALL_COMMAND ${INSTALL_COMMAND} | ||
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} | ||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} | ||
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} | ||
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} | ||
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} | ||
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} | ||
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG} | ||
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} | ||
-DBUILD_STATIC_LIBS=ON | ||
-DCMAKE_INSTALL_PREFIX=${GFLAGS_INSTALL_DIR} | ||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON | ||
-DBUILD_TESTING=OFF | ||
-DCMAKE_BUILD_TYPE=${THIRD_PARTY_BUILD_TYPE} | ||
${EXTERNAL_OPTIONAL_ARGS} | ||
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${GFLAGS_INSTALL_DIR} | ||
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON | ||
-DCMAKE_BUILD_TYPE:STRING=${THIRD_PARTY_BUILD_TYPE} | ||
BUILD_BYPRODUCTS ${GFLAGS_LIBRARIES} | ||
) | ||
|
||
ADD_LIBRARY(gflags STATIC IMPORTED GLOBAL) | ||
SET_PROPERTY(TARGET gflags PROPERTY IMPORTED_LOCATION ${GFLAGS_LIBRARIES}) | ||
ADD_DEPENDENCIES(gflags extern_gflags) | ||
LIST(APPEND THIRD_LIBS gflags) | ||
if (UNIX) | ||
LIST(APPEND THIRD_LIBS pthread) | ||
endif() | ||
# On Windows (including MinGW), the Shlwapi library is used by gflags if available. | ||
if (WIN32) | ||
include(CheckIncludeFileCXX) | ||
check_include_file_cxx("shlwapi.h" HAVE_SHLWAPI) | ||
if (HAVE_SHLWAPI) | ||
set_property(GLOBAL PROPERTY OS_DEPENDENCY_MODULES shlwapi.lib) | ||
endif(HAVE_SHLWAPI) | ||
endif (WIN32) |
Oops, something went wrong.