免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Windows GPU/CPU 训练推理一体化(TIPC)测试开发规范:从 CI/CE 监控到自动化接入实战

Windows GPU/CPU 训练推理一体化(TIPC)测试开发规范:从 CI/CE 监控到自动化接入实战 人工智能深度学习计算机视觉NLP语音【免费下载链接】modelsOfficially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.项目地址https://gitcode.com/gh_mirrors/mo/models点击查看免费下载导读本文基于飞桨训推一体全流程Training and Inference Pipeline Criterion简称 TIPC在 Windows 端的测试开发规范系统讲解如何为模型仓库建立自动化测试 CI/CE 机制在框架代码更新后自动监控模型的训练、动转静、推理预测是否走通以及预测速度与精度是否达标。读者将掌握 Windows GPU/CPU 双端的基础训练推理测试链条设计、prepare.sh 数据准备、AutoLog 日志规范化以及 test_train_inference_python.sh 参数化自动化测试的完整接入方法。规范原文见 Windows GPU 基础训练推理测试开发规范其详细接入流程与 Linux GPU/CPU 基础训练推理测试开发规范 一致本文将以 Windows 规范为主干结合 Linux 规范的细节与当前仓库中的 TIPC 仓库模板 展开纵深讲解。一、总览Windows 端 TIPC 是什么飞桨除了提供基本的模型训练和预测能力还提供了支持多端多平台的高性能推理部署工具。TIPC 规范的核心目标是提供一套统一的训练推理打通信息与一键测试工具方便用户查阅每个模型在训练→模型转换→推理部署全流程中的打通情况并可直接执行测试。在 Windows 端这一规范覆盖Windows GPU 与 Windows CPU两种硬件环境的基础训练推理测试同时可作为后续 Windows 上更多部署形态如 Paddle Lite、Paddle Serving接入的起点。1.1 背景为框架迭代建立 CI/CE 自动化监控创建自动化测试 CI 机制的初衷是监控框架代码更新可能导致的模型训练、预测报错、性能下降等问题。当框架发布新版本后需要持续确认框架更新后套件模型的正产训练、量化训练、裁剪训练、评估、动转静、推理预测是否能正常走通例如 API 不兼容升级带来的报错框架更新后套件模型的预测速度是否合理框架更新后套件模型训练的精度是否达标或训练 loss 是否出现 nan其他回归问题。为此需要在套件中加入运行脚本且不影响套件正常运行完成模型的自动化测试并把训练、预测 TIPC 测试挂入框架的 CI 和 CE 中提升 PR 合入质量。规范定义了 4 种可建立的 CI/CE 机制每种机制都有明确的运行时间和监控要点机制数据规模时间约束监控要点lite_train_lite_infer少量数据训练 少量数据预测单模型 15 分钟内训练跑通、batch_cost 正常、显存占用合理、固定 seed 后 loss 一致、动转静→inference 预测跑通且资源占用合理lite_train_whole_infer少量数据训练 全量数据预测单模型 30 分钟内同上且预测速度符合预期whole_train_whole_infer全量数据训练 全量数据预测周级别训练精度达到既定值预测结果正确、速度与资源占用符合预期whole_infer不训练全量数据走通开源模型评估、预测单模型 30 分钟内动转静→inference 预测跑通预测结果正确、速度与精度符合设定预期注意由于 CI 有时间限制测试时需要通过构建一个很小的数据集来控制运行时间。这也是 prepare.sh 中针对不同模式下载不同规模数据的原因。1.2 TIPC 自动化测试链条与测试点本规范测试的链条由若干模块两两组合而成可以根据模型开发规范适当删减链条。规范原文给出的链条示意图如下链条上各模块的具体测试点如下Windows 端GPU 和 CPU 都需要验证模型训练方面必选单机单卡单机多卡模型压缩方面可选裁剪训练在线量化训练离线量化飞桨模型转换必选动转静动态图转静态图导出 inference modelPaddle Inference 预测部署方面必选Windows GPU不同 batchsize、是否开启 TensorRT、不同预测精度FP32、FP16、INT8的运行状态Windows CPU不同 batchsize、是否开启 MKLDNN、不同预测精度FP32、FP16、INT8的运行状态对比 Linux 规范可以发现Windows GPU/CPU 的推理测试在 Linux 端规范中原本是可选项而在 Windows 规范 中已提升为必选体现了 Windows 平台在飞桨推理部署体系中的重要地位。1.3 文本检测样板间概览规范以 PaddleOCR 的文本检测模型为例提供了样板间可跑通 1.2 节提到的所有测试链条并覆盖 1.1 节背景中的 4 种 CI/CE 机制。样板间位于 PaddleOCR dygraph 分支下的 test_tipc 文件夹其中与本规范相关的文件组织如下test_tipc/ ├── configs/ # 自动化测试需要的配置文件和参数文件 │ └── ppocr_det_mobile/ # ppocr 检测模型 mobile 版本的配置文件夹 │ ├── det_mv3_db.yml # 训练用 yml 文件 │ └── train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt # Windows 端参数配置文件 ├── prepare.sh # 以参数配置文件为输入自动下载数据、预训练模型、预测模型 ├── test_train_inference_python.sh # 自动化测试脚本按参数配置组建并运行不同链条命令 └── readme.md # 该代码库测试脚本运行说明在当前仓库中community/repo_template/test_tipc 就是这套结构的通用化模板configs/your_model_name/train_infer_python.txt存放参数配置prepare.sh负责数据与模型准备test_train_inference_python.sh负责自动化执行common_func.sh提供参数解析公共函数results/存放用于预测结果比对的基准 txt 文件。二、TIPC 规范接入流程Windows 端 TIPC 规范接入包含三个步骤与 Linux 端基础链条接入规范一致详见 train_infer_python.md准备数据编写 prepare.sh 自动下载训练数据、预测数据与预训练模型规范化输出日志训练与 inference 预测均输出统一格式的日志供自动化脚本解析与判定编写自动化测试代码通过参数配置文件txt驱动 test_train_inference_python.sh 组合并执行命令。2.1 准备数据prepare.sh不同模型所需的训练、预测数据和预训练模型各不相同因此需要一个自动化的下载准备脚本。prepare.sh 在命令运行前根据**运行模式MODE和模型名称model_name**完成以下工作预训练模型下载并解压训练、预测数据下载并解压准备编译好的或待编译的第三方库。prepare.sh 的使用方式为bash test_tipc/prepare.sh 配置文件路径 运行模式例如文本检测样板间bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt lite_train_lite_infer运行模式共有 7 种分属三类场景训练/预测相关测试lite_train_lite_infer少量数据集训练、预测打通验证lite_train_whole_infer少量数据训练、全量数据预测验证预测速度是否合理whole_infer不训练、全量数据预测走通开源模型评估与动转静检查 inference model 预测时间和精度whole_train_whole_infer全量数据训练、全量数据预测验证训练精度、预测精度与预测速度。C 推理/服务化部署相关cpp_infer测试 C inference 逻辑不训练、全量数据预测server_infer测试 Paddle Serving 部署 inference 能力不训练、全量数据预测。离线量化相关klquant_infer测试离线量化功能和量化 inference model 的预测速度。prepare.sh 内部以 MODE 分支组织下载逻辑例如lite_train_lite_infer模式下会下载小规模训练数据并建立软链确保训练能通过配置文件中的默认数据路径加载if [ ${MODE} lite_train_lite_infer ];then # 下载预训练模型 wget -nc -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams --no-check-certificate # 下载 lite 训练数据并解压、建软链 wget -nc -P ./train_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015_lite.tar --no-check-certificate cd ./train_data/ tar xf icdar2015_lite.tar ln -s ./icdar2015_lite ./icdar2015 cd ../ fi接入要点Tipsprepare.sh 通过解析配置文件中的model_name等字段区分不同模型接入新模型时需要自行修改 model_name 判断条件与下载内容不同模式下下载的数据文件命名可能不一致可通过ln -s创建软链确保训练时能通过默认数据路径加载到数据例如whole_infer模式下会按model_name分别下载对应的训练模型与 inference 模型如ch_ppocr_mobile_v2.0_det_train.tar、ch_ppocr_mobile_v2.0_det_infer.tar及配套小数据集。2.2 规范化输出日志自动化测试需要从日志中解析出稳定的关键指标因此训练与预测日志都必须规范化。2.2.1 训练日志规范训练日志除打印 loss、精度等信息外还必须包含以下字段便于开发与测试人员快速定位是模型计算慢还是读数据慢reader_cost1 个 Step 数据加载用时秒。N 个 Step 打印 1 条日志时取平均值建议但不强制使用 DataLoader 而非 DataFeederbatch_cost1 个 Step 训练用时秒batch_cost reader_cost 前向计算时间ips单卡每秒处理的样本数单位如 images/sec、sequences/sec、tokens/sec、words/sec、frames/secsamples上次打印到本次打印之间新完成训练的样本数量适用于每个 Step 样本数可能不同的 NLP 类模型。最终日志期望格式..., ... , loss: 0.12345, avg_reader_cost: 0.12345 sec, avg_batch_cost: 0.12345 sec, avg_samples: 100, avg_ips: 0.12345 images/sec各指标算法假设每 N 个 Step 打印一次每 Step reader 用时为R1...Rn、训练用时T1...Tn、单卡 batchsize 为S1...Snavg_reader_cost sum(R1, R2,...Rn) / N avg_batch_cost avg_reader_cost sum(T1, T2,...Tn) / N avg_samples sum(S1, S2,...Sn) / N avg_ips samples / batch_cost实现时在训练循环中用time.time()分别统计数据加载与exe.run()执行的耗时并在打印周期内累计求均值即可PaddleOCR 的 tools/program.py 中有对应参考实现。2.2.2 inference 日志规范AutoLog不同飞桨模型的 Paddle Inference 预测输出格式各不相同且信息不够完善。为了统一标准、减少对业务代码的改动规范引入AutoLog工具包用于统计预测过程中的内存/显存占用、预测时间等信息并格式化输出。AutoLog 安装方式git clone https://github.com/LDOUBLEV/AutoLog cd AutoLog pip3 install -r requirements.txt python3 setup.py bdist_wheel pip3 install ./dist/auto_log-1.0.0-py3-none-any.whl代码接入共分四步初始化 AutoLogger 类传入模型名称、模型精度、batch_size、输入 shape、日志保存路径、inference 配置用于获取 enable_mkldnn、enable_tensorrt 等信息、PID、进程名与 GPU id。AutoLogger 主要初始化参数如下参数说明model_namestring模型名称model_precisionstring模型精度fp32 / fp16 / int8batch_sizeint预测 batch_sizedata_shapearray/list输入 shape动态 shape 可设为dynamic_shapesave_pathstring日志保存路径可为 Noneinference_configPaddle inference Config用于获取 mkldnn、tensorrt 等配置信息pidslist当前进程 PID为 None 时自动获取process_namestring按进程名获取 PID如 Pythongpu_idsstring使用的 GPU idtime_keyslist时间戳默认为 preprocess_time / inference_time / postprocess_timewarmupintwarmup 次数前 N 次预测不计入统计logger自定义 logger为 None 时类内自动创建预测耗时打点在模型预测中分别统计前处理、预测、后处理时间写入 AutoLogger 的preprocess_time、inference_time、postprocess_time打印输出信息完成循环预测后调用report()输出日志。report() 是必须调用的否则统计内存和显存占用的子进程不会关闭输出日志会包含 Paddle 版本号与 commit、运行硬件CPU/GPU、运行配置IR 优化、TRT、MKLDNN、线程数、模型名称、数据信息batch size、数据量、性能信息CPU 内存、GPU 显存/利用率、各阶段平均预测时间等预测结果正确性校验将每个预测样本的结果FP32 与 FP16 精度下各保存一份打印到日志或 TXT 文件再通过 compare_results.py 之类的脚本与预存基准结果逐一比对验证预测是否正确。误差说明FP32 精度预测结果在 CPU 与 GPU 上都不允许有太大误差但 FP16 半精度会导致结果不稳定甚至精度下降例如 CPU 开 MKLDNNFP16 与 GPUTensorRTFP16 的结果可能不同比对半精度结果时应预留更合理的误差范围。三、编写自动化测试代码自动化测试由三个文件协作完成各司其职参数配置文件txt配置测试哪些功能如分布式训练、混合精度训练、不同预测精度等prepare.sh负责测试前的数据与模型准备test_train_inference_python.sh根据 txt 参数配置组合出不同运行指令并执行。3.1 训练接入自动化测试虽然不同模型的训练运行方式差异较大但训练命令都可以拆分为三个部分python run_script set_configs例如 PaddleOCR 文本检测模型的训练命令python3.7 tools/train.py -c configs/det/det_mv3_db.yml -o Global.pretrained_model./pretrain_models/ Global.use_gpuTrue Global.auto_castFalse Global.epoch_num10 Global.save_model_dir./test/output/其中python3.7对应 python 部分tools/train.py -c configs/det/det_mv3_db.yml -o对应 run_script其余Global.*参数对应 set_configs。参数化后写入 txt 文件由 test_train_inference_python.sh 解析并组装出完整命令通过eval $cmd执行。以样板间ppocr_det_mobile/train_infer_python.txt为例前 22 行为训练相关参数各关键行含义如下行号参数含义与设置方式2model_name:ocr_det模型区别性名称prepare.sh 据此区分模型下载不同数据3python:python3.7Python 版本可改为 python3、python3.6 等4gpu_list:0|0,1GPU 列表0表示 0 号卡0,1表示 0/1 卡分布式训练多配置用|分隔5Global.use_gpu:True|True是否使用 GPU与 gpu_list 配置一一对应无此参数可设 null6Global.auto_cast:null混合精度训练开关测试混合/非混合精度可设True|False7Global.epoch_num:lite_train_lite_infer1|whole_train_whole_infer300各模式下的 epoch或 iter数按模式分别设置8Global.save_model_dir:./output/模型保存路径参数修改:前的关键字9Train.loader.batch_size_per_card:lite_train_lite_infer2|whole_train_whole_infer4各模式下 batch_size10Global.pretrained_model:null预训练模型加载参数11train_model_name:latest训练产出的模型文件名各模型命名不一需显式指定以便正确加载12train_infer_img_dir:./train_data/icdar2015/text_localization/ch4_test_images/训练后执行预测的数据路径不需要可设 null13null:null预留参数位可按params_key:params_value扩展15trainer:norm_train|pact_train要测试的 trainer 类型16norm_train:tools/train.py -c configs/det/det_mv3_db.yml -o正常训练的运行脚本17pact_train:deploy/slim/quantization/quant.py -c ...在线量化训练运行脚本不测试设 null18fpgm_train:deploy/slim/prune/sensitivity_anal.py -c ...裁剪训练运行脚本不测试设 null19distill_train:null蒸馏训练运行脚本不测试设 null20-21null: null预留行为后续扩展功能做准备修改原则:前后均可按模型运行命令修改无需设置的参数设为null:null不会生效train_params等分隔行无需修改。若训练参数行数不足以组建运行命令可把部分参数放进默认训练配置文件或扩展null:null预留行。3.2 评估接入自动化测试评估用于检验训练精度在 txt 第 23-26 行eval_params段设置。评估顺接训练进行因此训练参数对评估同样生效无需额外设置参数且评估会自动加载训练产出的模型。若不希望评估设置为eval_params eval:null null:null ##3.3 inference 预测接入自动化测试inference 相关参数位于 txt 第 27-51 行关键参数如下行号参数含义28Global.save_inference_dir:./output/导出 inference model 的保存路径参数29Global.pretrained_model:导出时加载模型的参数30norm_export:tools/export_model.py -c ...正常训练模型的导出脚本31quant_export:...量化模型导出脚本不测试设 null32fpgm_export:...裁剪模型导出脚本33distill_export:null蒸馏模型导出脚本37infer_model:./inference/ch_ppocr_mobile_v2.0_det_infer/infer 模式下加载的模型路径38infer_export:null是否对第 37 行模型执行动转静null 表示不执行39infer_quant:False第 37 行模型路径是否为量化模型40inference:tools/infer/predict_det.pyinference 执行脚本41--use_gpu:True|False是否使用 GPU其他模型可能是 device 参数多配置用|分隔42--enable_mkldnn:True|False是否开启 MKLDNN43--cpu_threads:1|6CPU 线程数可设置多值测试不同线程下的速度与精度44--rec_batch_num:1batch_size 参数45--use_tensorrt:False|True是否开启 TensorRT46--precision:fp32|fp16|int8开启 TRT 后的预测精度47--det_model_dir:加载 inference 模型路径的参数48--image_dir:./inference/ch_det_data_50/all-sum-510/infer 模式下的预测数据路径49--save_log_path:nullAutoLog 保存日志路径默认用重定向保存日志可设 null50--benchmark:True是否开启 AutoLog 统计51null:null扩展参数位注意表中—实为--实为英文|。inference 大多通过 argparse 传参样板间的完整预测命令形如python3.7 tools/infer/predict_det.py --use_gpuTrue --use_tensorrtFalse --precisionfp32 --det_model_dir./test/output/infer --rec_batch_num1 --image_dir./ch_det_data_50/all-sum-510 --save_log_path./test/output由于自动化测试希望链条覆盖更全面带多值的参数会按笛卡尔组合生成多条命令例如# CPU开启 mkldnn 1 线程 1 batchsize python3.7 tools/infer/predict_det.py --enable_mkldnnTrue --cpu_threads1 --rec_batch_num1 # CPU开启 mkldnn 6 线程 1 batchsize验证线程数对速度的影响 python3.7 tools/infer/predict_det.py --enable_mkldnnTrue --cpu_threads6 --rec_batch_num1 # GPU开启 TRT fp16 精度预测 python3.7 tools/infer/predict_det.py --use_gpuTrue --use_tensorrtTrue --precisionfp16这正是 Windows 规范中不同 batchsize、是否开启 TensorRT/MKLDNN、不同预测精度FP32/FP16/INT8的运行状态得以批量验证的实现机制。调试技巧将 test_train_inference_python.sh 中的eval临时改为echo即可只打印要运行的指令而不执行便于核对命令组装是否正确功能测试时先单独运行命令确保各环节功能正常shell 对空格非常敏感前后不要加空格。四、common_func.sh 公共函数与 params.txt 参数汇总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 sizestatus_check()状态检查上条指令返回 0 视为成功否则失败成败均记录到 results.log脚本执行时先按行读取参数文件如awk NR1, NR51{print} $FILENAME再逐行用上述函数解析model_name$(func_parser_value ${lines[1]}) python$(func_parser_value ${lines[2]}) gpu_list$(func_parser_value ${lines[3]}) train_use_gpu_key$(func_parser_key ${lines[4]}) train_use_gpu_value$(func_parser_value ${lines[4]}) epoch_key$(func_parser_key ${lines[6]}) epoch_num$(func_parser_params ${lines[6]}) ...func_set_params的典型行为# keybatch_size, value10 → 输出 batch_size10 # keybatch_size, valuenull → 输出空字符命令中该参数不生效所有参数最终组合为一条完整命令python 对应解析出的版本run_train 对应norm_train/quant_train等 trainer 后的执行脚本配合各keyvalue参数即得到可执行的训练/预测命令。4.2 params.txt 参数结构汇总一个 txt 文件即可管理同一模型要测试的全部组合。以 repo_template 模板 为骨架params.txt 整体分为三段train_params # 训练参数1-22 行 eval_params # 评估参数23-26 行 infer_params # inference 参数27-51 行接入新模型时的通用流程按自身训练/评估/预测命令把参数填入对应段无对应功能的行设null:null需要更多参数时扩展预留行然后以bash test_tipc/prepare.sh 配置 模式准备数据再以bash test_tipc/test_train_inference_python.sh 配置 模式执行测试。运行后可在test_tipc/output目录下查看各链条日志如norm_train_gpus_0_autocast_null/results_python.log中逐条记录每条指令的运行状态Run successfully with xxx/Run failed with xxx可据此快速定位失败环节。五、其他说明Windows 端 TIPC 的测试方法、接入步骤与详细规范均与 Linux 端保持一致有关 TIPC 接入的完整说明请参考 Linux GPU/CPU 基础训练推理测试开发规范Windows 端专用参数配置文件按train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt的命名约定训练硬件环境_是否多机_是否混合精度_预测模式_语言_预测硬件环境组织存放于configs/model_name/目录下。需要说明的是当前仓库中 Windows 端 TIPC 功能测试入口文档docs/tipc/windows_train_infer_python/README.md标注为 coming soonWindows 规范的实际接入仍以本文所依据的 开发规范文档 为准并可直接参考仓库内 TIPC 模板 的目录结构与运行方式落地实施。赞分享人工智能深度学习计算机视觉NLP语音【免费下载链接】modelsOfficially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.项目地址https://gitcode.com/gh_mirrors/mo/models点击查看免费下载相关推荐飞桨 TIPC Linux GPU/CPU 基础训练推理测试开发规范从 CI/CE 监控到一键训推链路接入飞桨 TIPC Linux GPU/CPU 基础训练推理测试开发规范从 CI/CE 监控到一键训推链路接入 飞桨训推一体全流程Training and In人工智能深度学习计算机视觉NLP语音飞桨 TIPC 训推一体全流程测试从模型训练到推理部署的自动化 CI/CE 接入指南飞桨 TIPC 训推一体全流程测试从模型训练到推理部署的自动化 CI/CE 接入指南 飞桨PaddlePaddle除了提供基本的模型训练与预测能力还构建人工智能深度学习计算机视觉NLP语音飞桨训推一体 Paddle2ONNX 测试开发规范模型转换到自动化 CI/CE 接入实战飞桨训推一体 Paddle2ONNX 测试开发规范模型转换到自动化 CI/CE 接入实战 本文是飞桨PaddlePaddle训推一体TIPC自动化测试人工智能深度学习计算机视觉NLP语音上一篇NVIDIA Profile Inspector完全指南5个步骤解锁显卡隐藏性能的免费神器下一篇NVIDIA Profile Inspector终极指南解锁显卡隐藏性能的免费神器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表