首页/新闻资讯/正文详情

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

发布时间:2026/9/25 20:25:17 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

39.Agent为什么会循环调用工具从规划执行到终止条件
39.Agent为什么会循环调用工具从规划执行到终止条件

Agent 为什么会循环调用工具?从规划、执行到终止条件 码海寻道 大模型、智能体与 RAG 工程组件系列第 39 篇 Agent 一直调用搜索、反复重试同一个 API,或者在两个工具之间来回跳转,通常不是模型“突然失控”,而是系统没有为循环定… · 2026/9/25 20:25:11

AI Agent 工程实践(46):模型换了,Agent 为什么突然变笨
AI Agent 工程实践(46):模型换了,Agent 为什么突然变笨

发布时间:2026-09-23 标签:AI Agent|工程实践|模型实验|Model Evaluation 上一篇我说,版本七维里最容易翻车的是 Model。 有人不服:换个更强的模型,怎么可能变差? 于是我… · 2026/9/25 20:25:05

一物一码系统做售后时,怎么区分门店受理和总部处理?
一物一码系统做售后时,怎么区分门店受理和总部处理?

一物一码系统做售后时,怎么区分门店受理和总部处理? 太长不看版 一物一码系统做售后,通常可以把“门店受理”和“总部处理”拆成两层:门店承担身份核验、问题登记、材料上传和常规服务;总部根据企业规则处理复杂判定、… · 2026/9/25 20:24:58

redis7(键值设计、批处理优化)
redis7(键值设计、批处理优化)

键值设计:批处理优化:服务端优化:集群: · 2026/9/25 20:50:07

我把三年的经历,做成了一个会上线自己讲故事的网页
我把三年的经历,做成了一个会上线自己讲故事的网页

我的个人网页上线啦,欢迎大家光临-->47.99.148.82!为什么要做这件事呢,起因很实际,作为一名大四27届应届生,简历只装得下一页,装不下“我是个什么样的人”,同时我也想让更多人看到我的作品。于是我想&am… · 2026/9/25 20:50:07

人像磨皮为什么容易变成“塑料脸”?自然磨皮与美颜 SDK 的处理思路
人像磨皮为什么容易变成“塑料脸”?自然磨皮与美颜 SDK 的处理思路

摘要:本文面向修图 App、照片直播平台和影楼系统的开发团队,系统讲解如何把自然磨皮做成可接入产品的能力。核心围绕四个要点展开:先通过软掩膜控制作用范围,再讨论磨皮强度;给出软掩膜混合公式 O I s M (R − I) … · 2026/9/25 20:50:01

Robomaster数据集实战:YOLOv8训练、推理与增量迁移全流程
Robomaster数据集实战:YOLOv8训练、推理与增量迁移全流程

简介:这份Robomaster比赛数据集面向参与RoboMaster机甲大师赛的高校战队成员、机器人视觉与算法方向的学习者,以及需要真实赛场素材做训练或复盘的研究者,可用于目标检测、图像分类、数据标注与比赛策略分析等场景。压缩包共收录2009个文件&a… · 2026/9/25 20:50:01

LangChain4j 的适用场景
LangChain4j 的适用场景

一、 背景分析:GenAI 时代 Java 企业的“技术栈撕裂”困境在大模型技术爆发初期,开源社区的创新成果几乎全部优先出现在 Python 生态中(如 LangChain、LlamaIndex、AutoGPT)。企业级后端系统(尤其是金融、电信、制造、… · 2026/9/25 20:49:55

认识你的AI团队:My-Brain-Is-Full-Crew 8大核心Agent角色全解析
认识你的AI团队:My-Brain-Is-Full-Crew 8大核心Agent角色全解析

认识你的AI团队:My-Brain-Is-Full-Crew 8大核心Agent角色全解析 【免费下载链接】My-Brain-Is-Full-Crew Built by a PhD whose memory was failing, whose diet was a mess, and whose anxiety had its own agenda. Most second brain tools ignore the fact that … · 2026/9/25 20:49:36

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码