尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

InsightFace ArcFace Paddle PaddleServing 服务化预测功能测试全解析:TIPC test_serving 流程、配置与日志解读

InsightFace ArcFace Paddle PaddleServing 服务化预测功能测试全解析:TIPC test_serving 流程、配置与日志解读 InsightFace ArcFace Paddle PaddleServing 服务化预测功能测试全解析TIPC test_serving 流程、配置与日志解读【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface导读本文围绕 recognition/arcface_paddle 中基于 PaddleServing 的服务化部署功能测试展开系统讲解飞桨训推一体认证TIPC中test_serving.sh主程序的完整测试链路从环境与数据准备prepare.sh、测试配置文件解析、服务端模型转换与启动到 HTTP/RPC 客户端请求与结果日志解读。读完本文你将掌握 ArcFace 动态图模型在 PaddleServing 下 CPU/GPU 两种硬件、mkldnn/TensorRT 多种加速组合的自动化验证方法并能自行读懂server_infer_*.log中的特征输出与results_serving.log中的成败判定。1. 测试定位TIPC 中的 Serving 预测验证飞桨训推一体认证Training and Inference Pipeline CertificationTIPC为 PaddlePaddle 模型提供训练—推理—部署全链路打通情况的标准化测试工具。在 test_tipc/readme.md 的汇总表中ms1mv2_mobileface模型在其他预测部署一栏登记为Paddle Serving: Python意味着其服务化部署可通过本工具一键测试。test_serving.md所描述的正是这一项部署能力的验证主程序其核心职责是将训练产出的 inference 模型.pdmodel/.pdiparams通过paddle_serving_client.convert转换为 Serving 可加载的 server/client 模型在deploy/pdserving目录下以 pipeline 模式启动web_service.py用pipeline_http_client.py发送真实图片请求验证特征提取结果并落盘日志自动遍历配置文件里声明的 CPUmkldnn 多线程与 GPUTensorRT 精度参数组合产出可审计的测试报告。整个测试由三个脚本协作完成test_serving.sh测试主程序、prepare.sh环境与数据准备、common_func.sh通用解析与状态检查函数。2. 测试结论汇总由于本仓库未提供量化训练因此只测试正常模型。对应的 PaddleServing 预测功能支持情况如下与test_serving.md原表一致模型类型devicebatchsizetensorrtmkldnncpu 多线程正常模型GPU1/6fp32--正常模型CPU1/6-fp32支持解读这张矩阵GPU 场景验证use_trtTrue/False与precisionfp32的组合CPU 场景验证use_mkldnnTrue与thread_num1/6的多线程组合。这里1/6取自 serving 配置中thread_num:1|6的枚举值批大小固定为 1pipeline 客户端逐张图片发送。3. 测试流程总览整个 Serving 功能测试分为两步先运行prepare.sh准备数据和模型再运行test_serving.sh执行测试最终在test_tipc/output目录下生成serving_infer_*.log后缀的日志文件。# 第一步准备 serving 测试所需环境与模型 bash test_tipc/prepare.sh ./test_tipc/configs/ms1mv2_mobileface/model_linux_gpu_normal_normal_serving_python_linux_gpu_cpu.txt serving_infer # 第二步运行 serving 预测功能测试 bash test_tipc/test_serving.sh ./test_tipc/configs/ms1mv2_mobileface/model_linux_gpu_normal_normal_serving_python_linux_gpu_cpu.txtprepare.sh的第二个参数MODE支持lite_train_infer与serving_infer两种模式serving_infer分支会完成以下动作下载并安装 GPU 版 serving serverpaddle_serving_server_gpu-0.0.0.post101-py3-none-any.whl安装配套客户端与依赖paddle_serving_client0.6.3、paddle-serving-app0.6.3、werkzeug2.0.2下载 ArcFace inference 模型mobileface_v1.0_infer.tar并解压到./inference/目录。test_serving.sh还支持第二个可选参数GPUID即bash test_serving.sh config 0脚本会通过export CUDA_VISIBLE_DEVICES${GPUID}指定可见 GPU不传时不做设备限定。4. 测试配置文件逐项解析Serving 测试的全部参数都声明在配置文件 model_linux_gpu_normal_normal_serving_python_linux_gpu_cpu.txt 中test_serving.sh只读取该文件的前 18 行并逐项解析serving_params model_name:arcfae_mobileface python:python3.7 trans_model:-m paddle_serving_client.convert --dirname:./inference/ --model_filename:inference.pdmodel --params_filename:inference.pdiparams --serving_server:./deploy/pdserving/MobileFaceNet_128_serving/ --serving_client:./deploy/pdserving/MobileFaceNet_128_client/ serving_dir:./deploy/pdserving web_service:web_service.py --configconfig.yml --opt op.ArcFace.concurrency1 op.ArcFace.local_service_conf.devices:null|0 op.ArcFace.local_service_conf.use_mkldnn:True|False op.ArcFace.local_service_conf.thread_num:1|6 op.ArcFace.local_service_conf.use_trt:False|True op.ArcFace.local_service_conf.precision:fp32 pipline:pipeline_http_client.py --image_dir./imgs各字段含义与作用如下配置字段取值示例含义model_namearcfae_mobileface被测模型名称pythonpython3.7执行测试所用的 Python 解释器trans_model-m paddle_serving_client.convert模型转换模块由 python 调用--dirname./inference/待转换 inference 模型所在目录--model_filenameinference.pdmodel模型结构文件名--params_filenameinference.pdiparams模型参数文件名--serving_server./deploy/pdserving/MobileFaceNet_128_serving/转换后 server 端模型输出目录--serving_client./deploy/pdserving/MobileFaceNet_128_client/转换后 client 端配置输出目录serving_dir./deploy/pdserving服务启动的工作目录脚本会cd进入web_serviceweb_service.py --configconfig.yml --opt op.ArcFace.concurrency1启动 pipeline 服务的脚本与基础参数op.ArcFace.local_service_conf.devicesnull\|0计算设备null为 CPU0为使用 0 号 GPUop.ArcFace.local_service_conf.use_mkldnnTrue\|False是否启用 mkldnn 加速CPU 路径op.ArcFace.local_service_conf.thread_num1\|6CPU 推理线程数枚举op.ArcFace.local_service_conf.use_trtFalse\|True是否启用 TensorRTGPU 路径op.ArcFace.local_service_conf.precisionfp32TensorRT 精度piplinepipeline_http_client.py --image_dir./imgs发送预测请求的客户端命令以|分隔的字段是枚举列表脚本会按笛卡尔积遍历所有组合。这些op.ArcFace.local_service_conf.*键会以--opt参数的形式追加到web_service.py启动命令末尾从而覆盖 config.yml 中的对应配置项。5. 测试脚本实现原理test_serving.sh 通过source test_tipc/common_func.sh引入 common_func.sh 中定义的函数按key:value行格式解析配置func_parser_key/func_parser_value以:为分隔符拆分每行取出键与值func_set_params拼接--keyvalue形式的命令行参数遇null或空值则跳过status_check依据上一条命令退出码将Run successfully / Run failed with command - ...追加写入结果日志。5.1 模型转换脚本首先执行模型转换将 inference 模型转为 Serving 可部署格式python3.7 -m paddle_serving_client.convert \ --dirname./inference/ \ --model_filenameinference.pdmodel \ --params_filenameinference.pdiparams \ --serving_server./deploy/pdserving/MobileFaceNet_128_serving/ \ --serving_client./deploy/pdserving/MobileFaceNet_128_client/转换完成后deploy/pdserving下会出现两类目录MobileFaceNet_128_serving/ ├── __model__ ├── __params__ ├── serving_server_conf.prototxt └── serving_server_conf.stream.prototxt MobileFaceNet_128_client/ ├── serving_client_conf.prototxt └── serving_client_conf.stream.prototxt随后脚本cd到serving_dir./deploy/pdserving并unset https_proxy、unset http_proxy避免代理干扰本地服务通信。5.2 CPU 与 GPU 双路径遍历脚本对每个python解释器执行func_serving按设备枚举分支CPU 路径use_gpunull遍历use_mkldnn跳过False与thread_num启动命令形如python web_service.py --configconfig.yml --opt op.ArcFace.concurrency1 op.ArcFace.local_service_conf.devicesnull op.ArcFace.local_service_conf.use_mkldnnTrue op.ArcFace.local_service_conf.thread_num1 GPU 路径use_gpu0遍历use_trt与precision并做组合合法性过滤——int8精度仅在启用 TensorRT 且存在量化模型时才允许本仓库无量化模型因此只落到fp32其余use_gpu取值打印Does not support hardware other than CPU and GPU Currently!。服务启动后sleep 2s等待就绪再运行pipeline_http_client.py --image_dir./imgs将输出重定向到按组合命名的日志CPUserver_infer_cpu_${pipeline%_client*}_usemkldnn_${use_mkldnn}_threads_${threads}_batchsize_1.log例如server_infer_cpu_usemkldnn_True_threads_1_batchsize_1.logGPUserver_infer_gpu_${pipeline%_client*}_usetrt_${use_trt}_precision_${precision}_batchsize_1.log例如server_infer_gpu_usetrt_True_precision_fp32_batchsize_1.log。每轮组合结束后脚本通过ps ux | grep -E web_service|pipeline | awk {print $2} | xargs kill -s 9清理残留进程保证下一组测试环境干净。6. 运行结果与日志解读所有组合的成败汇总写入test_tipc/output/results_serving.log。运行成功时输出Run successfully with command - python3.7 pipeline_http_client.py --image_dir./imgs ../../test_tipc/output/server_infer_cpu_usemkldnn_True_threads_1_batchsize_1.log 21 ! Run successfully with command - xxxxx ...运行失败时输出Run failed with command - python3.7 pipeline_http_client.py --image_dir./imgs ../../test_tipc/output/server_infer_cpu_usemkldnn_True_threads_1_batchsize_1.log 21 ! Run failed with command - xxxxx ...每个组合的详细预测结果保存在对应日志中。以server_infer_gpu_usetrt_True_precision_fp32_batchsize_1.log为例返回的是 JSON 结构的服务响应value字段携带人脸特征向量float32 数组err_no: 0表示推理成功{err_no: 0, err_msg: , key: [out], value: [array([[ 1.36603206e-01, -2.12395296e-01, -3.94680113e-01, -3.14380080e-01, -9.66617092e-03, 1.87318385e-01, ... -1.75076187e-01, -1.13026705e-04, 2.48254672e-01, 3.72678041e-01, -4.53566402e-01, 6.30904138e-02, 5.19643247e-01, -1.70341924e-01, -5.24724603e-01, ...]], dtypefloat32)]}该特征向量可直接用于后续的人脸比对余弦相似度等验证是确认服务化部署精度与训练/推理结果是否对齐的关键证据。7. 服务端与客户端实现细节7.1 服务端web_service.py 与 config.yml服务端入口是 web_service.py它基于 PaddleServing 的WebService与Op基类实现 pipeline 编排ArcFaceService.get_pipeline_response将读取算子与ArcFaceOp串成一条 DAG随后prepare_pipeline_config(config.yml)加载配置并run_service()启动服务。ArcFaceOp的preprocess完整复刻了 ArcFace 动态图推理的前处理流程与 deploy/pdserving 目录下的客户端严格对齐base64.b64decode解码客户端上传的图片字节流cv2.imdecode还原为 BGR 图像并cv2.resize到112x112归一化img (img - 127.5) * 0.00784313725等价于减 127.5 再除以 127.5映射到[-1, 1]BGR2RGB通道翻转、transpose((2, 0, 1))转为 CHW、expand_dims(0)增加 batch 维输出 float32 张量x。postprocess从fetch_dict[save_infer_model/scale_0.tmp_1]取出特征并包装为{out: out}返回。服务端口等参数由 config.yml 控制关键项包括配置项默认值说明rpc_port/http_port18091/9998RPC 与 HTTP 监听端口二者不允许同时为空worker_num10最大并发数build_dag_each_workerFalse时作为 grpc 线程池 max_workersdag.is_thread_opFalseTrue为线程模型False为进程模型op.ArcFace.concurrency8算子并发数测试脚本会以--opt op.ArcFace.concurrency1覆盖local_service_conf.client_typelocal_predictor进程内预测不额外启动 Serving 服务local_service_conf.model_config./MobileFaceNet_128_servingserver 端模型路径local_service_conf.fetch_list[save_infer_model/scale_0.tmp_1]与postprocess读取的特征变量一一对应local_service_conf.devices0为空/不写时为 CPU写0或0,1,2时为 GPU7.2 客户端pipeline_http_client.pypipeline_http_client.py 是 HTTP 方式请求脚本核心逻辑为遍历--image_dir目录下所有图片base64编码后构造{key: [image], value: [image]}载荷POST 到http://127.0.0.1:9998/ArcFace/prediction逐张打印服务端 JSON 响应最后输出 total number of test imgs: N统计测试图片数。仓库同时提供 pipeline_rpc_client.py 支持 RPC 方式请求二者覆盖了 PaddleServing 的两种主流通信协议。7.3 手动部署与性能观测除自动化测试外也可以按 基于 PaddleServing 的服务部署教程 手动完成全流程安装paddle-serving-server(-gpu)0.6.3GPU 环境需按 CUDA 版本选择post101/post11等变体、paddle_serving_client0.6.3、paddle-serving-app0.6.3随后下载模型、执行paddle_serving_client.convert转换再依次运行# 启动服务日志写入 log.txt python3 web_service.py log.txt # 发送请求 python3 pipeline_http_client.py预测性能数据会自动写入PipelineServingLogs/pipeline.tracer文件。据该教程记录在 V100 GPU 上对 700 张真实图片测试QPS 均值约 57Query count[573]、QPS[57.3 q/s]、平均延迟约 11.5ms可供压测与调优参考——调整config.yml中op.ArcFace.concurrency可进一步优化吞吐。8. 常见问题Q1发送请求后没有结果返回或提示输出解码报错A1启动服务和发送请求时不要设置代理。PaddleServing 的本地 pipeline 通信会被代理劫持导致请求无法到达服务端。关闭代理即可unset https_proxy unset http_proxy该注意事项同时体现在test_serving.sh启动服务前的处理逻辑中属于自动化测试与手动部署共通的排障要点。9. 更多教程test_serving.md为功能测试文档更完整的 Serving 部署细节环境安装、模型转换、性能调优、FAQ请参阅 ArcFace 服务化部署教程训练与推理侧的同类 TIPC 验证可参考 test_train_inference_python 使用文档 与 TIPC 环境安装文档它们共同构成了 ArcFace Paddle 模型从训练、推理到服务化部署的完整认证链路。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表