paddlenlp

Форк
0

README.md

基于ONNXRuntime推理部署指南

本示例以CBLUE数据集微调得到的ERNIE-Health模型为例,分别提供了文本分类任务、实体识别任务和关系抽取任务的部署代码,自定义数据集可参考实现。 在推理部署前需将微调后的动态图模型转换导出为静态图,详细步骤见静态图模型导出

目录

环境安装

ONNX模型转换和推理部署依赖于Paddle2ONNX和ONNXRuntime。其中Paddle2ONNX支持将Paddle静态图模型转化为ONNX模型格式,算子目前稳定支持导出ONNX Opset 7~15,更多细节可参考:Paddle2ONNX

GPU端

请先确保机器已正确安装NVIDIA相关驱动和基础软件,确保CUDA >= 11.2,CuDNN >= 8.2,并使用以下命令安装所需依赖:

python -m pip install -r requirements_gpu.tx

* 如需使用半精度(FP16)部署,请确保GPU设备的CUDA计算能力 (CUDA Compute Capability) 大于7.0,典型的设备包括V100、T4、A10、A100、GTX 20系列和30系列显卡等。 更多关于CUDA Compute Capability和精度支持情况请参考NVIDIA文档:GPU硬件与支持精度对照表

CPU端

请使用如下命令安装所需依赖:

python -m pip install -r requirements_cpu.txt

GPU部署推理样例

请使用如下命令进行GPU上的部署,可用use_fp16开启半精度部署推理加速,可用device_id指定GPU卡号

  • 文本分类任务
python infer_classification.py --device gpu --device_id 0 --dataset KUAKE-QIC --model_path_prefix ../../export/inference
  • 实体识别任务
python infer_ner.py --device gpu --device_id 0 --dataset CMeEE --model_path_prefix ../../export/inference
  • 关系抽取任务
python infer_spo.py --device gpu --device_id 0 --dataset CMeIE --model_path_prefix ../../export/inference

可支持配置的参数:

  • model_path_prefix:必须,待推理模型路径前缀。
  • model_name_or_path:选择预训练模型;默认为"ernie-health-chinese"。
  • dataset:CBLUE中的训练数据集。
    • 文本分类任务:包括KUAKE-QIC, KUAKE-QQR, KUAKE-QTR, CHIP-CTC, CHIP-STS, CHIP-CDN-2C;默认为KUAKE-QIC。
    • 实体抽取任务:默认为CMeEE。
    • 关系抽取任务:默认为CMeIE。
  • max_seq_length:模型使用的最大序列长度,最大不能超过512;关系抽取任务默认为300,其余默认为128。
  • use_fp16:选择是否开启FP16进行加速,仅在devive=gpu时生效;默认关闭。
  • batch_size:批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为200。
  • device: 选用什么设备进行训练,可选cpu、gpu;默认为gpu。
  • device_id: 选择GPU卡号;默认为0。
  • data_file:本地待预测数据文件;默认为None。

本地数据集加载

如需使用本地数据集,请指定本地待预测数据文件 data_file,每行一条样例,单文本输入每句一行,双文本输入以\t分隔符隔开。例如

ctc-data.txt

在过去的6个月曾服用偏头痛预防性药物或长期服用镇痛药物者,以及有酒精依赖或药物滥用习惯者;
患有严重的冠心病、脑卒中,以及传染性疾病、精神疾病者;
活动性乙肝(包括大三阳或小三阳)或血清学指标(HBsAg或/和HBeAg或/和HBcAb)阳性者,丙肝、肺结核、巨细胞病毒、严重真菌感染或HIV感染;
...

sts-data.txt

糖尿病能吃减肥药吗?能治愈吗?\t糖尿病为什么不能吃减肥药?
为什么慢性乙肝会急性发作\t引起隐匿性慢性乙肝的原因是什么
标准血压是多少高血压指?低血压又指?\t半月前检查血压100/130,正常吗?
...

CPU部署推理样例

请使用如下命令进行CPU上的部署,可用num_threads调整预测线程数量

  • 文本分类任务
python infer_classification.py --device cpu --dataset KUAKE-QIC --model_path_prefix ../../export/inference
  • 实体识别任务
python infer_ner.py --device cpu --dataset CMeEE --model_path_prefix ../../export/inference
  • 关系抽取任务
python infer_spo.py --device cpu --dataset CMeIE --model_path_prefix ../../export/inference

可支持配置的参数:

  • model_path_prefix:必须,待推理模型路径前缀。
  • model_name_or_path:选择预训练模型;默认为"ernie-health-chinese"。
  • dataset:CBLUE中的训练数据集。
    • 文本分类任务:包括KUAKE-QIC, KUAKE-QQR, KUAKE-QTR, CHIP-CTC, CHIP-STS, CHIP-CDN-2C;默认为KUAKE-QIC。
    • 实体抽取任务:默认为CMeEE。
    • 关系抽取任务:默认为CMeIE。
  • max_seq_length:模型使用的最大序列长度,最大不能超过512;关系抽取任务默认为300,其余默认为128。
  • batch_size:批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为200。
  • device: 选用什么设备进行训练,可选cpu、gpu;默认为gpu。
  • num_threads:cpu线程数,在device=gpu时影响较小;默认为cpu的物理核心数量。
  • data_file:本地待预测数据文件,格式见GPU部署推理样例中的介绍;默认为None。

性能与精度测试

本节提供了在CBLUE数据集上预测的性能和精度数据,以供参考。

测试配置如下:

  1. 数据集

    使用CBLUE数据集中的开发集用于ERNIE-Health微调模型部署推理的性能与精度测试,包括

  • 医疗搜索检索词意图分类(KUAKE-QIC)任务
  • 医疗搜索查询词-页面标题相关性(KUAKE-QTR)任务
  • 医疗搜索查询词-查询词相关性(KUAKE-QQR)任务
  • 临床试验筛选标准短文本分类(CHIP-CTC)任务
  • 平安医疗科技疾病问答迁移学习(CHIP-STS)任务
  • 临床术语标准化匹配(CHIP-CDN-2C)任务
  • 中文医学命名实体识别(CMeEE)任务
  • 中文医学文本实体关系抽取(CMeIE)任务
  1. 物理机环境

    系统: CentOS Linux release 7.7.1908 (Core)

    GPU: Tesla V100-SXM2-32GB

    CPU: Intel(R) Xeon(R) Gold 6271C CPU @ 2.60GHz

    CUDA: 11.2

    cuDNN: 8.1.0

    Driver Version: 460.27.04

    内存: 630 GB

  2. PaddlePaddle 版本:2.3.0

  3. PaddleNLP 版本:2.3.4

  4. 性能数据指标:latency。latency 测试方法:固定 batch size 为 200(CHIP-CDN-2C 和 CMeIE 数据集为 20),部署运行时间 total_time,计算 latency = total_time / total_samples

GPU精度与性能

数据集最大文本长度精度评估指标FP32 指标值FP16 指标值FP32 latency(ms)FP16 latency(ms)
KUAKE-QIC128Accuracy0.80460.80461.920.46
KUAKE-QTR64Accuracy0.68860.6876 (-)0.920.23
KUAKE-QQR64Accuracy0.77550.77550.610.16
CHIP-CTC160Macro F10.84450.8446 (+)2.340.60
CHIP-STS96Macro F10.88920.88921.390.35
CHIP-CDN-2C256Macro F10.89210.8920 (-)1.580.48
CMeEE128Micro F10.64690.6468 (-)1.900.48
CMeIE300Micro F10.59030.5902 (-)50.3241.50

经过FP16转化加速比达到 1.2 ~ 4 倍左右,精度变化在 1e-4 ~ 1e-3 内。

CPU精度与性能

测试环境及说明如上,测试 CPU 性能时,线程数设置为40。

数据集最大文本长度精度评估指标FP32 指标值FP32 latency(ms)
KUAKE-QIC128Accuracy0.804637.72
KUAKE-QTR64Accuracy0.688618.40
KUAKE-QQR64Accuracy0.775510.34
CHIP-CTC160Macro F10.844547.43
CHIP-STS96Macro F10.889227.67
CHIP-CDN-2C256Micro F10.892126.86
CMeEE128Micro F10.646937.59
CMeIE300Micro F10.5902213.04

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.