- 人工智能
- 深度学习
- 计算机视觉
- NLP
- 语音
【免费下载链接】models
Officially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.
飞桨训推一体全流程(Training and Inference Pipeline Criterion,TIPC)提供了统一的模型训练、模型压缩、动转静与 Paddle Inference 预测部署测试框架,用于一键验证每个模型的训练推理打通情况。本文以 PaddleOCR 文本检测模型样板间为主线,系统讲解 macOS CPU 环境下 TIPC 基础训练推理链条的开发接入规范、参数配置文件逐行含义与自动化测试执行方式,读者完成后即可为自己的模型编写 macOS 端 TIPC 参数配置并跑通"CPU 训练 → 动转静 → CPU inference 预测"全链路。
本文档规范基于当前仓库 development_specification_docs/macos_train_infer_python.md 展开,TIPC 测试脚本的通用模板可参考 community/repo_template/test_tipc。
1. 总览与背景
飞桨除了提供基本的模型训练和预测能力,还提供了支持多端多平台的高性能推理部署工具。TIPC 就是围绕"训推一体"目标设计的规范与测试工具:它既是一套信息汇总框架,方便用户查阅每种模型的训练推理部署打通情况;也是一套可一键执行的自动化测试机制,用于在 CI/CE 中持续监控框架代码更新可能引发的模型训练、预测报错、性能下降等问题。
1.1 自动化测试要监控什么
TIPC 自动化测试主要监控以下内容:
- 框架更新后,套件模型的正常训练、量化训练、裁剪训练、评估、动转静、推理预测是否能正常走通(例如 API 的不兼容升级);
- 框架更新后,套件模型的预测速度是否合理;
- 框架更新后,套件模型训练的精度是否达标,或训练 loss 是否出现 nan 等问题;
- 其他相关问题。
为此,需要在套件中加入不影响套件正常运行的运行脚本,将模型的训练、预测 TIPC 链路接入框架的 CI 和 CE,从而提升 PR 合入质量。
1.2 四种 CI/CE 机制
规范定义了四类可建立的 CI/CE 机制,覆盖"少数据快速验证"与"全量数据严谨验证"两个层次:
lite_train_lite_infer(少量数据训练 + 少量数据预测,单模型 15 分钟内)
- 保证训练跑通,训练速度正常(监控 batch_cost);
- 训练资源占用合理(监控显存);
- 保证训练可复现,loss 曲线收敛正常(固定 seed 后 loss 一致);
- 保证训练后模型动转静 → inference 预测跑通,预测资源占用合理(监控显存、内存)。
lite_train_whole_infer(少量数据训练 + 全量数据预测,单模型 30 分钟内)
- 训练跑通、速度正常、资源占用合理、可复现(要求同上);
- 预测速度符合预期,预测资源占用合理。
whole_train_whole_infer(全量数据训练 + 全量数据预测,周级别)
- 训练跑通、速度正常、训练精度达到既定值;
- 预测结果正确、预测速度符合预期、预测资源占用合理。
whole_infer(不训练,全量数据走通开源模型评估与预测,单模型 30 分钟内)
- 直接对开源/预训练模型做动转静 → inference 预测,验证预测结果正确性、预测速度与资源占用。
注:由于 CI 有时间限制,测试时需要限制运行时间,因此必须构建一个很小的数据集来完成测试。
1.3 TIPC 自动化测试链条与 MAC 端必选模块
TIPC 测试链条中,相邻两个模块之间是两两组合关系,可根据模型开发规范适当删减链条。针对macOS CPU 环境,规范明确:
- 模型训练方面(MAC CPU 训练):CPU 训练(必选);
- 模型压缩方面(MAC CPU 训练):裁剪训练(可选)、在线量化训练(可选)、离线量化(可选);
- 飞桨模型转换(动转静):必选;
- Paddle Inference 预测部署方面:MAC CPU 上不同 batchsize、不同 CPU 线程数的运行状态(必选)。
与 Linux 规范(参见 train_infer_python.md)相比,MAC 端的核心差异在于:不支持 GPU 训练,且 CPU 预测不支持开启 MKLDNN,因此 MAC 端只需要走通 CPU 训练 + CPU inference 预测链条即可。
1.4 文本检测样板间概览
规范以 PaddleOCR 文本检测模型为例提供样板间,可跑通上文所有测试链条并完成四种 CI/CE 机制。样板间中 test_tipc 文件夹与本规范相关的文件结构如下:
test_tipc/ ├── configs/ # 自动化测试需要的配置文件和参数文件 │ ├── ppocr_det_mobile/ # ppocr 检测模型 mobile 版本的配置文件和参数文件夹 │ │ ├── det_mv3_db.yml # 测试 mobile 版 ppocr 检测模型训练的 yml 文件 │ │ └── train_linux_cpu_normal_normal_infer_python_mac.txt # Mac 端测试 mobile 版 ppocr 检测模型的参数配置文件 ├── prepare.sh # 以参数配置文件为输入,完成数据、预训练模型、预测模型的自动下载 ├── test_train_inference_python.sh # 自动化测试脚本,以参数配置文件为输入,组建不同运行命令完成所有链条运行 └── readme.md # 测试脚本运行说明当前仓库中提供了可直接参考的通用模板目录 community/repo_template/test_tipc,其中包含prepare.sh、test_train_inference_python.sh、common_func.sh、configs/your_model_name/train_infer_python.txt参数文件占位以及 test_train_inference_python 使用文档。
2. TIPC 规范接入流程
MAC 端 TIPC 规范接入与 Linux 端基础链条接入规范一致,包含如下三个步骤:
- 准备数据;
- 规范化输出日志;
- 编写自动化测试代码。
2.1 准备数据(prepare.sh)
不同模型所需的训练、预测数据与预训练模型各不相同,因此需要一个自动化下载脚本prepare.sh,根据不同的运行模式和测试模型,完成以下功能:
- 预训练模型下载并解压;
- 训练、预测数据下载并解压;
- 准备编译好的第三方库等。
prepare.sh的使用方式为:
bash test_tipc/prepare.sh 配置文件路径 运行模式具体运行命令示例(Linux 规范中的用法,MAC 端一致):
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'lite_train_lite_infer'运行模式一共有 7 种,其中与训练/预测链条相关的 4 种为:
lite_train_lite_infer:少量数据集训练、预测打通验证;lite_train_whole_infer:少量数据训练,全量数据预测,验证训练模型预测速度是否合理;whole_infer:不训练,全量数据预测,走通开源模型评估、动转静,检查 inference model 预测时间和精度;whole_train_whole_infer:全量数据训练,全量数据预测,验证模型训练精度、预测精度与预测速度。
其余还有cpp_infer(C++ inference 逻辑测试)、server_infer(Paddle Server 部署能力测试)、klquant_infer(离线量化功能与量化 inference model 预测速度测试)三种模式,MAC 端主要关注前四种。prepare.sh会根据不同运行模式,配合从配置文件中解析得到的模型区分名称,下载不同的数据和训练模型用于后续测试。
Tips:
- 不同模式的区别在于训练和测试数据不同,若不同模式下载的数据文件名不一致,可通过
ln -s创建软链,确保训练时能通过配置文件中的默认数据路径加载到数据; - 接入自有模型时,
prepare.sh中的model_name判断条件以及下载内容代码需要自行修改,例如在whole_infer模式下,会根据解析出的model_name(如ocr_det)选择下载对应的数据和推理模型。
2.2 规范化输出日志
自动化测试依赖统一的日志输出格式,规范分为训练日志与 inference 日志两部分,详细要求可参考 Linux 规范文档 的 2.2 节,此处摘要如下:
- 训练日志:除打印 loss、精度等信息外,还须包含
reader_cost(1 个 Step 数据加载用时)、batch_cost(1 个 Step 训练用时,等于 reader_cost 加 forward 时间)、ips(单卡每秒处理样本数)、samples(两次打印之间新完成训练的样本数),用于快速定位是"模型计算慢"还是"读数据慢"; - inference 日志:除预测结果外,还须包含 Paddle 版本号及具体 commit、运行的硬件(CPU/GPU)、运行配置(是否开启 IR 优化、TRT、MKLDNN、线程数)、模型名称、数据信息(batch size、数据量)、性能信息(CPU 内存、GPU 显存与利用率、各阶段平均预测时间)、FP32/FP16 预测结果用于正确性校验。规范化输出可借助 AutoLog 工具包实现,并在循环预测结束后调用
report()输出日志并回收统计子进程。
2.3 编写自动化测试代码
自动化测试代码由三个文件组成,各司其职:
configs/[model]/[params_file].txt:参数配置文件,用于配置测试哪些功能(训练部分是否测试分布式训练、混合精度训练等);prepare.sh:负责测试前准备,自动下载数据、预训练模型、预测模型;test_train_inference_python.sh:自动化测试运行脚本,根据 txt 中的参数配置组合出不同的运行指令并执行。
运行脚本执行时通过common_func.sh中的工具函数解析参数,核心函数包括:func_parser_key(解析:前的部分)、func_parser_value(解析:后的部分)、func_set_params(组建key=value字符串,key 或 value 为 null 时返回空字符使参数不生效)、func_parser_params(解析与运行模式 MODE 相关的 epoch、batch size 参数)、status_check(状态检查,0 表示成功,失败与成功指令均写入 results.log)。
3. MAC 端 TIPC 训练参数配置
由于 MAC 端不支持 GPU 训练,并且 CPU 不支持开启 MKLDNN 进行预测,MAC 端仅需走通 CPU 训练和 CPU inference 预测链条。以 PaddleOCR 检测模型为例,MAC 端 TIPC训练链条参数配置文件内容如下:
===========================train_params=========================== model_name:ocr_det python:python gpu_list:-1 Global.use_gpu:False Global.auto_cast:null Global.epoch_num:lite_train_lite_infer=1|whole_train_whole_infer=300 Global.save_model_dir:./output/ Train.loader.batch_size_per_card:lite_train_lite_infer=2|whole_train_whole_infer=4 Global.pretrained_model:null train_model_name:latest train_infer_img_dir:./train_data/icdar2015/text_localization/ch4_test_images/ null:null ## trainer:norm_train|pact_train|fpgm_train norm_train:tools/train.py -c test_tipc/configs/det_mv3_db.yml -o Global.pretrained_model=./pretrain_models/MobileNetV3_large_x0_5_pretrained pact_train:deploy/slim/quantization/quant.py -c test_tipc/configs/det_mv3_db.yml -o fpgm_train:deploy/slim/prune/sensitivity_anal.py -c test_tipc/configs/det_mv3_db.yml -o Global.pretrained_model=./pretrain_models/det_mv3_db_v2.0_train/best_accuracy distill_train:null null:null null:null ## ===========================eval_params=========================== eval:null null:null ##3.1 训练参数逐行说明
| 参数 | 说明 | MAC 端取值含义 |
|---|---|---|
model_name:ocr_det | 模型标识名,也是 prepare.sh 中区分不同模型的名称 | 按实际模型命名 |
python:python | 运行 Python 解释器 | MAC 端一般直接使用系统python |
gpu_list:-1 | GPU 列表 | 设置为-1,表示不使用 GPU,在 CPU 上运行 |
Global.use_gpu:False | 是否使用 GPU | 设置为False,与gpu_list:-1配套,确保 CPU 训练 |
Global.auto_cast:null | 混合精度训练开关 | 不测试混合精度时置 null 不生效 |
Global.epoch_num:lite_train_lite_infer=1\|whole_train_whole_infer=300 | 不同模式下的 epoch 数 | 少量数据模式用 1 个 epoch,全量模式用 300 个 epoch |
Global.save_model_dir:./output/ | 模型保存目录 | 需修改:前的关键字以匹配实际参数 |
Train.loader.batch_size_per_card:lite_train_lite_infer=2\|whole_train_whole_infer=4 | 不同模式下的单卡 batch size | 少量数据模式为 2,全量模式为 4 |
Global.pretrained_model:null | 预训练模型加载路径 | 不需要加载时置 null |
train_model_name:latest | 训练后保存的模型文件名 | 用于正确加载训练产出模型 |
train_infer_img_dir:./train_data/icdar2015/... | 训练后执行预测的数据路径 | 不需要时置 null |
null:null | 预留参数行 | 可按params_key:params_value扩展 |
trainer:norm_train\|pact_train\|fpgm_train | 要测试的 trainer 组合 | MAC 端同样支持正常训练、在线量化训练(pact)、裁剪训练(fpgm),不测试的置 null |
norm_train/pact_train/fpgm_train | 对应训练运行脚本 | 与 Linux 端保持一致,如tools/train.py、deploy/slim/quantization/quant.py、deploy/slim/prune/sensitivity_anal.py |
distill_train:null | 蒸馏训练脚本 | 不测试时置 null |
核心要点:gpu_list参数设置为-1、use_gpu参数设置为False,即表示在 CPU 上运行;除此之外,MAC 端训练参数与其他平台保持一致。配置文件中的:前后不要随意加空格;若训练参数行数不足以组建运行命令,可将部分参数放在默认训练的配置文件中,或扩展null:null参数行,或修改test_train_inference_python.sh完成训练配置。
4. MAC 端 TIPC 预测参数配置
以 PaddleOCR 检测模型为例,MAC 端 TIPC预测链条参数配置文件内容如下:
===========================infer_params=========================== Global.save_inference_dir:./output/ Global.pretrained_model: norm_export:tools/export_model.py -c test_tipc/configs/det_mv3_db.yml -o quant_export:deploy/slim/quantization/export_model.py -c test_tipc/configs/det_mv3_db.yml -o fpgm_export:deploy/slim/prune/export_prune_model.py -c test_tipc/configs/det_mv3_db.yml -o distill_export:null export1:null export2:null inference_dir:null train_model:./inference/ch_ppocr_mobile_v2.0_det_train/best_accuracy infer_export:tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml -o infer_quant:False inference:tools/infer/predict_det.py --use_gpu:False --enable_mkldnn:False --cpu_threads:1|6 --rec_batch_num:1 --use_tensorrt:False --precision:fp32 --det_model_dir: --image_dir:./inference/ch_det_data_50/all-sum-510/ null:null --benchmark:True null:null4.1 预测参数逐行说明
| 参数 | 说明 | MAC 端取值含义 |
|---|---|---|
Global.save_inference_dir:./output/ | 导出 inference model 的保存目录 | 主要关注参数关键字,路径可自定义 |
Global.pretrained_model: | 导出时加载模型的参数 | 按实际模型填写 |
norm_export/quant_export/fpgm_export/distill_export | 对应正常/量化/裁剪/蒸馏训练模型的导出脚本 | 不测的置 null |
export1/export2 | 预留位置 | 无需理会 |
train_model:./inference/ch_ppocr_mobile_v2.0_det_train/best_accuracy | 加载训练/开源模型进行动转静 | 按实际模型路径填写 |
infer_export | 是否对上述模型执行动转静导出 | 置 null 表示不执行 |
infer_quant:False | 上述模型路径是否为量化模型 | MAC 端一般为 False |
inference:tools/infer/predict_det.py | inference 执行脚本 | 按模型实际预测脚本填写 |
--use_gpu:False | 是否使用 GPU 预测 | MAC 端必须为 False |
--enable_mkldnn:False | 是否开启 MKLDNN | MAC 端 CPU 不支持 MKLDNN,必须为 False |
--cpu_threads:1\|6 | CPU 线程数 | 多个值用\|隔开,分别验证不同线程下的预测速度与精度 |
--rec_batch_num:1 | 预测 batch size | 可按需设置多个值 |
--use_tensorrt:False | 是否开启 TensorRT | MAC 端不支持,必须为 False |
--precision:fp32 | 预测精度 | MAC CPU 上以 fp32 为主 |
--det_model_dir: | 加载 inference model 路径的参数 | :后无需设置 |
--image_dir:./inference/ch_det_data_50/all-sum-510/ | 预测数据路径 | 按实际数据路径填写 |
--benchmark:True | 是否开启 AutoLog 统计 | 开启后可规范化输出预测日志 |
null:null | 扩展参数 | 可按params_key:params_value格式扩展 |
核心要点:在参数文件中,将 TensorRT、MKLDNN 相关参数--use_tensorrt、--enable_mkldnn均设置为 False,同时--use_gpu也设置为 False。多值参数(如--cpu_threads:1|6、--rec_batch_num:1)会被组合出更多测试组合,例如"开启 MKLDNN + 1 线程 + 1 batchsize"、"开启 MKLDNN + 6 线程 + 1 batchsize"等不同配置下的预测速度对比;MAC 端由于 MKLDNN 关闭,重点考察不同 CPU 线程数与 batch size 组合下的推理表现。
5. MAC 端 TIPC 测试执行流程
MAC 端 TIPC 测试方法同 Linux 端,仅仅根据不同硬件环境调整了部分参数。接入完成后,通过两行命令即可完成单项功能测试(以通用模板 community/repo_template/test_tipc 中的占位配置为例):
# 第一步:准备数据与模型(配置文件选择 + 模式选择) bash test_tipc/prepare.sh configs/[model_name]/[params_file_name] [Mode] # 第二步:运行自动化测试 bash test_tipc/test_train_inference_python.sh configs/[model_name]/[params_file_name] [Mode]MAC 端典型执行示例:
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_linux_cpu_normal_normal_infer_python_mac.txt 'lite_train_lite_infer' bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_linux_cpu_normal_normal_infer_python_mac.txt 'lite_train_lite_infer'test_train_inference_python.sh会依次解析参数配置文件,先读取第 1 行到第 51 行的参数(可通过dataline=$(awk 'NR==1, NR==51{print}' $FILENAME)方式获取),再用func_parser_params和func_parser_value等函数逐行解析,最后通过eval $cmd执行组建出的完整命令。测试产出 log 后,可进一步用compare_results.py对比 log 中的预测结果与预存在 results 目录下的基准结果,判断预测精度是否符合预期。
5.1 调试技巧
- 将
test_train_inference_python.sh中的eval改为echo,即可只打印将要运行的命令而不真正执行,便于快速检查命令组建是否正确; - 功能测试时,先单独运行组建出的命令确认功能正常,再接入自动化脚本;
- shell 对空格使用非常严格,
=前后不要加空格,配置文件中:前后同样不要随意加空格。
6. 其他说明与适用边界
- MAC 端 TIPC 测试方法与 Linux 端保持一致,仅根据不同硬件环境调整了部分参数(
gpu_list为-1、use_gpu为False、关闭 MKLDNN 与 TensorRT),其余训练/导出/预测脚本与参数均沿用 Linux 端配置; - 模型压缩(裁剪、在线量化、离线量化)、蒸馏等为可选链条,MAC 端只需保证 CPU 训练(必选)、动转静(必选)、MAC CPU 上不同 batchsize/不同 CPU 线程数的 inference 预测(必选)三条主链路的可运行性;
- 接入流程的完整细节(prepare.sh 编写、训练日志与 inference 日志规范化、AutoLog 使用、params.txt 全部参数汇总等)请参考 Linux GPU/CPU 基础训练推理测试开发规范;
- TIPC 测试脚本的通用可复用模板(含
prepare.sh、common_func.sh、test_train_inference_python.sh及配置文件占位)存放于 community/repo_template/test_tipc,可对照仓库源码理解参数解析与命令组建的具体实现。
- 人工智能
- 深度学习
- 计算机视觉
- NLP
- 语音
【免费下载链接】models
Officially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.
相关推荐
飞桨 TIPC Linux GPU/CPU 基础训练推理测试开发规范:从 CI/CE 监控到一键训推链路接入
飞桨 TIPC Linux GPU/CPU 基础训练推理测试开发规范:从 CI/CE 监控到一键训推链路接入 飞桨训推一体全流程(Training and In
人工智能深度学习计算机视觉NLP语音Linux 端飞桨基础训练推理功能测试(TIPC)开发与实战指南
Linux 端飞桨基础训练推理功能测试(TIPC)开发与实战指南 飞桨训推一体全流程(Training and Inference Pipeline Crite
人工智能深度学习计算机视觉NLP语音飞桨 TIPC 训推一体全流程测试指南:基于 Linux GPU/CPU 基础训练推理的一键化验证方案
飞桨 TIPC 训推一体全流程测试指南:基于 Linux GPU/CPU 基础训练推理的一键化验证方案 导读 本文围绕飞桨(PaddlePaddle) 训推一体
人工智能深度学习计算机视觉NLP语音
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考