PaddleNLP SimpleServing 服务化部署指南:Sentence Transformer 中文文本匹配模型上线实践

发布时间:2026/9/25 20:26:12
PaddleNLP SimpleServing 服务化部署指南:Sentence Transformer 中文文本匹配模型上线实践 人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载导读本文基于 PaddleNLP 仓库中slm/examples/text_matching/sentence_transformers示例讲解如何利用 PaddleNLP 自带的SimpleServing能力将训练完成的 Sentence Transformer 文本匹配模型基于 ERNIE/BERT 的双塔结构以 HTTP 服务的形式快速部署上线。读完本文你将掌握环境准备、静态图推理模型导出、Server 端服务启动、Client 端请求构造以及max_seq_len、batch_size、prob_limit等核心参数的配置方法并理解其底层调用链路由 → 模型管理 → 推理引擎 → 后处理的工作原理。背景为什么用 SimpleServing 部署文本匹配模型本示例基于 LCQMC 中文文本匹配任务使用 Sentence Transformer 双塔Siamese网络结构Query 和 Title 分别输入共享参数的预训练模型如ernie-3.0-medium-zh对 token embedding 做 mean pooling 得到向量 u、v拼接[u, v, |u-v|]后经全连接层完成二分类判断两句是否语义相似。相关训练、预测与模型结构细节可参考 sentence_transformers 主 README。模型训练完成后线上服务通常需要以 HTTP 接口方式对外提供预测能力。PaddleNLP 的 SimpleServing 框架基于 FastAPI 封装通过SimpleServer.register()注册模型、自定义推理前后处理 Handler即可一键启动 RESTful 服务无需额外搭建 Web 服务骨架非常适合模型快速上线与内部联调。环境准备SimpleServing 是 PaddleNLP 2.4.4 版本起提供的能力部署前需确保安装了带该功能的 PaddleNLP 版本pip install paddlenlp 2.4.4提示若需运行 FP16 推理或使用其他可选依赖请参考后续章节结合paddlenlp/server的依赖要求补充安装例如 FP16 推理需要onnxruntime-gpu、onnx、paddle2onnx、onnxconverter-common。部署前置导出静态图推理模型SimpleServing 的 Server 端通过 Predictor 加载Paddle Inference 静态图模型inference.pdmodel/inference.pdiparams。因此启动服务前需要先用仓库中的 export_model.py 将训练好的动态图模型导出为静态图python export_model.py --params_path ./checkpoints/model_400/model_state.pdparams --output_path ./export_model该脚本的核心逻辑见 export_model.py通过AutoTokenizer.from_pretrained(args.params_path)与AutoModel.from_pretrained(args.params_path)加载分词器与预训练模型params_path既可以是本地 checkpoint 路径也可以是预训练模型名按双塔输入构造InputSpecquery_input_ids、title_input_ids形状[None, None]dtypeint64调用paddle.jit.to_static转为静态图并通过paddle.jit.save保存到output_path/float32目录。导出产物需要放置在 Server 注册时model_path指向的目录下。从 Predictor 的_get_default_static_model_path实现看它会在模型目录中查找inference.pdmodel文件或auto_static子目录找不到会抛出RuntimeError(The model path do not include the inference model, please check!)。请确保model_path与实际导出目录一致可按需调整--output_path或 Server 注册路径。Server 服务启动文本匹配/分类任务理解 server.py 的注册逻辑Server 端代码位于 simple_serving/server.py核心是三个组成部分1. 模型处理器TextMatchingModelHandler继承 BaseModelHandler负责将请求数据喂给推理引擎主要流程见 server.py解析parameters中的max_seq_len默认 128与batch_size默认 1支持单条字符串或列表形式的text以及可选的text_pair要求两者长度一致否则抛出ValueError使用注册时指定的 tokenizer 分别对text与text_pair编码并按batch_size切分成多个 batch通过Tuple(Pad(...), Pad(...))做动态 padding 补齐调用 Paddle Inference 预测器得到 logits 输出最终返回{logits: ..., data: data}。2. 后处理器TextMatchingPostHandler继承 BasePostHandler负责将模型输出转换为业务结果见 server.py对 logits 按最后一维做 softmax 归一化得到概率读取prob_limit默认 0.5当第二类概率logit[1] prob_limit时判定label 1相似否则为 0不相似返回{label: [...], similarity: [...]}。3. 服务实例与路由注册见 server.pyapp SimpleServer() app.register( task_namemodels/text_matching, model_path../../export_model, tokenizer_nameernie-3.0-medium-zh, model_handlerTextMatchingModelHandler, post_handlerTextMatchingPostHandler, precisionfp32, device_id0, )各注册参数说明参数说明本示例取值task_name路由路径最终生成/{task_name}的 POST 接口models/text_matchingmodel_path静态图推理模型所在目录相对当前目录../../export_modeltokenizer_name分词器名称服务启动时通过AutoTokenizer.from_pretrained加载ernie-3.0-medium-zhmodel_handler自定义模型处理器须继承BaseModelHandlerTextMatchingModelHandlerpost_handler自定义后处理器须继承BasePostHandlerTextMatchingPostHandlerprecision推理精度支持fp32、fp16、int8fp32device_id使用的设备 ID-1 表示 CPU也支持传入设备列表0启动分类 Server 服务在simple_serving目录下执行server为 server.py 定义的模块名app为SimpleServer实例paddlenlp server server:app --host 0.0.0.0 --port 8189启动成功后服务会在http://0.0.0.0:8189上监听并自动注册 POST 路由/models/text_matching。路由注册由 HttpRouterManager.register_models_router 完成它会基于task_name动态创建 Pydantic 请求/响应模型并将请求体中的data与parameters转发给ModelManager.predict响应以{result: ...}结构返回。Client 端调用启动分类 Client 服务仓库提供了现成的 Client 脚本 simple_serving/client.py直接运行即可发起一次文本匹配请求python client.pyClient 端的请求构造核心逻辑如下见 client.pyurl http://0.0.0.0:8189/models/text_matching headers {Content-Type: application/json} texts [三亚是一个美丽的城市, 北京烤鸭怎么样] text_pair [三亚是个漂亮的城市, 北京烤鸭多少钱] data { data: { text: texts, text_pair: text_pair, }, parameters: {max_seq_len: args.max_seq_len, batch_size: args.batch_size, prob_limit: args.prob_limit}, } r requests.post(urlurl, headersheaders, datajson.dumps(data)) result_json json.loads(r.text) print(result_json)请求格式说明data.text第一句文本字符串或字符串列表data.text_pair可选的第二句文本与text一一对应、长度必须一致parameters服务端推理参数支持max_seq_len、batch_size、prob_limit。响应格式接口返回{result: {label: [...], similarity: [...]}}。其中label为二分类结果1 表示相似、0 表示不相似similarity为模型判定为相似类第二类的 softmax 概率。注意Client 示例中 URL 使用0.0.0.0仅适用于本机联调跨机部署时请将 Host 替换为 Server 所在机器的实际 IP 或域名。Server 与 Client 的端口必须保持一致示例均为 8189。其他参数设置详解Client 端通过 argparse 暴露了三个请求参数见 client.pyparser.add_argument(--max_seq_len, default128, typeint, helpThe maximum total input sequence length after tokenization.) parser.add_argument(--batch_size, default1, typeint, helpBatch size per GPU/CPU for predicting.) parser.add_argument(--prob_limit, default0.5, typeint, helpprobability limit.)例如python client.py --max_seq_len 256 --batch_size 4 --prob_limit 0.6这三个参数会被放入请求体parameters字段经服务端透传给两个 Handler其作用与处理逻辑如下参数默认值作用位置作用与说明max_seq_len128模型处理器分词时的最大序列长度。文本被tokenizer(text..., max_lengthmax_seq_len)截断/补齐该值过大将增大显存占用建议不超过 512batch_size1模型处理器推理批大小。输入按batch_size切分成多个 batch 依次推理适当增大可提升吞吐需结合显存调整prob_limit0.5后处理器判定阈值。第二类 softmax 概率大于该阈值时输出label1相似否则输出 0阈值越高判定越保守服务化架构与底层调用链SimpleServing 的完整调用链可以从 paddlenlp/server 目录源码中得到印证启动paddlenlp server server:app --host 0.0.0.0 --port 8189启动 FastAPI 应用SimpleServer继承自FastAPI见 paddlenlp/server/server.py。注册app.register(...)创建ModelManager并调用register_models_router(task_name)动态注册 POST 路由/models/text_matching见 paddlenlp/server/server.py。请求分发路由处理函数将请求体中的data与parameters交给ModelManager.predict。ModelManager在初始化时校验 Handler 类型并根据device_id/precision创建对应设备上的PredictorCPU、单 GPU 或 GPU 列表同时加载 tokenizer见 paddlenlp/server/model_manager.py。推理Predictor判断precision与运行环境选择 Paddle Inference 或 ONNX Runtime 路径FP16 场景完成静态图加载与预测见 paddlenlp/server/predictor.py。处理ModelManager.predict先调用model_handler(predictor, tokenizer, data, parameters)得到 logits再调用post_handler(model_output, parameters)得到最终的label与similarity见 paddlenlp/server/model_manager.py。快速自测与常见问题联调验证依次启动 Server 与 Client 后观察 Server 端日志输出Transformer model request [path]/models/text_matching is generated.并在 Client 端打印出{result: {label: [...], similarity: [...]}}即表示部署成功。模型未导出若 Server 启动时报The model path do not include the inference model请先执行 export_model.py 导出静态图模型并确保model_path指向包含inference.pdmodel的目录。文本与文本对长度不一致text与text_pair必须逐条对应否则模型处理器会抛出ValueError。推理精度选择默认fp32如需 FP16 需安装对应 ONNX Runtime 依赖int8则需模型本身为量化模型Predictor 会自动检测程序中的quantize算子并切换精度。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP SimpleServing 服务化部署文本信息抽取模型的 HTTP 一键上线实战PaddleNLP SimpleServing 服务化部署文本信息抽取模型的 HTTP 一键上线实战 导读 本文基于 PaddleNLP 信息抽取应用中的 S人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP基于 PaddleNLP SimpleServing 的层次文本分类服务化部署实践基于 PaddleNLP SimpleServing 的层次文本分类服务化部署实践 导读 本文以 PaddleNLP 层次文本分类Hierarchical T人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP SimpleServing 服务化部署文档信息抽取UIE-X一行命令上线实践PaddleNLP SimpleServing 服务化部署文档信息抽取UIE X一行命令上线实践 导读 本文基于 PaddleNLP 仓库中 文档信息抽取人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考