ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

基于 PaddleNLP SimpleServing 的多标签文本分类服务化部署实战指南

基于 PaddleNLP SimpleServing 的多标签文本分类服务化部署实战指南 人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载多标签文本分类模型如基于 ERNIE 3.0 / ERNIE-M 微调的分类模型训练并导出静态图后可通过 PaddleNLP 内置的SimpleServing能力用寥寥几行代码启动一个基于 FastAPI uvicorn 的高性能 HTTP 推理服务并配套一个可配置max_seq_len、batch_size、prob_limit的 Python 客户端。本文将以此仓库中multi_label/deploy/simple_serving目录为骨架完整讲解从环境准备、Server 启动、客户端调用到核心参数语义的端到端部署流程并结合 PaddleNLP 服务端源码剖析其底层实现原理。目录一、部署前置条件与环境准备二、simple_serving 目录结构与关键文件三、启动多标签分类 Server 服务四、分类任务客户端请求与响应五、核心参数 max_seq_len / batch_size / prob_limit 详解六、SimpleServing 的注册与底层处理链路七、部署注意事项与完整流程回顾一、部署前置条件与环境准备SimpleServing 是 PaddleNLP 内置的服务化部署组件其核心依赖位于仓库的 paddlenlp/server 目录。使用前需要确保环境中安装了带 SimpleServing 功能的 PaddleNLP 版本官方推荐的安装方式是直接升级到最新版pip install paddlenlp --upgrade除此之外多标签分类服务的输入是文本、输出是标签列表因此环境中还需要具备可用的paddlepaddle/paddlepaddle-gpu推理后端以及requests客户端 HTTP 请求库。参考 多标签分类指南 中给出的运行环境基线python 3.6、paddlepaddle 2.3、paddlenlp 2.4.8。注意SimpleServing 通过paddlenlp server命令启动其内部实际是调用 uvicorn 运行 FastAPI 应用见 paddlenlp/cli/server.py 中的uvicorn.run(app, **kwargs)因此部署机器上需要保证该命令可正常解析server.py/ernie_m_server.py中定义的 FastAPI 应用对象。服务化部署的前置步骤训练与静态图导出SimpleServing 部署的是静态图推理模型因此在启动服务之前需要先用训练好的动态图 checkpoint 导出静态图。以 export_model.py 为例# 普通中文预训练模型如 ernie-3.0-medium-zh python export_model.py --params_path ./checkpoint/ --output_path ./export # 多语言模型 ERNIE-M 需要加 --multilingual 参数 python export_model.py --params_path ./checkpoint/ --output_path ./export --multilingual导出产物保存在output_path默认./export中结构如下export/ ├── float32.pdiparams ├── float32.pdiparams.info └── float32.json(PIR enabled)/float32.pdmodel(PIR disabled)注意server.py与ernie_m_server.py中注册服务时使用的model_path../../export是相对于simple_serving目录的相对路径即slm/applications/text_classification/multi_label/deploy/simple_serving/../../export等价于multi_label/export所以启动服务前请确认静态图模型确实导出了该目录。二、simple_serving 目录结构与关键文件部署相关文件位于仓库 slm/applications/text_classification/multi_label/deploy/simple_serving 目录simple_serving/ ├── README.md # 部署说明本文所依托的原始文档 ├── client.py # HTTP 客户端发送待预测文本与推理参数 ├── server.py # 标准中文分类模型的 SimpleServer 服务 └── ernie_m_server.py # 多语言 ERNIE-M 模型的 SimpleServer 服务三个 Python 文件各司其职server.py面向 ERNIE 3.0 等中文预训练模型注册路由models/cls_multi_label模型路径../../export分词器ernie-3.0-medium-zh使用CustomModelHandlerMultiLabelClassificationPostHandler。ernie_m_server.py面向多语言预训练模型 ERNIE-M分词器改为ernie-m-base模型处理器替换为ERNIEMHandler其余注册方式一致。client.py构造 JSON 请求体通过requests.post将文本与参数提交给服务端。三、启动多标签分类 Server 服务3.1 标准分类任务启动在simple_serving目录下执行paddlenlp server server:app --host 0.0.0.0 --port 8189server:app表示从 server.py 中加载名为app的 FastAPI 应用对象即SimpleServer实例--host 0.0.0.0使服务监听所有网络接口便于局域网或跨机调用--port 8189指定 HTTP 服务端口。服务启动后会注册一个名为models/cls_multi_label的推理路由。server.py中的注册逻辑如下from paddlenlp import SimpleServer from paddlenlp.server import CustomModelHandler, MultiLabelClassificationPostHandler app SimpleServer() app.register( models/cls_multi_label, model_path../../export, tokenizer_nameernie-3.0-medium-zh, model_handlerCustomModelHandler, post_handlerMultiLabelClassificationPostHandler, )register的参数包括路由名称task_name、静态图模型路径model_path、分词器名称tokenizer_name会自动通过AutoTokenizer.from_pretrained加载、负责「文本 → logits」的model_handler以及负责「logits → 标签/置信度」的post_handler。此外register还支持precisionfp32与device_id0两个可选参数见 paddlenlp/server/server.py。3.2 ERNIE-M 多语言模型启动如果部署的是多语言预训练模型 ERNIE-M例如面向法语、日语、韩语等多语种的多标签任务则改用ernie_m_server.pypaddlenlp server ernie_m_server:app --host 0.0.0.0 --port 8189其注册逻辑在 ernie_m_server.py 中唯一的路由名仍是models/cls_multi_label但分词器换为ernie-m-base、模型处理器换为ERNIEMHandler。ERNIE-M 的 tokenizer 与标准 ERNIE 不同不依赖token_type_ids的分词产物结构存在差异因此必须使用专用 Handler 才能正确喂入推理引擎。四、分类任务客户端请求与响应4.1 客户端脚本使用服务启动后在另一个终端执行python client.pyclient.py 内置了三条例文类文本作为示例与 multi_label/README.md 中的data.txt样例保持一致并支持三个命令行参数python client.py --max_seq_len 128 --batch_size 1 --prob_limit 0.54.2 请求体结构客户端构造的 JSON 请求体分为data与parameters两个字段data { data: { text: texts, # 待预测文本可以是字符串或字符串列表 }, 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)) print(json.loads(r.text))请求地址为http://0.0.0.0:8189/models/cls_multi_label请求头为{Content-Type: application/json}。data.text支持单条字符串也支持多条文本组成的列表服务端会在 Handler 内自动包装成列表并逐条分词、分批推理。data字段还可选传入text_pair用于句子对text pair分类场景。4.3 响应格式多标签分类的响应由MultiLabelClassificationPostHandler生成格式为{ label: [[0, 2], [1]], confidence: [[0.93, 0.87], [0.72]] }其中label中的每个元素是通过概率阈值的标签下标列表下标对应label.txt中标签的顺序confidence是对应下标位置的 sigmoid 概率值。五、核心参数 max_seq_len / batch_size / prob_limit 详解这三个参数在客户端parameters字段中透传给服务端其取值直接影响推理的精度与吞吐。参数客户端默认值服务端默认值作用max_seq_len128128分词器最大序列长度超长文本会被截断建议与训练时max_seq_length保持一致batch_size11每次送入推理引擎的样本数越大吞吐越高、显存/内存占用越大prob_limit0.50.5多标签判定阈值sigmoid 概率大于该值的标签才被输出5.1 服务端如何处理这三个参数在 custom_model_handler.py 的CustomModelHandler.process中从parameters中读取max_seq_len与batch_size未传则使用默认值 128 / 1使用tokenizer(text..., max_lengthmax_seq_len)对每条文本分词取input_ids与token_type_ids按batch_size将样本切成多个 batch用Pad补齐后逐个 batch 调用 Paddle Inference 预测引擎输出{logits: ..., data: ...}交给后处理 Handler。在 cls_post_handler.py 的MultiLabelClassificationPostHandler.process中读取parameters[prob_limit]未传默认0.5对 logits 施加sigmoid 激活logits 1 / (1 np.exp(-logits))将原始 logits 映射到 (0,1) 概率区间遍历每条样本的每个标签位仅保留p prob_limit的标签下标及其概率。与单标签分类MultiClassificationPostHandler使用 softmax argmax 不同多标签分类类别互不排斥因此必须使用逐位 sigmoid 加阈值筛选的方式prob_limit正是控制「一个样本最终输出几个标签」的关键旋钮。调高阈值可减少误报标签调低阈值可提升召回。5.2 参数取值范围建议max_seq_len参考训练阶段的设置multi_label/README.md 建议 128/256/512ERNIE 系列不超过 2048。若显存不足应适当调低过短会导致长文本信息丢失、影响精度。batch_size结合 GPU 显存或 CPU 内存调整一般建议与服务端推理设备算力匹配越大吞吐越高。prob_limit01 之间的浮点数具体最优值可在验证集上按 Micro F1 / Macro F1 扫描确定默认 0.5 是一个中性起点。六、SimpleServing 的注册与底层处理链路6.1 SimpleServer 与路由注册SimpleServer继承自 FastAPIpaddlenlp/server/server.py内部组合了HttpRouterManager、ModelManager等组件register()创建ModelManager负责加载静态图模型与 tokenizer并调用HttpRouterManager.register_models_router(task_name)注册 HTTP 路由同一服务可注册多个模型路由每个register对应一个task_name路由名在客户端 URL 中以/models/{task_name}形式访问。6.2 模型加载与设备选择在 model_manager.py 中precision默认fp32可传入如fp16等精度配置device_id默认0当device_id -1时回退到 CPU 推理传入整数则使用对应编号的 GPUgpu:{device_id}传入列表可同时初始化多张卡。因此如果部署机器只有 CPU除了在register中调整device_id-1也可以改造server.py的注册参数来指定推理后端。6.3 完整的请求处理链路一次完整的 HTTP 推理请求经过如下链路客户端 POST /models/cls_multi_label ↓ HttpRouterManagerFastAPI 路由 ↓ CustomModelHandler.process分词 → 分批 → Paddle Inference 推理 → logits ↓ MultiLabelClassificationPostHandler.processsigmoid → 阈值筛选 → label confidence ↓ JSON 响应返回客户端其中模型 Handler 直接驱动 Paddle Inference 预测器Predictor支持paddle_inference与通用两种执行路径逐 batch 将input_ids/token_type_ids拷贝进输入句柄并取回输出见 custom_model_handler.py。七、部署注意事项与完整流程回顾7.1 常见问题与注意事项模型路径对齐server.py中的model_path../../export是相对simple_serving目录的路径务必先执行export_model.py导出静态图到multi_label/export否则服务启动时会因找不到模型而失败。ERNIE-M 必须用对应文件多语言模型的分词产物与推理输入不同必须用ernie_m_server.py启动否则输入张量不匹配。端口与防火墙服务监听0.0.0.0:8189跨机调用时需放通该端口的入站流量。参数一致性max_seq_len建议与训练阶段一致prob_limit按业务对精度/召回的要求调节。服务安全SimpleServing 默认不设鉴权生产环境建议置于网关或内网之后。7.2 从训练到上线的完整流程将 multi_label/README.md 中的全流程与本文衔接即可得到一条完整的部署链路1. 数据准备train.txt / dev.txt / label.txttab 分隔、多标签用逗号分隔 2. 模型训练python train.py --model_name ernie-3.0-medium-zh ... 3. 静态图导出python export_model.py --params_path ./checkpoint/ --output_path ./export 4. 启动服务paddlenlp server server:app --host 0.0.0.0 --port 8189 5. 客户端调用python client.py --max_seq_len 128 --batch_size 1 --prob_limit 0.5其中每一步的配套脚本与文档均已收录在仓库 slm/applications/text_classification/multi_label 目录下包括训练脚本 train.py、导出脚本 export_model.py以及离线部署 deploy/predictor/README.md、Paddle Serving deploy/paddle_serving、Triton deploy/triton_serving/README.md 等多种部署方案供不同场景按需选用。综上PaddleNLP SimpleServing 以「注册式」配置将「分词 → 推理 → 后处理」封装为可复用的处理链路配合paddlenlp server命令即可在分钟级内完成多标签分类模型的 HTTP 服务化部署是快速落地文本分类推理服务的低成本方案。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐FF14动画跳过插件告别冗长副本动画的终极解决方案FF14动画跳过插件告别冗长副本动画的终极解决方案 还在为《最终幻想14》国服副本中那些无法跳过的动画而烦恼吗FFXIV_ACT_CutsceneSkip插人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPython Gmail标签管理完全指南打造个人化邮件组织系统Python Gmail标签管理完全指南打造个人化邮件组织系统 想要高效管理海量邮件吗Python Gmail标签管理工具为您提供终极解决方案 在这个人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP SimpleServing 服务化部署实战基于 UIE-X 的文档信息抽取 HTTP 服务搭建指南PaddleNLP SimpleServing 服务化部署实战基于 UIE X 的文档信息抽取 HTTP 服务搭建指南 本文面向需要在生产环境中上线 UIE人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP上一篇3行代码实现跨模态检索Janus-Series文本到图像搜索技术解析下一篇code-server自定义代码格式化规则Prettier插件开发全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表