Skip to content

Latest commit

 

History

History
188 lines (140 loc) · 7.46 KB

File metadata and controls

188 lines (140 loc) · 7.46 KB

基于Triton Inference Server的服务化部署指南

本文档将介绍如何使用Triton Inference Server工具部署基于ERNIE 3.0中文模型文本多标签分类的pipeline在线服务。

目录

服务端环境准备

安装Triton Server

拉取Triton Server镜像:

docker pull nvcr.io/nvidia/tritonserver:21.10-py3

启动容器:

docker run  -it --gpus all --net=host --name triton_server -v /path/triton/models:/models nvcr.io/nvidia/tritonserver:21.10-py3 bash

NOTE:

  1. Triton版本号21.10可以根据自己的需求调整,各个Triton版本对应的Driver、CUDA、TRT和ONNX Runtime等后端版本可以参考官网文档。注意其中的NVIDIA Driver行,如果NVIDIA Driver低于文档中要求,在启动运行时会报错。

  2. 可以使用--gpus '"device=1"'来指定GPU卡号,更多GPU指定方式请参见Nvidia User Guide

进入容器并准备PaddleNLP环境

整个服务的前后处理依赖PaddleNLP,需要在容器内安装相关python包

进入容器:

docker exec -it triton_server bash

安装PaddlePaddle、PaddleNLP

python3 -m pip install paddlepaddle-gpu paddlenlp -i https://mirror.baidu.com/pypi/simple

NOTE:

  1. 默认开启百度镜像源来加速下载,如果您使用 HTTP 代理可以关闭(-i https://mirror.baidu.com/pypi/simple)

  2. 环境中paddlepaddle-gpu或paddlepaddle版本应大于或等于2.2, 请参见飞桨快速安装根据自己需求选择合适的PaddlePaddle下载命令。

  3. 更多关于PaddleNLP安装的详细教程请查看Installation

安装FastTokenizer文本处理加速库(可选)

推荐安装fast_tokenizer可以得到更极致的文本处理效率,进一步提升服务性能。

在容器内安装 fast_tokenizer

python3 -m pip install fast-tokenizer-python

模型获取和转换

使用Triton做服务化部署时,选择ONNX Runtime后端运行需要先将模型转换成ONNX格式。

首先将保存的动态图参数导出成静态图参数,具体代码见静态图导出脚本,静态图参数保存在output_path指定路径中,裁剪API裁剪会自动保存静态图模型。运行方式:

python ../../export_model.py --params_path=../../checkpoint/model_state.pdparams --output_path=./infer_model

使用Paddle2ONNX将Paddle静态图模型转换为ONNX模型格式的命令如下,以下命令成功运行后,将会在当前目录下生成model.onnx模型文件。

用Paddle2ONNX转换分类模型

paddle2onnx --model_dir infer_model/ --model_filename float32.pdmodel --params_filename float32.pdiparams --save_file model.onnx --opset_version 13 --enable_onnx_checker True --enable_dev_version True

创建空白目录/seqcls/1和seqcls_model/1,并将将转换好的ONNX模型移动到模型仓库目录

mkdir /models/seqcls/1
mkdir /models/seqcls_model/1
mv model.onnx /models/seqcls_model/1

Paddle2ONNX的命令行参数说明请查阅:Paddle2ONNX命令行参数说明

模型下载转换好之后,models目录结构如下:

models
├── seqcls
│   ├── 1
│   └── config.pbtxt
├── seqcls_model
│   ├── 1
│   │   └── model.onnx
│   └── config.pbtxt
├── seqcls_postprocess
│   ├── 1
│   │   └── model.py
│   └── config.pbtxt
└── tokenizer
    ├── 1
    │   └── model.py
    └── config.pbtxt

模型配置文件config.pbtxt配置细节请参见Triton Server Model Configuration

部署模型

triton目录包含启动pipeline服务的配置和发送预测请求的代码,包括:

models                    # Triton启动需要的模型仓库,包含模型和服务配置文件
seqcls_grpc_client.py     # 分类任务发送pipeline预测请求的脚本

启动服务端

在容器内执行下面命令启动服务,默认启动models下所有模型:

tritonserver --model-repository=/models

也可以通过设定参数只启动单一任务服务:

tritonserver --model-repository=/models --model-control-mode=explicit --load-model=seqcls

NOTE:

启动服务时,Triton Server的每个python后端进程默认申请64M内存,默认启动的docker无法启动多个python后端节点。两个解决方案:

  1. 启动容器时设置shm-size参数, 比如:docker run -it --net=host --name triton_server --shm-size="1g" -v /path/triton/models:/models nvcr.io/nvidia/tritonserver:21.10-py3 bash

  2. 启动服务时设置python后端的shm-default-byte-size参数, 设置python后端的默认内存为10M: tritonserver --model-repository=/models --backend-config=python,shm-default-byte-size=10485760

输出打印如下:

...
I0619 13:40:51.590901 5127 onnxruntime.cc:1999] TRITONBACKEND_Initialize: onnxruntime
I0619 13:40:51.590938 5127 onnxruntime.cc:2009] Triton TRITONBACKEND API version: 1.6
I0619 13:40:51.590947 5127 onnxruntime.cc:2015] 'onnxruntime' TRITONBACKEND API version: 1.6
I0619 13:40:51.623808 5127 openvino.cc:1193] TRITONBACKEND_Initialize: openvino
I0619 13:40:51.623862 5127 openvino.cc:1203] Triton TRITONBACKEND API version: 1.6
I0619 13:40:51.623868 5127 openvino.cc:1209] 'openvino' TRITONBACKEND API version: 1.6
I0619 13:40:52.980990 5127 pinned_memory_manager.cc:240] Pinned memory pool is created at '0x7f14d8000000' with size 268435456
...
I0619 13:43:33.360018 5127 server.cc:592]
+--------------------+---------+--------+
| Model              | Version | Status |
+--------------------+---------+--------+
| seqcls             | 1       | READY  |
| seqcls_model       | 1       | READY  |
| seqcls_postprocess | 1       | READY  |
| tokenizer          | 1       | READY  |
+--------------------+---------+--------+
...
I0619 13:43:33.365824 5127 grpc_server.cc:4117] Started GRPCInferenceService at 0.0.0.0:8001
I0619 13:43:33.366221 5127 http_server.cc:2815] Started HTTPService at 0.0.0.0:8000
I0619 13:43:33.409775 5127 http_server.cc:167] Started Metrics Service at 0.0.0.0:8002

客户端请求

客户端环境准备

客户端请求有两种方式,可以选择在本地执行脚本请求,或下载官方客户端镜像在容器中执行。

方式一:本地执行脚本,需要先安装依赖:

pip install grpcio
pip install tritonclient==2.10.0

方式二:拉取官网镜像并启动容器:

docker pull nvcr.io/nvidia/tritonserver:21.10-py3-sdk
docker run  -it --net=host --name triton_client -v /path/to/triton:/triton_code nvcr.io/nvidia/tritonserver:21.10-py3-sdk bash

启动客户端测试

注意执行客户端请求时关闭代理,并根据实际情况修改main函数中的ip地址(启动服务所在的机器)

python seqcls_grpc_client.py