Files
wehub-resource-sync 2aaeece67c
Codestyle Check / Lint (push) Has been cancelled
Codestyle Check / Check bypass (push) Has been cancelled
Pipelines-Test / Pipelines-Test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:37:14 +08:00
..

基于 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

模型获取和转换

使用 Triton 做服务化部署时,选择 ONNX Runtime 后端运行需要先将模型转换成 ONNX 格式。使用 Paddle2ONNX 将 Paddle 静态图模型转换为 ONNX 模型格式的命令如下,以下命令成功运行后,将会在当前目录下生成 model.onnx 模型文件。

paddle2onnx --model_dir ../../checkpoint/export --model_filename model.pdmodel --params_filename model.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

输出打印如下:

text:  黑苦荞茶的功效与作用及食用方法
label:  功效作用
confidence:  0.984
--------------------
text:  交界痣会凸起吗
label:  疾病表述
confidence:  0.904
--------------------
text:  检查是否能怀孕挂什么科
label:  就医建议
confidence:  0.969
--------------------
text:  幼儿挑食的生理原因是
label:  病因分析
confidence:  0.495
--------------------
text:  鱼油怎么吃咬破吃还是直接咽下去
label:  其他
confidence:  0.850
--------------------