PaddleX 服务化部署实战:从 FastAPI 基础服务到 Triton 高稳定部署 人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/paddlepaddle/PaddleX点击查看免费下载本篇指南以 docs/pipeline_deploy/serving.md 为核心骨架结合 PaddleX 仓库中服务化部署的源码实现CLI 入口、基础服务实现 与 各产线服务定义系统讲解 PaddleX 产线的两类服务化部署方案开发成本低、上手快的基础服务化部署以及基于 NVIDIA Triton Inference Server、面向高稳定性与高性能生产场景的高稳定性服务化部署。读完本文你将掌握插件的安装、服务器的启动与命令行参数调优、客户端调用方式以及基于 Docker 的高稳定方案的全流程部署方法。服务化部署概述服务化部署是实际生产环境中常见的一种部署形式将推理功能封装为网络服务客户端通过 HTTP 等协议发起请求即可远程获取推理结果。相比单机脚本式推理服务化部署天然适合多客户端并发访问、负载隔离与运维监控是模型从跑通走向上线的关键一步。针对不同需求PaddleX 提供两种产线服务化部署方案方案定位特点基础服务化部署快速验证、简单集成开发成本低、易用一条命令即可启动服务高稳定性服务化部署生产级高负载场景基于 NVIDIA Triton Inference Server 打造稳定性更高支持调整配置以优化性能官方建议首先使用基础服务化部署方案进行快速验证确认产线功能符合预期后再根据实际需要评估是否切换至高稳定方案。注意PaddleX 对产线Pipeline而不是单个模块进行服务化部署。换言之服务化的最小单元是完整产线如通用图像分类、通用 OCR而非其中某一模型。一、基础服务化部署基础服务化部署是 PaddleX 内置的轻量级服务方案。从源码看该方案基于FastAPI Uvicorn构建CLI 的serve入口位于 paddlex/paddlex_cli.py通过load_pipeline_config加载产线配置、create_pipeline构建产线对象再调用 basic_serving 中的create_pipeline_app生成 FastAPI 应用最后由 _server.py 中的uvicorn.run拉起服务进程。1.1 安装服务化部署插件执行如下命令安装服务化部署插件paddlex --install serving该命令会安装服务化运行所需的依赖包。从 setup.py 的serving依赖分组可以看到插件会安装fastapi、uvicorn、starlette、aiohttp、filetype、bce-python-sdk、yarl等组件用于支撑 Web 服务框架、异步文件下载与对象存储访问等能力。在 paddlex/paddlex_cli.py 中_install_serving_deps会通过get_serving_dep_specs()读取该依赖分组并完成安装。1.2 运行服务器通过 PaddleX CLI 运行服务器paddlex --serve --pipeline {产线名称或产线配置文件路径} [{其他命令行选项}]以通用图像分类产线为例paddlex --serve --pipeline image_classification启动成功后可以看到类似以下展示的信息INFO: Started server process [63108] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRLC to quit)其中--pipeline既可以指定为官方产线名称如image_classification也可以指定为本地产线配置文件路径YAML 文件PaddleX 会据此构建产线并部署为服务。如需调整配置如模型路径、batch size、部署设备等请参考 通用图像分类产线使用教程 中的模型应用部分修改产线配置文件后再启动服务。与服务化部署相关的命令行选项如下名称说明--pipeline产线名称或产线配置文件路径。--device产线部署设备。默认情况下当 GPU 可用时将使用 GPU否则使用 CPU。--host服务器绑定的主机名或 IP 地址。默认为0.0.0.0。--port服务器监听的端口号。默认为8080。--use_hpip如果指定则启用高性能推理插件。--hpi_config高性能推理配置。以上默认值与源码定义一致在 paddlex/paddlex_cli.py 中--host的默认值为0.0.0.0--port的默认值为8080serve()函数接收device、use_hpip、hpi_config并传递给create_pipeline可见基础服务化部署与命令行推理共用同一套产线构建逻辑。1.3 使用高性能推理插件加速在服务响应时间要求较严格的应用场景中可以使用 PaddleX 高性能推理插件对模型推理及前后处理进行加速从而降低响应时间、提升吞吐量。详细说明请参考 PaddleX 高性能推理指南。通过指定--use_hpip即可启用paddlex --serve --pipeline image_classification --use_hpip注意使用高性能推理插件前需要先安装对应设备类型的插件如paddlex --install hpi-gpu安装逻辑同样由 paddlex/paddlex_cli.py 处理支持cpu、gpu、npu三种设备类型。1.4 调用服务各产线使用教程中的开发集成/部署部分提供了服务的 API 参考与多语言调用示例可在 pipeline_develop_guide 找到各产线的使用教程列表。以通用图像分类产线为例其服务端实现位于 image_classification.py端点定义在 schemas/image_classification.py主要操作infer对图像进行分类HTTP 端点POST /image-classification请求体字段imagestring必填服务器可访问的图像文件 URL或图像文件内容的 Base64 编码结果topkinteger | null选填返回 Top-K 个类别对应产线predict方法的topk参数。通用响应格式请求处理成功时HTTP 状态码为200响应体 JSON 包含logId请求 UUID、errorCode固定为0、errorMsg固定为Success与result操作结果四个属性处理失败时errorCode与 HTTP 状态码一致errorMsg为错误说明。从 _app.py 的源码可以看到服务还提供了/health健康检查端点并对请求校验错误422、HTTP 异常与未捕获异常500做了统一的 JSON 响应封装。图像分类result示例如下{ categories: [ { id: 5, name: 兔子, score: 0.93 } ], image: xxxxxx }其中categories为类别信息数组每个元素包含id类别 ID、name类别名称、score类别得分image为 JPEG 格式的分类结果图使用 Base64 编码。Python 调用示例import base64 import requests API_URL http://localhost:8080/image-classification # 服务URL image_path ./demo.jpg output_image_path ./out.jpg # 对本地图像进行Base64编码 with open(image_path, rb) as file: image_bytes file.read() image_data base64.b64encode(image_bytes).decode(ascii) payload {image: image_data} # Base64编码的文件内容或者图像URL # 调用API response requests.post(API_URL, jsonpayload) # 处理接口返回数据 assert response.status_code 200 result response.json()[result] with open(output_image_path, wb) as file: file.write(base64.b64decode(result[image])) print(fOutput image saved at {output_image_path}) print(\nCategories:) print(result[categories])各产线的服务端点与请求/响应字段有所不同如目标检测的POST /object-detection、OCR 类产线的POST /ocr等均可在对应产线教程的开发集成/部署一节中查到完整 API 参考与 Python、C、Java、Go、C# 等多语言调用示例。1.5 服务端实现原理浅析理解底层实现有助于在生产中排查问题。基础服务的核心封装在 paddlex/inference/serving/basic_serving/_app.pycreate_app创建一个 FastAPI 应用并通过 lifespan 机制管理产线对象的生命周期PipelineWrapper是关键的并发适配层由于 Paddle Inference 存在线程安全问题源码特意将所有推理任务放到同一个独立线程中执行self._thread Thread(targetself._worker)请求通过queue.Queue排队提交异步接口infer通过asyncioFuture 获取结果从而在保证推理正确性的前提下支持并发请求每个产线对应一个独立的 FastAPI 应用模块位于 _pipeline_apps 目录覆盖图像分类、目标检测、OCR、时序、视频、文档理解等全部产线通过primary_operation注册POST端点服务运行由 _server.py 中的uvicorn.run(app, hosthost, portport, log_levelinfo)完成并对/health访问日志做了过滤处理。二、高稳定性服务化部署请注意高稳定性服务化部署方案目前仅支持 Linux 系统。高稳定性服务化部署基于 NVIDIA Triton Inference Server 打造相比基础方案提供更高的稳定性并允许用户通过调整 Triton 配置优化性能如执行实例数量、GPU 分配等。2.1 下载高稳定性服务化部署 SDK在下表中找到产线对应的 SDK 并下载SDK 文件为.tar.gz压缩包名称格式为paddlex_hps_{产线名}_sdk.tar.gz产线SDK文档场景信息抽取 v3paddlex_hps_PP-ChatOCRv3-doc_sdk.tar.gz通用图像分类paddlex_hps_image_classification_sdk.tar.gz通用目标检测paddlex_hps_object_detection_sdk.tar.gz通用实例分割paddlex_hps_instance_segmentation_sdk.tar.gz通用语义分割paddlex_hps_semantic_segmentation_sdk.tar.gz通用图像多标签分类paddlex_hps_image_multilabel_classification_sdk.tar.gz通用图像识别paddlex_hps_PP-ShiTuV2_sdk.tar.gz行人属性识别paddlex_hps_pedestrian_attribute_recognition_sdk.tar.gz车辆属性识别paddlex_hps_vehicle_attribute_recognition_sdk.tar.gz人脸识别paddlex_hps_face_recognition_sdk.tar.gz小目标检测paddlex_hps_small_object_detection_sdk.tar.gz图像异常检测paddlex_hps_anomaly_detection_sdk.tar.gz人体关键点检测paddlex_hps_human_keypoint_detection_sdk.tar.gz开放词汇检测paddlex_hps_open_vocabulary_detection_sdk.tar.gz开放词汇分割paddlex_hps_open_vocabulary_segmentation_sdk.tar.gz旋转目标检测paddlex_hps_rotated_object_detection_sdk.tar.gz3D 多模态融合检测paddlex_hps_3d_bev_detection_sdk.tar.gz通用 OCRpaddlex_hps_OCR_sdk.tar.gz通用表格识别paddlex_hps_table_recognition_sdk.tar.gz通用表格识别 v2paddlex_hps_table_recognition_v2_sdk.tar.gz通用版面解析paddlex_hps_layout_parsing_sdk.tar.gz通用版面解析 v3paddlex_hps_PP-StructureV3_sdk.tar.gz公式识别paddlex_hps_formula_recognition_sdk.tar.gz印章文本识别paddlex_hps_seal_recognition_sdk.tar.gz文档图像预处理paddlex_hps_doc_preprocessor_sdk.tar.gz时序预测paddlex_hps_ts_forecast_sdk.tar.gz时序异常检测paddlex_hps_ts_anomaly_detection_sdk.tar.gz时序分类paddlex_hps_ts_classification_sdk.tar.gz多语种语音识别paddlex_hps_multilingual_speech_recognition_sdk.tar.gz通用视频分类paddlex_hps_video_classification_sdk.tar.gz通用视频检测paddlex_hps_video_detection_sdk.tar.gz文档理解paddlex_hps_doc_understanding_sdk.tar.gzSDK 文件托管在 PaddleX 官方的模型生态对象存储上具体下载地址可在 docs/pipeline_deploy/serving.md 的 SDK 表格中查看对应链接。下载解压后SDK 目录通常包含server服务器端配置与脚本与client客户端调用脚本两个子目录。2.2 调整配置高稳定性服务化部署 SDK 的server/pipeline_config.yaml文件为产线配置文件用户可以修改该文件以设置要使用的模型目录等。此外由于该方案基于 NVIDIA Triton Inference Server 打造用户还可以直接修改 Triton 的配置文件在 SDK 的server/model_repo/{端点名称}目录中可以找到一个或多个config*.pbtxt文件如果目录中存在config_{设备类型}.pbtxt文件请修改期望使用的设备类型对应的配置文件否则请修改config.pbtxt。一个常见的需求是调整执行实例数量。为此需要修改配置文件中的instance_group配置使用count指定每一设备上放置的实例数量使用kind指定设备类型如KIND_GPU使用gpus指定 GPU 编号。示例 1在 GPU 0 上放置 4 个实例instance_group [ { count: 4 kind: KIND_GPU gpus: [ 0 ] } ]示例 2在 GPU 1 上放置 2 个实例在 GPU 2 和 3 上分别放置 1 个实例instance_group [ { count: 2 kind: KIND_GPU gpus: [ 1 ] }, { count: 1 kind: KIND_GPU gpus: [ 2, 3 ] } ]更多 Triton 模型配置细节如动态批处理、模型并发策略等可查阅 Triton Inference Server 官方模型配置文档。2.3 运行服务器用于部署的机器上需要安装19.03 或更高版本的 Docker Engine。首先根据需要拉取 Docker 镜像GPU 部署镜像机器上需要安装有支持 CUDA 11.8 的 NVIDIA 驱动docker pull ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlex/hps:paddlex3.0.3-gpuCPU-only 镜像docker pull ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlex/hps:paddlex3.0.3-cpu准备好镜像后切换到server目录执行如下命令运行服务器docker run \ -it \ -e PADDLEX_HPS_DEVICE_TYPE{部署设备类型} \ -v $(pwd):/app \ -w /app \ --rm \ --gpus all \ --init \ --network host \ --shm-size 8g \ {镜像名称} \ /bin/bash server.sh各参数说明如下PADDLEX_HPS_DEVICE_TYPE即部署设备类型可取cpu或gpuCPU-only 镜像仅支持cpu如果希望使用 CPU 部署则不需要指定--gpus如果需要进入容器内部调试可以将命令中的/bin/bash server.sh替换为/bin/bash然后在容器中手动执行/bin/bash server.sh如果希望服务器在后台运行可以将-it替换为-d容器启动后通过docker logs -f {容器 ID}查看容器日志在命令中添加-e PADDLEX_HPS_USE_HPIP1可以使用 PaddleX 高性能推理插件加速产线推理过程更多信息请参考 PaddleX 高性能推理指南。启动成功后可观察到类似下面的 Triton 服务输出I1216 11:37:21.601943 35 grpc_server.cc:4117] Started GRPCInferenceService at 0.0.0.0:8001 I1216 11:37:21.602333 35 http_server.cc:2815] Started HTTPService at 0.0.0.0:8000 I1216 11:37:21.643494 35 http_server.cc:167] Started Metrics Service at 0.0.0.0:8002可以看到 Triton 同时启动了三个服务端口gRPC 服务8001、HTTP 服务8000以及指标监控服务8002。2.4 调用服务目前高稳定性服务化部署仅支持使用 Python 客户端调用服务支持的 Python 版本为3.8 至 3.12。切换到 SDK 的client目录执行如下命令安装依赖# 建议在虚拟环境中安装 python -m pip install -r requirements.txt python -m pip install paddlex_hps_client-*.whlclient目录下的client.py脚本包含服务的调用示例并提供命令行接口可以直接基于它进行二次开发或快速验证。需要特别说明的是使用高稳定性服务化部署方案部署的服务提供与基础服务化部署方案相匹配的主要操作。对于每个主要操作端点名称以及请求、响应的数据字段都与基础服务化部署方案保持一致。因此你可以复用基础服务化部署场景下的 API 约定来调用高稳定服务各产线教程中的开发集成/部署部分同样适用可前往 pipeline_develop_guide 查看各产线的使用教程。三、方案选型建议对比维度基础服务化部署高稳定性服务化部署上手成本极低一条 CLI 命令启动中等需下载 SDK 并部署 Docker 容器系统要求无特殊要求仅支持 Linux需 Docker Engine 19.03底层框架FastAPI UvicornNVIDIA Triton Inference Server性能调优依赖高性能推理插件--use_hpip可调 Tritoninstance_group等配置亦支持PADDLEX_HPS_USE_HPIP1客户端多语言Python / C / Java / Go / C# 等目前仅 Python3.8–3.12适用场景快速验证、原型集成、中小规模并发生产环境高并发、高稳定性要求的正式上线实践路径建议先在本地用基础服务化部署快速跑通产线、验证 API 与业务对接确认无误后若对稳定性或吞吐有更高要求再切换到高稳定性方案——两者在 API 语义上保持对齐切换成本主要集中在服务端环境搭建上。相关资源服务化部署指南原文docs/pipeline_deploy/serving.mdCLI 服务入口与参数解析paddlex/paddlex_cli.py基础服务应用与端点注册paddlex/inference/serving/basic_serving/_app.py各产线 FastAPI 端点实现paddlex/inference/serving/basic_serving/_pipeline_apps/请求/响应 Schema 定义paddlex/inference/serving/schemas/服务化依赖声明setup.py高性能推理指南docs/pipeline_deploy/high_performance_inference.md各产线开发集成/部署API 参考示例docs/pipeline_usage/tutorials/cv_pipelines/image_classification.md产线使用教程索引docs/pipeline_usage/pipeline_develop_guide.md赞分享人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/paddlepaddle/PaddleX点击查看免费下载相关推荐PaddleOCR 服务化部署实战基于 PaddleX 的基础服务化与高稳定性服务化方案PaddleOCR 服务化部署实战基于 PaddleX 的基础服务化与高稳定性服务化方案 服务化部署是 PaddleOCR 在生产环境中的主流推理形态将检测人工智能计算机视觉OCR深度学习大模型RAGPaddleOCR 服务化部署实战指南基于 PaddleX 的基础服务化、高稳定性服务化与二进制内容 URL 返回PaddleOCR 服务化部署实战指南基于 PaddleX 的基础服务化、高稳定性服务化与二进制内容 URL 返回 服务化部署是 PaddleOCR 在生产环人工智能计算机视觉OCR深度学习大模型RAGPaddleX High Stability Serving基于 Triton Inference Server 的高稳定服务化部署全流程指南PaddleX High Stability Serving基于 Triton Inference Server 的高稳定服务化部署全流程指南 PaddleX人工智能大模型低代码计算机视觉深度学习模型推理服务上一篇OpenLogic项目深度解析免费开源的逻辑学教材如何革新你的学习体验下一篇5个步骤轻松搞定VRChat跨语言实时翻译VRCT新手完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考