资讯动态

MobileNetV3 生产实践 Step6:Linux GPU/CPU Python 服务化部署(Paddle Serving)TIPC 自动化测试指南

发布时间:2026/10/9 7:00:12 来源:尧图企业网站定制
人工智能深度学习计算机视觉NLP语音【免费下载链接】modelsOfficially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.项目地址https://gitcode.com/gh_mirrors/mo/models点击查看免费下载本指南聚焦于tutorials/mobilenetv3_prod/Step6中基于 Paddle Serving Pipeline 框架的 Python 服务化部署 TIPC 测试从测试结论、数据与环境准备到test_serving_infer_python.sh自动化测试的完整执行流程与日志解读并深入结合仓库源码剖析模型转换、服务启动、HTTP 客户端请求及 Pipeline 配置的底层实现。读完本文你将掌握如何在 Linux GPU/CPU 环境下对 MobileNetV3 等图像分类模型一键跑通服务化部署回归测试并能独立排查部署过程中的常见故障。1. 测试定位与结论汇总Linux GPU/CPU Python 服务化部署测试的主程序为test_tipc/test_serving_infer_python.sh它用于验证基于 Python 的 Paddle Serving 服务化部署功能是否在指定软硬件环境下可以端到端跑通。该脚本被 TIPCTraining, Inference and Production Cycle测试体系调用属于模型生产化验证链条中服务化部署serving一环与训练、推理测试共同构成完整的自动化回归矩阵。针对 MobileNetV3 的推理相关测试结论如下算法名称模型名称device_CPUdevice_GPUbatchsizeMobileNetV3mobilenet_v3_small支持支持1从该表可以看出mobilenet_v3_small在 CPU 与 GPU 两种计算设备上均支持 Python 服务化部署测试测试 batchsize 固定为 1。这与服务端 Pipeline 配置config.yml 中 op 并发数concurrency: 1及客户端单图请求的实现保持一致。2. 测试流程概览与配置骨架2.1 主程序与配置文件整个测试由两个脚本协同完成数据/模型准备test_tipc/prepare.sh负责解压测试数据、下载推理模型测试执行test_tipc/test_serving_infer_python.sh负责模型转换、服务启动、客户端请求与状态检查。两者的行为均由参数配置文件驱动本案例对应的配置文件为test_tipc/configs/mobilenet_v3_small/serving_infer_python.txt内容如下serving_params model_name:mobilenet_v3_small python:python3.7 trans_model:-m paddle_serving_client.convert --dirname:./inference/mobilenet_v3_small_infer/ --model_filename:inference.pdmodel --params_filename:inference.pdiparams --serving_server:./deploy/serving_python/serving_server/ --serving_client:./deploy/serving_python/serving_client/ serving_dir:./deploy/serving_python web_service:web_service.py --configconfig.yml --opt op.imagenet.local_service_conf.devices:0|null pipline:pipeline_http_client.py --image_dir:../../lite_data/test/所有相对路径均以tutorials/mobilenetv3_prod/Step6/为基准因此运行测试前需先进入该目录。2.2 配置参数详解结合 test_serving_infer_python.sh 的解析逻辑awk NR1, NR18{print}读取前 18 行再经func_parser_key/func_parser_value按冒号拆分为键值对各字段含义如下配置行键key值value说明第 2 行model_namemobilenet_v3_small被测模型名决定日志目录与状态日志命名第 3 行pythonpython3.7执行转换/服务/客户端脚本的 Python 解释器需为 3.6/3.7/3.8第 4 行trans_model-m paddle_serving_client.convert静态图模型转 Serving 模型的转换命令入口第 5 行--dirname./inference/mobilenet_v3_small_infer/静态图推理模型所在目录含 *.pdmodel 与 *.pdiparams第 6 行--model_filenameinference.pdmodel模型结构文件第 7 行--params_filenameinference.pdiparams模型参数文件第 8 行--serving_server./deploy/serving_python/serving_server/转换生成的服务端模型目录第 9 行--serving_client./deploy/serving_python/serving_client/转换生成的客户端模型目录第 10 行serving_dir./deploy/serving_python服务代码工作目录脚本执行cd进入第 11 行web_serviceweb_service.py --configconfig.yml服务端启动命令Python Pipeline Web 服务第 12 行--optop.imagenet.local_service_conf.devices:0|null计算设备开关0表示 GPU第 0 号卡null表示 CPU脚本据此循环执行两轮测试第 13 行piplinepipeline_http_client.py客户端请求脚本第 14 行--image_dir../../lite_data/test/客户端使用的测试图片目录其中第 12 行的--opt参数即 web_service.py 中ArgsParser的-o/--opt选项它支持以点号分隔的路径op.imagenet.local_service_conf.devices在命令行直接覆盖 config.yml 中对应字段从而在不修改配置文件的前提下切换 CPU/GPU 设备。测试脚本会在0与null两个值间循环分别完成 GPU 与 CPU 两轮服务化部署验证。3. 准备数据用于服务化部署测试的数据位于test_images/lite_data.tar直接解压即可若已解压完成则无需重复执行tar -xf test_images/lite_data.tar该步骤也被 prepare.sh 的serving_infer模式自动化脚本在准备阶段执行tar -xf ./test_images/lite_data.tar解压数据同时下载mobilenet_v3_small_infer.tar推理模型包到./inference/目录并解压wget -nc -P ./inference https://paddle-model-ecology.bj.bcebos.com/model/mobilenetv3_reprod/mobilenet_v3_small_infer.tar --no-check-certificate cd ./inference tar xf mobilenet_v3_small_infer.tar cd ../解压完成后./inference/mobilenet_v3_small_infer/下即包含inference.pdmodel结构与inference.pdiparams参数两个静态图文件供后续 Serving 模型转换使用。4. 准备环境4.1 安装 PaddlePaddle2.2 及以上服务化部署测试依赖 PaddlePaddle 运行时已安装 2.2 及以上版本可跳过本步# 需要安装2.2及以上版本的Paddle # 安装GPU版本的Paddle pip install paddlepaddle-gpu2.2.0 # 安装CPU版本的Paddle pip install paddlepaddle2.2.0版本匹配是部署成功的关键0.7.0 版本的 Paddle Serving 需要与 PaddlePaddle 2.2 之后的版本搭配进行模型转换若版本过低会出现下文 FAQ 中的AttributeError报错。4.2 安装 PaddleServing 组件依次安装 serving-server用于启动服务、serving-client用于向服务发送请求、serving-app 三个组件# 安装0.7.0版本serving_server用于启动服务 wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_server_gpu-0.7.0.post102-py3-none-any.whl pip install paddle_serving_server_gpu-0.7.0.post102-py3-none-any.whl # 如果是cuda10.1环境可以使用下面的命令安装paddle-serving-server # wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_server_gpu-0.7.0.post101-py3-none-any.whl # pip install paddle_serving_server_gpu-0.7.0.post101-py3-none-any.whl # 安装serving_client用于向服务发送请求 wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_client-0.7.0-cp37-none-any.whl pip install paddle_serving_client-0.7.0-cp37-none-any.whl # 安装serving-app wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_app-0.7.0-py3-none-any.whl pip install paddle_serving_app-0.7.0-py3-none-any.whl说明GPU 版 whl 包的post102/post101后缀对应 CUDA 10.2 / CUDA 10.1 环境请按实际环境选择下载较慢时可使用国内镜像源加速如在 pip 命令中追加-i https://mirror.baidu.com/pypi/simple。4.3 安装依赖在Step6目录下安装项目依赖pip3 install -r requirements.txt此外deploy/serving_python/README.md 还推荐使用 Docker 进行 Serving 部署以隔离环境CPU 镜像为paddlepaddle/serving:0.7.0-develGPU 镜像为paddlepaddle/serving:0.7.0-cuda10.2-cudnn7-devel并通过nvidia-docker挂载运行。若本机已具备等价环境可跳过 Docker 步骤。5. 功能测试执行5.1 数据与模型准备prepare.shMODE 参数serving_infer表示服务化部署测试模式命令如下bash test_tipc/prepare.sh test_tipc/configs/mobilenet_v3_small/serving_infer_python.txt serving_infer该命令完成三件事解压lite_data.tar测试数据、下载并解压mobilenet_v3_small_infer.tar推理模型、unset https_proxy/unset http_proxy清除代理设置代理可能导致 Serving 请求失败。5.2 运行测试主程序测试方法如下更换为自己的参数配置文件即可完成对应模型的测试。bash test_tipc/test_serving_infer_python.sh ${your_params_file} lite_train_lite_infer以mobilenet_v3_small的 Linux GPU/CPU Python 服务化部署测试为例bash test_tipc/test_serving_infer_python.sh test_tipc/configs/mobilenet_v3_small/serving_infer_python.txt serving_infer脚本第三个可选参数为 GPUIDCUDA 设备号缺省时使用当前环境默认设备GPUID$3 if [ ${#GPUID} -le 0 ];then env else envexport CUDA_VISIBLE_DEVICES${GPUID} fi eval $env5.3 测试脚本源码级执行流程test_serving_infer_python.sh 的核心逻辑封装在func_serving()函数中完整流程如下① 静态图模型 → Serving 模型转换python3.7 -m paddle_serving_client.convert \ --dirname./inference/mobilenet_v3_small_infer/ \ --model_filenameinference.pdmodel \ --params_filenameinference.pdiparams \ --serving_server./deploy/serving_python/serving_server/ \ --serving_client./deploy/serving_python/serving_client/转换日志写入python_trans_model_${model_name}.log转换成功后本地生成serving_server服务端实际加载与serving_client客户端配置两个目录。② 启动 Web 服务脚本cd进入serving_dir./deploy/serving_python随后按配置循环处理 GPU/CPU 两个设备分支GPU 分支use_gpu0python3.7 web_service.py --configconfig.yml --opt op.imagenet.local_service_conf.devices0 python_server_gpu.log 21CPU 分支use_gpunulldevices 置空python3.7 web_service.py --configconfig.yml --opt op.imagenet.local_service_conf.devices python_server_cpu.log 21服务启动后sleep 5s等待就绪再执行客户端请求。③ 客户端请求python3.7 pipeline_http_client.py --image_dir../../lite_data/test/ python_client_gpu.log 21④ 状态检查与进程回收每次命令执行后调用 common_func.sh 中的status_check()依据退出码$last_status判定成败并追加写入状态日志if [ $last_status -eq 0 ]; then echo Run successfully with command - ${model_name} - ${run_command}! | tee -a ${run_log} else echo Run failed with command - ${model_name} - ${run_command}! | tee -a ${run_log} fi测试完成后通过ps ux | grep -E web_service | awk {print $2} | xargs kill -s 9回收服务进程避免残留进程占用端口。⑤ 日志归档所有阶段日志统一写入./test_tipc/output/${model_name}/${MODE}/目录汇总状态日志为serving_infer_python.log其中包含各阶段命令与成功/失败标记便于 CI 自动化回归结果采集。6. 服务端与客户端实现原理6.1 服务端web_service.pyweb_service.py 基于paddle_serving_server.web_service的WebService/Op基类实现 Pipeline 服务MobileNetV3OpOp 子类定义了完整的预处理与后处理逻辑init_op构建与训练推理一致的预处理流水线ResizeImage(256) → CenterCropImage(224) → NormalizeImage() → ToCHW()实现见 preprocess_ops.py短边缩放 256、中心裁剪 224、按 ImageNet 均值 [0.485,0.456,0.406] 与方差 [0.229,0.224,0.225] 归一化、HWC 转 CHWpreprocess将客户端传入的 base64 图片解码为 RGB 图像逐张预处理后np.concatenate拼接成 batch以{input: input_imgs}送入模型postprocess从模型输出softmax_1.tmp_0中取每张图的最大概率对应的class_id与prob并序列化返回。MobileNetV3ServiceWebService 子类get_pipeline_response中创建MobileNetV3Op(nameimagenet, input_ops[read_op])op 名称imagenet必须与 config.yml 中op.imagenet节点严格一致否则服务无法正确装配 DAG。ArgsParser支持-c/--config指定 yaml 配置与-o/--opt覆盖配置项-o参数以点号路径定位深层字段如op.imagenet.local_service_conf.devices这正是测试脚本实现 CPU/GPU 切换的入口。6.2 Pipeline 运行参数config.ymlconfig.yml 控制服务端运行时行为关键参数及含义如下参数值说明worker_num20最大并发数build_dag_each_workerTrue时每个 worker 进程内构建 gRPC Server 与 DAGhttp_port18093HTTP 端口客户端请求地址据此拼接http://127.0.0.1:18093/imagenet/predictionrpc_port9993gRPC 端口http_port与rpc_port不允许同时为空dag.is_thread_opFalseop 资源类型False 为进程模型True 为线程模型op.imagenet.concurrency1op 并发数与测试结论中 batchsize1 对应op.imagenet.local_service_conf.model_config./serving_server服务端加载的 Serving 模型目录op.imagenet.local_service_conf.devices0计算硬件 ID或不写为 CPU 预测0/0,1,2为 GPU 预测表示使用的 GPU 卡op.imagenet.local_service_conf.client_typelocal_predictor客户端类型local_predictor不启动独立 Serving 服务在进程内直接预测6.3 客户端pipeline_http_client.pypipeline_http_client.py 实现 HTTP 请求逻辑请求地址硬编码为http://127.0.0.1:18093/imagenet/prediction路径中的imagenet与 op 名称、18093与http_port一一对应读取--image_dir默认../../images/demo.jpg测试时由脚本替换为../../lite_data/test/下的图片经cv2_to_base64编码构造 JSON 载荷{key: [image], value: [base64], logid: 10000}并以requests.post发送逐张打印服务端返回的 JSON 结果作为测试断言的人工/自动比对依据。7. 预期输出与日志解读执行成功后终端输出如下status_check的成功标记Run successfully with command - python3.7 pipeline_http_client.py ../../log/mobilenet_v3_small/serving_infer/server_infer_gpu_batchsize_1.log 21 !预测结果保存在服务端/客户端日志中可以看到 Paddle Serving 的运行结果{err_no: 0, err_msg: , key: [class_id, prob], value: [[8], [0.9091243743896484]], tensors: []}err_no: 0表示请求处理成功、无错误key/value对返回分类结果class_id[8]预测类别编号 8、prob[0.9091243743896484]置信度约 0.909与基于 Paddle Inference 的本地推理结果一致验证了服务化部署的正确性。在当前仓库实现中各阶段日志实际归档于./test_tipc/output/mobilenet_v3_small/serving_infer/目录含python_trans_model_mobilenet_v3_small.log、python_server_gpu.log、python_client_gpu.log、python_server_cpu.log、python_client_cpu.log与汇总的serving_infer_python.log可据此追溯每个环节的执行情况。如果运行失败终端会输出运行失败的日志信息以及对应的运行命令。可基于该命令在本地复现执行从而定位失败原因模型转换失败、服务未就绪、端口被占用或代理拦截等。8. 常见问题与排查模型转换报错AttributeError: Program object has no attribute _remove_training_info通常是 PaddlePaddle 版本过低所致将 paddle 更新到 2.2 版本即可解决0.7.0 版 Paddle Serving 需搭配 PaddlePaddle 2.2 使用。客户端访问服务不成功很可能是本机设置了代理用下面命令取消代理后再试unset http_proxy unset https_proxy服务启动失败或端口冲突检查config.yml中http_port18093与rpc_port9993是否被占用同时确认model_config: ./serving_server指向的目录确为第 5.3 节模型转换生成的serving_server输出。版本与环境不匹配本项目 Serving 部署仅支持 Python 3.6/3.7/3.8所有 pip 安装与脚本执行均需使用对应版本的 Python建议在 Docker 容器paddlepaddle/serving:0.7.0-devel或paddlepaddle/serving:0.7.0-cuda10.2-cudnn7-devel中部署环境版本已预先对齐。若在使用过程中遇到更多问题可在 Paddle Serving 官方仓库提交 Issue 获取支持。赞分享人工智能深度学习计算机视觉NLP语音【免费下载链接】modelsOfficially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.项目地址https://gitcode.com/gh_mirrors/mo/models点击查看免费下载相关推荐MobileNetV3 生产化 Step6PaddlePaddle Linux GPU/CPU C 推理功能测试TIPC全流程指南MobileNetV3 生产化 Step6PaddlePaddle Linux GPU/CPU C 推理功能测试TIPC全流程指南 本文面向已完成 M人工智能深度学习计算机视觉NLP语音Paddle Serving 服务化部署测试开发实战指南Linux GPU/CPU 环境下的 TIPC 测试体系搭建Paddle Serving 服务化部署测试开发实战指南Linux GPU/CPU 环境下的 TIPC 测试体系搭建 本文是 PaddlePaddle 模型仓人工智能深度学习计算机视觉NLP语音飞桨 Paddle Serving 服务化部署开发全流程指南Linux GPU/CPU 下的功能开发与 TIPC 自动化测试飞桨 Paddle Serving 服务化部署开发全流程指南Linux GPU/CPU 下的功能开发与 TIPC 自动化测试 Paddle Serving 是人工智能深度学习计算机视觉NLP语音上一篇shadcn-vue 组件注册表 FAQ 实战指南复杂组件结构、自定义 Tailwind 颜色与动画配置下一篇Android形状加载动画性能测试报告内存占用与CPU使用率深度分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价 →
↑