资讯动态

基于 Triton Inference Server 的 ERNIE 层次文本分类服务化部署指南(PaddleNLP 实战)

发布时间:2026/9/27 22:58:55 来源:尧图企业网站定制
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本文以 PaddleNLP 层次文本分类应用slm/applications/text_classification/hierarchical为背景系统讲解如何基于 NVIDIA Triton Inference Server 将训练好的 ERNIE 文本层次分类模型封装为支持批量推理的在线 pipeline 服务。读者将完整掌握「模型仓库搭建 → Paddle 静态图导出 → Paddle2ONNX 转换 → Triton 多后端 pipeline 编排 → gRPC 客户端请求」的全链路部署方法并理解 ensemble 调度、Python 后端 tokenizer 与后处理等关键实现细节。服务端环境准备Triton 服务端的运行依赖 NVIDIA 容器镜像其前后处理环节则依赖 PaddleNLP 提供的 tokenizer 等组件因此需要在容器内同时安装 PaddlePaddle 与 PaddleNLP。拉取并启动 Triton Server 镜像拉取官方 Triton Server 镜像docker pull nvcr.io/nvidia/tritonserver:21.10-py3启动容器将宿主机上的模型仓库目录挂载到容器内的/modelsdocker run -it --gpus all --nethost --name triton_server -v /path/triton/models:/models nvcr.io/nvidia/tritonserver:21.10-py3 bash注意事项Triton 版本号21.10可根据自身需求调整不同 Triton 版本对应的 Driver、CUDA、TensorRT 和 ONNX Runtime 等后端版本存在兼容矩阵尤其需要核对NVIDIA Driver版本若低于文档要求启动时可能报错。可通过--gpus device1指定具体 GPU 卡号更多 GPU 指定方式参见 NVIDIA 官方容器工具包文档。进入容器并准备 PaddleNLP 环境服务的前后处理tokenizer、标签解码依赖 PaddleNLP需要在容器内安装相关 Python 包docker exec -it triton_server bash python3 -m pip install paddlepaddle-gpu paddlenlp -i https://mirror.baidu.com/pypi/simple注意事项默认使用百度镜像源加速下载使用 HTTP 代理时可将-i https://mirror.baidu.com/pypi/simple去掉。环境中paddlepaddle-gpu或paddlepaddle版本应大于等于 2.2层次分类应用整体要求参见 层次分类运行环境其中 python 3.6、paddlepaddle 2.3、paddlenlp 2.4.8可依据自身环境选择合适的 PaddlePaddle 安装命令。更多 PaddleNLP 安装细节可参考仓库内的安装相关文档。模型获取和转换使用 Triton 的 ONNX Runtime 后端运行模型首先需要将训练得到的动态图参数转换为静态图参数再通过 Paddle2ONNX 转换为 ONNX 格式。导出静态图模型层次分类目录下提供了静态图导出脚本 export_model.py。其核心逻辑是通过AutoModelForSequenceClassification.from_pretrained(args.params_path)加载动态图模型并置为评估模式使用paddle.static.InputSpec声明输入描述input_ids与token_type_ids均为[None, None]的 int64 张量通过paddle.jit.to_static将动态图模型转为静态图再经paddle.jit.save保存产物默认落在output_path/float32下生成float32.pdmodel与float32.pdiparams。执行导出命令示例将导出结果放到当前目录的wos_infer_modelpython ../../export_model.py --params_path../../checkpoint/model_state.pdparams --output_path./wos_infer_model脚本支持的参数如下参数默认值说明--params_path./checkpoint/待加载的动态图模型参数路径--output_path./export静态图模型保存路径--multilingual关闭多语言任务开关开启时仅使用input_ids单输入使用 Paddle2ONNX 转换为 ONNX 模型将 Paddle 静态图模型转换为 ONNX 格式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命令成功运行后会在当前目录生成model.onnx模型文件。其中--opset_version 13指定 ONNX operator set 版本--enable_onnx_checker用于转换后校验--enable_dev_version开启开发版特性支持。更多参数选项说明可查阅 Paddle2ONNX 项目文档。搭建 Triton 模型仓库创建模型仓库目录并将转换好的 ONNX 模型移动到对应子目录mkdir /models/seqcls/1 mkdir /models/seqcls_model/1 mv model.onnx /models/seqcls_model/1转换与整理完成后models目录结构如下该结构与仓库中 triton_serving/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模型配置文件的编写细节可参见 Triton Server Model Configuration 官方文档。下面结合仓库内已有的配置文件逐一分析四个模型的分工。seqclsensemble 调度器seqcls/config.pbtxt 定义了一个platform: ensemble的调度模型不承载实际计算仅负责把三个子模型串成 pipeline输入INPUTTYPE_STRINGdims[1]即原始文本输出labelTYPE_INT64与confidenceTYPE_FP32ensemble_scheduling.step依次串联 tokenizer → seqcls_model → seqcls_postprocess并通过input_map/output_map完成张量名的对接例如 tokenizer 的OUTPUT_0映射为tokenizer_input_ids再作为seqcls_model的input_ids。seqcls_modelONNX Runtime 推理后端seqcls_model/config.pbtxt 使用platform: onnxruntime_onnx加载model.onnx输入为input_ids与token_type_idsTYPE_INT64dims[-1]输出为linear_75.tmp_1TYPE_FP32dims[74]对应 74 类标签的 logitsinstance_group声明 GPU 实例count: 1, kind: KIND_GPUoptimization.graph.level: -1关闭图优化避免算子变更破坏 ONNX 语义通过parameters显式设置 ONNX Runtime 的线程与执行模式参数intra_op_thread_count、inter_op_thread_count、execution_mode。tokenizer 与 seqcls_postprocessPython 后端两个模型均使用backend: python运行在 CPU 实例上KIND_CPU通过自定义TritonPythonModel类实现前后处理。tokenizer/1/model.py 的initialize阶段加载 tokenizerself.tokenizer AutoTokenizer.from_pretrained(ernie-3.0-medium-zh, use_fastTrue)execute阶段对每个请求取出原始字符串bytes解码为 UTF-8调用self.tokenizer(data, max_length128, paddingTrue, truncationTrue)完成编码并将input_ids、token_type_ids转换为配置文件声明的输出 dtype封装为pb_utils.InferenceResponse返回。说明仓库内tokenizer后端实际加载的是中文轻量级预训练模型ernie-3.0-medium-zh客户端示例也是中文新闻文本若按文档原意部署 ERNIE 2.0 英文模型如 WOS 数据集场景需要将此处模型名替换为训练时对应的英文 tokenizer并保持与导出模型时的input_ids/token_type_ids语义一致。seqcls_postprocess/1/model.py 接收 ONNX 输出的 74 维 logits 向量先经过 Sigmoid 归一化data 1 / (1 (np.exp((-data[0]))))随后以 0.5 为阈值做多标签判定将大于阈值的位置类别索引与对应概率分别作为POST_label、POST_confidence输出。这正是层次/多标签分类一个样本可命中多个标签的典型后处理逻辑。部署模型triton目录即 triton_serving包含启动 pipeline 服务的配置与发送预测请求的代码models # Triton启动需要的模型仓库包含模型和服务配置文件 seqcls_grpc_client.py # 层次分类任务发送pipeline预测请求的脚本启动服务端在容器内执行如下命令启动服务默认加载models下所有模型tritonserver --model-repository/models也可以只启动单一任务服务tritonserver --model-repository/models --model-control-modeexplicit --load-modelseqcls服务启动成功后终端会依次打印各后端的初始化日志并在末尾输出模型加载状态表与监听端口信息... I0619 13:40:51.590901 5127 onnxruntime.cc:1999] TRITONBACKEND_Initialize: onnxruntime ... 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其中 8001 为 gRPC 服务端口8000 为 HTTP 服务端口8002 为 Metrics 监控端口。当四个模型均为READY状态时pipeline 服务即可对外提供推理。注意事项Triton 的每个 Python 后端进程默认申请 64M 共享内存默认启动的容器可能无法承载多个 Python 后端节点有两种解决方案启动容器时设置shm-size参数docker run -it --nethost --name triton_server --shm-size1g -v /path/triton/models:/models nvcr.io/nvidia/tritonserver:21.10-py3 bash启动服务时通过--backend-config调低 Python 后端默认内存tritonserver --model-repository/models --backend-configpython,shm-default-byte-size10485760客户端请求客户端环境准备客户端请求有两种方式可以任选其一。方式一在本地执行脚本先安装依赖pip install grpcio pip install tritonclient2.10.0方式二拉取官方 SDK 镜像并在容器中执行docker pull nvcr.io/nvidia/tritonserver:21.10-py3-sdk docker run -it --nethost --name triton_client -v /path/to/triton:/triton_code nvcr.io/nvidia/tritonserver:21.10-py3-sdk bash启动客户端测试仓库提供了 gRPC 客户端脚本 seqcls_grpc_client.py。其核心类SyncGRPCTritonRunner封装了完整的请求流程初始化时通过InferenceServerClient连接server_url并依次校验is_server_live()、is_server_ready()、is_model_ready()确保服务端与模型已就绪通过get_model_config/get_model_metadata动态获取模型的输入输出张量定义避免硬编码张量名Run方法将文本列表按 UTF-8 编码构造为BYTES类型的InferInputshape 为[len(data), 1]调用client.infer发起推理并把返回结果按输出名组织成字典默认响应等待超时时间为 120 秒可通过resp_wait_s调整。main中默认连接localhost:8001模型名为seqcls、版本为1并内置了三段中文新闻文本作为测试样例if __name__ __main__: model_name seqcls model_version 1 url localhost:8001 runner SyncGRPCTritonRunner(url, model_name, model_version) texts [[消失的外企光环5月份在华裁员900余人香饽饽变臭了], [卡车超载致使跨桥侧翻没那么简单], [金属卡扣安装不到位上海乐扣乐扣贸易有限公司将召回捣碎器1162件]] for text in texts: result runner.Run([text]) print(result)执行客户端测试python seqcls_grpc_client.py注意执行客户端请求时建议关闭代理并根据实际部署环境修改main函数中的 ip 地址即启动服务所在机器的地址。每个文本请求的返回结果中label为该文本命中的标签索引集合confidence为对应标签的预测概率二者均由 pipeline 末端的seqcls_postprocessPython 后端生成。小结本方案的核心思路是将「tokenizer 编码、ONNX 模型推理、多标签后处理」拆分为 Triton 的三种模型类型再通过 ensemble 调度串联为单一对外接口tokenizer与seqcls_postprocess是 CPU 上的 Python 后端复用 PaddleNLP 的 tokenizer 与 NumPy 实现seqcls_model是 GPU 上的 ONNX Runtime 后端seqcls则负责整体编排。这样既利用了 Triton 成熟的模型仓库、动态批处理与多后端能力也把对 PaddleNLP 的依赖收敛在前后处理环节可平滑适配 ERNIE 系列模型的层次/多标签文本分类在线服务。文中涉及的全部配置文件与脚本均可直接在仓库 triton_serving 目录中查看或复用。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐基于 Triton Inference Server 的 ERNIE 3.0 中文文本多标签分类 Pipeline 服务化部署指南基于 Triton Inference Server 的 ERNIE 3.0 中文文本多标签分类 Pipeline 服务化部署指南 本文基于 PaddleNLP人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP基于 Triton Inference Server 部署 ERNIE 3.0 中文文本多分类 Pipeline 在线服务基于 Triton Inference Server 部署 ERNIE 3.0 中文文本多分类 Pipeline 在线服务 本文档是 PaddleNLP 多分类人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP基于 PaddleNLP SimpleServing 的层次文本分类服务化部署实践基于 PaddleNLP SimpleServing 的层次文本分类服务化部署实践 导读 本文以 PaddleNLP 层次文本分类Hierarchical T人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑