ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

飞桨 TIPC Jetson 端 Python 推理部署测试开发指南——以 PaddleOCR 文本检测模型样板间为例

飞桨 TIPC Jetson 端 Python 推理部署测试开发指南——以 PaddleOCR 文本检测模型样板间为例 人工智能深度学习计算机视觉NLP语音【免费下载链接】modelsOfficially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.项目地址https://gitcode.com/gh_mirrors/mo/models点击查看免费下载本文档面向需要在 NVIDIA Jetson 系列开发套件Jetson Nano、TX、NX 等上接入飞桨训推一体全流程Training and Inference Pipeline CriterionTIPC预测测试的开发者。文章以 PaddleOCR 文本检测模型在 Jetson NX 上的接入为样板间完整讲解 Jetson 端 TIPC 的测试定位、规范接入流程、infer_params参数文件的逐行配置方法并结合当前仓库中的测试模板源码参数解析工具函数与自动化测试脚本深入剖析参数是如何被解析、组合为运行命令的。读完本文你将能够为自己的模型在 Jetson 端配置出可一键运行的 GPU 预测、GPUTensorRT(fp32/fp16) 预测测试链条并理解其与 Linux 端基础链条测试的差异。1. 总览Jetson 端 TIPC 预测测试的定位飞桨除了基本的模型训练和预测还提供了支持多端多平台的高性能推理部署工具。TIPC训推一体全流程提供了统一的测试信息与测试工具方便用户查阅每种模型的训练推理部署打通情况并可以进行一键测试。Jetson 端 TIPC 测试是 TIPC 部署测试矩阵中的一环与 C 推理infer_cpp.md、服务化部署serving.md、Paddle2ONNXpaddle2onnx.md、ARM CPU/OpenCL GPU 等部署方式并列详见 TIPC 测试开发文档索引。1.1 背景与可建立的 CI/CE 机制TIPC 自动化测试的核心目标是创建一个自动化测试 CI 机制监控框架代码更新可能导致的模型训练、预测报错、性能下降等问题。主要监控内容包括框架更新后套件模型的正常训练、量化训练、裁剪训练、评估、动转静、推理预测是否能正常走通例如 API 不兼容升级导致的问题框架更新后套件模型的预测速度是否合理框架更新后套件模型训练的精度是否达标或训练的 loss 是否出现 nan 等异常其他潜在问题。为此需要在套件中加入运行脚本不影响套件正常运行把模型的训练、预测 TIPC 接入框架的 CI 和 CE 中从而提升 PR 合入的质量。Jetson 是 NVIDIA 推出的开发者套件用于部署 AI 模型系列产品包括 Jetson Nano、Jetson TX、Jetson NX 等。由于Jetson 的 CPU 性能远差于笔记本或台式机因此在 Jetson 上TIPC 测试聚焦于预测推理链条可以建立的 CI/CE 机制为不训练全量数据走通开源模型评估、预测并验证模型预测速度和精度是否符合设定预期whole_infer单模型 30 分钟内。该机制要求保证动转静 → inference 预测跑通、预测结果正确、预测速度符合预期、预测资源占用合理监控显存、内存。需要注意由于 CI 有时间限制测试时需要限制运行时间因此需要构建一个很小的数据集来完成测试避免全量数据拖慢 CI 流程。1.2 TIPC 自动化测试链条本规范测试的链条如下其中相邻两个模块之间是两两组合关系可根据模型开发规范适当删减链条训练 → 压缩(可选) → 动转静 → 预测部署上图各模块在 Jetson 端的具体测试点为Paddle inference 预测部署方面必选Jetson 端 GPU 上不同 batchsize、是否开启 TensorRT 的运行状态。结合 1.1 中的定位Jetson 端需要覆盖的预测链条包括GPU 预测、GPU TensorRT(fp32)、GPU TensorRT(fp16)三种预测状态并在此基础上组合不同的 batchsize 与 CPU 线程数配置。1.3 文本检测样板间概览以 PaddleOCR 文本检测模型为例规范提供了可复制的样板间能够跑通 1.2 章节提到的所有测试链条完成 1.1 背景部分提到的 whole_infer 这一种 CI/CE 机制。样板间位于 PaddleOCR dygraph 分支的test_tipc文件夹其中与本规范相关的文件为test_tipc/ - configs/ # 自动化测试需要的配置文件和参数文件 ├── ppocr_det_mobile/ # ppocr 检测模型 mobile 版本的配置文件和参数文件夹 ├── det_mv3_db.yml # 测试 mobile 版 ppocr 检测模型训练的 yml 文件 ├── model_linux_gpu_normal_normal_infer_python_jetson.txt # Jetson 端测试 mobile 版 ppocr 检测模型的参数配置文件 - prepare.sh # 以参数配置文件为参数配置完成数据、预训练模型、预测模型的自动下载 - test_train_inference_python.sh # 自动化测试脚本以参数配置文件为参数配置组建出不同的运行命令完成所有链条运行 - readme.md # 该代码库测试脚本运行说明其中model_linux_gpu_normal_normal_infer_python_jetson.txt就是 Jetson 端专属的参数配置文件即下文第 3 节详解的infer_params配置它与 Linux 端的train_infer_python.txt共用同一套解析与运行脚本仅通过不同的参数取值来适配 Jetson 硬件环境。2. TIPC 规范接入流程TIPC 规范接入包含如下三个步骤准备数据规范化输出日志编写自动化测试代码。该部分与 Linux 端基础链条接入规范完全一致详细开发规范可参考 Linux GPU/CPU 基础训练推理测试开发规范。下面结合当前仓库中的模板资源对三个步骤做要点说明。2.1 准备数据prepare.sh由于不同模型所需的训练、预测数据、预训练模型不同需要一个自动化下载训练数据、预训练模型的脚本即prepare.sh。它根据不同的运行模式和被测模型完成以下功能预训练模型下载并解压训练、预测数据下载并解压准备编译好的第三方库等。prepare.sh的使用方式为bash test_tipc/prepare.sh 配置文件路径 运行模式TIPC 共支持多种运行模式与 Jetson 端直接相关的是whole_infer不训练全量数据预测走通开源模型评估、动转静检查 inference model 预测时间和精度。在样板间的whole_infer分支中脚本会根据从配置文件解析得到的模型名称如ocr_det下载对应的评测数据与推理模型例如ch_det_data_50.tar、ch_ppocr_mobile_v2.0_det_infer.tar并解压到./inference目录下供后续预测链条使用。接入自己的模型时需要把model_name判断条件以及下载内容替换为自家模型的资源地址。当前仓库的 TIPC 仓库模板community/repo_template/test_tipc中保留了完整的目录骨架包括prepare.sh、test_train_inference_python.sh、common_func.sh、configs/your_model_name/、docs/与results/可作为接入时的脚手架。2.2 规范化输出日志inference 日志与 AutoLog不同模型中 Paddle Inference 预测输出的格式均不相同且输出信息不够完善。自动化测试时希望有一套规范且完善的信息格式输出。规范要求预测输出中除了预测结果外还包括当前 paddle 版本号以及具体 commit运行的硬件CPU 还是 GPU运行配置信息是否开启 IR 优化、TRT、MKLDNN以及使用的线程数运行的模型名称运行的数据信息batch size、数据量性能信息CPU 占用内存、GPU 显存、利用率inference 各阶段平均预测时间输入数据 FP32 与 FP16 的预测结果用于校验 inference 结果的正确性。为此TIPC 规范引入了AutoLog工具包用于统计以上信息并格式化输出。使用 AutoLog 需要四步改造推理代码初始化 AutoLog 类传入模型名称model_name、模型精度model_precisionfp32/fp16/int8、batch size、输入 shape、日志保存路径save_path、Paddle Inference 配置inference_config用于获取 enable_mkldnn、enable_tensorrt 等信息、进程 PID 列表pids为 None 时自动获取当前运行进程的 PID、进程名process_name、GPU idgpu_ids等参数还可设置time_keys默认统计preprocess_time、inference_time、postprocess_time、warmup预测前 warmup 次数内不统计时间与logger预测耗时打点在模型预测中统计前处理、预测、后处理三个阶段的耗时分别传入 AutoLogger 的preprocess_time、inference_time、postprocess_time打印输出信息完成循环预测后调用 AutoLogger 的report()函数输出规范化的日志信息。report()是必须要调用的否则统计内存和显存占用的子进程不会关闭预测结果正确性校验将每个预测样本的预测结果FP32 与 FP16 两份打印到运行日志或保存为 TXT 文件通过对比校验脚本读取日志文件与 TXT 文件中的结果验证二者是否一致或误差是否在预期范围内。补充说明如果是 fp32 精度预测无论 CPU 还是 GPU都不允许有太大误差但 fp16 精度预测结果可能不稳定CPU 开 mkldnn fp16 与 GPU TensorRT fp16 的预测结果可能不同测试半精度误差时需预留更合理的误差范围。2.3 编写自动化测试代码自动化测试脚本由三部分协作完成参数配置文件txt用于配置测试哪些功能例如训练部分是否测试分布式训练、混合精度训练预测部分测试哪些硬件组合prepare.sh负责测试前的数据、预训练模型、预测模型下载等准备工作test_train_inference_python.sh自动化测试运行脚本根据 txt 参数配置组合出不同的运行指令并执行。三个文件各司其职。在 Jetson 端接入时由于不涉及训练重点工作是写好infer_params参数配置段详见下一节并保证推理脚本支持--use_gpu、--use_tensorrt、--precision、--cpu_threads、--benchmark等参数的解析。3. Jetson 端 TIPC 参数配置Jetson 端不支持训练仅需要测试预测inference链条。Jetson 端的参数配置文件与 Linux 端共用同一个 txt 文件的整体结构train_params/eval_params/infer_params三段其中训练、评估两段可置空核心工作在infer_params段。3.1 参数文件整体结构一个完整的 TIPC 参数配置文件包含三大段用##分隔并以infer_params之类的行标注段落起点。Jetson 端的infer_params段配置如下来自规范文档原文对应样板间 PaddleOCR 检测模型infer_params model_name:ocr_det python:python infer_model:./inference/ch_ppocr_mobile_v2.0_det_infer infer_export:null infer_quant:False inference:tools/infer/predict_det.py --use_gpu:True|False --enable_mkldnn:False --cpu_threads:1|6 --rec_batch_num:1 --use_tensorrt:False|True --precision:fp16|fp32 --det_model_dir: --image_dir:./inference/ch_det_data_50/all-sum-510/ null:null --benchmark:True null:null3.2 infer_params 逐行解读对上述参数逐行说明如下行参数含义与配置要点1model_name:ocr_det模型名称也是 prepare.sh 中用于区分下载不同数据/模型的关键字Jetson 端只做预测此名称用于匹配whole_infer模式下的评测数据与推理模型2python:python指定运行推理脚本的 Python 解释器可按 Jetson 环境改为python3等3infer_model:./inference/ch_ppocr_mobile_v2.0_det_infer预测模式下加载的 inference 模型路径动转静导出的模型或直接下载的预测模型4infer_export:null是否对第 3 行设置的模型执行动转静导出null表示不执行。由于 Jetson 端不做训练、直接加载开源预测模型因此这里置为null5infer_quant:False第 3 行设置的模型路径是否为量化模型非量化模型置False6inference:tools/infer/predict_det.pyinference 阶段执行的预测脚本路径7--use_gpu:True\|False是否使用 GPUTrue\|False表示 GPU 与 CPU 两种配置都会运行8--enable_mkldnn:False是否开启 MKLDNN。由于 Jetson 机器上的 CPU 不支持开启 MKLDNN因此固定设置为False9--cpu_threads:1\|6CPU 线程数1\|6表示分别以 1 线程与 6 线程运行用于覆盖 CPU 不同线程数的预测情况10--rec_batch_num:1batch size 参数OCR 检测脚本中名为rec_batch_num此处固定为 1如需覆盖不同 batchsize可改为1\|4等多值组合11--use_tensorrt:False\|True是否开启 TensorRTFalse\|True表示分别测试不开 TRT 与开 TRT 两种状态12--precision:fp16\|fp32开启 TensorRT 后的预测精度fp16\|fp32两种精度都会测试13--det_model_dir:加载 inference 模型路径的参数名冒号后无需设置由第 3 行的infer_model提供14--image_dir:./inference/ch_det_data_50/all-sum-510/预测时使用的数据路径由 prepare.sh 在whole_infer模式下下载15null:null预留参数位可按params_key:params_value格式扩展为任意参数16--benchmark:True是否开启 AutoLogTrue表示启用规范化日志输出配合--save_log_path保存日志17null:null预留参数位3.3 CPU/GPU 参数组合与测试覆盖对 Jetson 端预测参数的选择规范给出的核心组合逻辑是--use_gpu:True|False --enable_mkldnn:False --cpu_threads:1|6 --rec_batch_num:1 --use_tensorrt:False|True --precision:fp16|fp32在 Jetson CPU 上执行预测时仅测试 CPU 不同线程数1 线程 / 6 线程的情况。由于 Jetson 的 CPU 不支持开启 MKLDNN所以--enable_mkldnn固定为False在 Jetson GPU 上需要测试开启 TensorRT 在不同精度下的预测情况因此设置--use_tensorrt:False|True与--precision:fp16|fp32即覆盖GPU 原生预测、GPU TensorRT(fp32)、GPU TensorRT(fp16)三条预测链条。自动化脚本会按照“多值参数两两组合”的方式生成多条运行命令例如python tools/infer/predict_det.py --use_gpuTrue --use_tensorrtTrue --precisionfp32 # GPU TRT fp32 python tools/infer/predict_det.py --use_gpuTrue --use_tensorrtTrue --precisionfp16 # GPU TRT fp16 python tools/infer/predict_det.py --use_gpuFalse --enable_mkldnnFalse --cpu_threads1 # CPU 1 线程 python tools/infer/predict_det.py --use_gpuFalse --enable_mkldnnFalse --cpu_threads6 # CPU 6 线程每条命令运行后AutoLog 会输出该配置下的模型名称、运行硬件、TRT/MKLDNN 开关、线程数、batch size、显存/内存占用及各阶段平均预测时间这些信息会被收集为测试证据用于校验预测速度与资源占用是否符合预期。4. 底层机制参数解析与命令组建源码解读Jetson 端与 Linux 端共用同一套common_func.sh与test_train_inference_python.sh。理解参数文件是如何被解析、组合成运行命令的有助于排查接入时遇到的参数不生效命令报错等问题。以下源码来自当前仓库的模板实现 docs/tipc/train_infer_python/template/test。4.1 common_func.sh 中的五个工具函数common_func.sh 中定义了 5 个函数会被test_train_inference_python.sh等执行脚本调用func_parser_key()以:为分隔符解析 params.txt 中冒号前的部分参数名func_parser_value()解析 params.txt 中冒号后的部分参数值func_set_params()返回keyvalue的字符串用于组建参数命令如果 key 或 value 为null则返回空字符串即该参数不会生效func_parser_params()解析与测试模式 MODE 相关的参数目前用于解析 epoch 和 batch size 这类随模式变化的值例如epoch_num:lite_train_lite_infer1status_check()状态检查函数获取上一条指令的退出码0 表示成功、其他表示失败成功与失败的指令都会记录到results.log文件中。其中func_set_params是参数置 null 即失效这一约定在源码层面的实现当 key 为null、value 为null/空格/空字符串时函数输出空字符从而在组建命令时自动跳过该参数。4.2 test_train_inference_python.sh 的解析流程test_train_inference_python.sh 的解析流程为以$1传入参数文件路径FILENAME以$2传入运行模式MODE如whole_infer通过dataline$(awk NR1, NR51{print} $FILENAME)读取参数文件前 51 行再按行切分到数组lines依次调用func_parser_key/func_parser_value/func_parser_params解析训练、评估、导出、预测各段参数。预测段解析示例inference_py$(func_parser_value ${lines[39]}) # 推理脚本 use_gpu_key$(func_parser_key ${lines[40]}) # --use_gpu 参数名 use_gpu_list$(func_parser_value ${lines[40]}) # True|False 参数值列表 ... use_trt_key$(func_parser_key ${lines[44]}) # --use_tensorrt precision_list$(func_parser_value ${lines[45]}) # fp32|fp16 benchmark_value$(func_parser_value ${lines[49]}) # --benchmark脚本按多值参数用|分隔进行两两组合生成python 推理脚本 keyvalue 参数的完整命令并通过 shell 执行status_check收集每条命令的运行状态。从源码结构可以看出任意一行参数都可以修改——冒号前后均可按模型运行命令对应修改无需设置的参数置为null即可使其不生效若现有参数行不足以组建运行命令可将null:null预留行扩展为新的参数行。这正是 Jetson 端配置文件能够仅保留预测段、训练段全部置空却仍能被同一脚本正确解析的原因。5. 其他说明Jetson 端与 Linux 端的差异Jetson 端 TIPC 测试方法与 Linux 端基本一致仅根据不同硬件环境调整了部分参数。核心差异归纳如下维度Linux 端Jetson 端训练链条支持训练lite_train_lite_infer 等不支持训练仅测预测链条whole_infer预测硬件GPU/CPU 全量覆盖以 GPU 预测为主CPU 仅测不同线程数MKLDNN可开启CPU 不支持固定--enable_mkldnn:FalseTensorRTfp32/fp16/int8 可选必测 fp32、fp16 两种精度参数文件train_infer_python.txtmodel_linux_gpu_normal_normal_infer_python_jetson.txtinfer_params 段与 Linux 端同构关于 TIPC 接入的详细说明日志规范化格式、AutoLog 初始化参数、训练/评估/导出/预测各段参数表的完整介绍、params.txt参数汇总与调试技巧等请参考 Linux GPU/CPU 基础训练推理测试开发规范。此外可在当前仓库中继续查阅以下资源加深理解TIPC 各环境测试开发文档索引docs/tipc_test/README.mdTIPC 接入的仓库模板目录骨架与运行说明community/repo_template/test_tipc参数配置文件完整模板含 train/eval/infer 三段docs/tipc/train_infer_python/template/test/train_infer_python.txt参数解析工具函数实现docs/tipc/train_infer_python/template/test/common_func.sh自动化测试脚本实现docs/tipc/train_infer_python/template/test/test_train_inference_python.sh。调试接入问题时规范还给出了三个实用技巧一是将test_train_inference_python.sh中的eval改为echo即不运行指令而是打印要运行的指令便于核对命令组建是否正确二是功能测试时先单独运行命令确认功能正常后再接入自动化测试三是 shell 中对空格的使用非常严格前后不要加空格params.txt 中冒号前后也不要随意加空格。赞分享人工智能深度学习计算机视觉NLP语音【免费下载链接】modelsOfficially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.项目地址https://gitcode.com/gh_mirrors/mo/models点击查看免费下载相关推荐Linux 端飞桨基础训练推理功能测试TIPC开发与实战指南Linux 端飞桨基础训练推理功能测试TIPC开发与实战指南 飞桨训推一体全流程Training and Inference Pipeline Crite人工智能深度学习计算机视觉NLP语音飞桨 PaddleOCR TIPC 测试环境搭建全指南CUDA/CUDNN/TensorRT 与 Docker/Python 双方案飞桨 PaddleOCR TIPC 测试环境搭建全指南CUDA/CUDNN/TensorRT 与 Docker/Python 双方案 本指南围绕 Paddle人工智能计算机视觉OCR深度学习大模型RAG飞桨 TIPC 训推一体全流程测试从模型训练到推理部署的自动化 CI/CE 接入指南飞桨 TIPC 训推一体全流程测试从模型训练到推理部署的自动化 CI/CE 接入指南 飞桨PaddlePaddle除了提供基本的模型训练与预测能力还构建人工智能深度学习计算机视觉NLP语音上一篇sqlx气候变化适应构建韧性系统的数据库策略下一篇免费开源定性数据分析工具QualCoder完整入门指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表