PaddleOCR TIPC Linux 端补充训练功能测试完全指南:覆盖蒸馏、PACT 量化、FPGM 裁剪与自定义 OP 的训练链路验证
PaddleOCR TIPC Linux 端补充训练功能测试完全指南覆盖蒸馏、PACT 量化、FPGM 裁剪与自定义 OP 的训练链路验证【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR导读本文面向在 PaddleOCR 仓库中需要快速验证训练到预测全流程是否走通的开发者系统讲解 TIPCTest Infrastructure for PaddlePaddle飞桨训练预测一体化测试在 Linux 端的补充训练功能测试。它以 test_train_python.sh 为唯一主程序通过参数化配置文件驱动基于 Python 的模型训练、评估并额外覆盖带共享权重的模型结构Siamese/蒸馏、自定义 OP自定义 ReLU、PACT 量化训练与FPGM 裁剪训练等基础训练链条之外的进阶场景。读完本文你将掌握补充测试的两种运行模式、配置文件的字段语义、量化与裁剪的调用方式、多机多卡配置方法以及背后 train.py 与 slim 组件的源码级工作原理。一、补充训练测试的定位与测试链条TIPC 的 Linux 端基础训练预测功能测试用于验证基于 Python 的模型训练、评估等基本功能而补充训练功能测试即本目录 test_tipc/supplementary 所承载的内容则面向更复杂的训练形态。原文档明确指出其测试链条主要覆盖两类内容带共享权重、自定义 OP 的模型正常训练流程——例如 Siamese 双塔共享结构、通过 JIT 编译加载的自定义 ReLU 算子slim 相关功能训练流程——包括 PACT 量化感知训练QAT与 FPGM 滤波器裁剪。测试链条如上图所示从配置文件解析训练参数 → 按模式生成具体训练命令 → 执行训练并记录状态 → 将每条命令的成功/失败状态写入结果日志。整个链条通过 common_func.sh 提供的解析与状态检查函数串联与仓库根目录的test_tipc体系如 test_train_inference_python.sh保持一致的设计风格但针对补充训练场景单独维护了一套配置文件与示例模型CIFAR-100 分类任务上的 MobileNetV3 系列。二、环境与依赖安装补充训练测试的运行环境要求如下PaddlePaddle 2.2量化与裁剪依赖paddleslim其 API 形态QAT、FPGMFilterPruner与 Paddle 2.2 的动态图接口匹配其他依赖目录内置了一份最小依赖清单 requirements.txt内容为paddleslim2.2.1安装命令与仓库其余模块一致pip3 install -r requirements.txt由于补充测试会 JIT 编译自定义 OP见下文机器还需具备可用的 C 编译工具链与 CUDA 环境若使用 GPU 训练。注意示例训练脚本 train.py 在导入阶段就会调用paddle.utils.cpp_extension.load编译custom_relu_op因此编译环境是运行前置条件而非可选优化。三、两种运行模式lite 快速验证与 whole 全量验证test_train_python.sh内置两种运行模式二者的差异体现在配置文件对不同字段给出了按模式区分的取值模式配置写法目的数据规模epoch以默认配置为例lite_train_lite_inferlite_train_lite_infer2使用少量数据训练快速验证训练→预测流程走通不验证精度和速度小2whole_train_whole_inferwhole_train_whole_infer1000使用全量数据训练验证模型最终训练精度全量1000两种模式的启动命令分别为bash test_tipc/test_train_python.sh ./test_tipc/train_infer_python.txt lite_train_lite_infer bash test_tipc/test_train_python.sh ./test_tipc/train_infer_python.txt whole_train_whole_infer两个位置参数的含义$1训练参数配置文件路径如 train_infer_python.txt$2运行模式脚本仅在MODE为lite_train_lite_infer或whole_train_whole_infer时才进入训练分支见 test_train_python.sh。从脚本实现看whole_train_whole_infer模式并不额外下载数据而是完全复用同一份示例数据CIFAR-100区别仅在 epoch 与批大小等超参——这正是快速走通流程与验证最终精度的分工。四、训练配置文件的结构与解析机制补充训练的配置文件采用字段:取值与字段:模式取值两种语法脚本会读取配置文件前 51 行awk NR1, NR51{print}并借助 common_func.sh 中的解析函数逐行提取。以 train_infer_python.txt 为例train_params model_name:ch_PPOCRv2_det python:python3.7 gpu_list:0|0,1 use_gpu:True|True AMP.use_amp:True|False epoch:lite_train_lite_infer2|whole_train_whole_infer1000 save_model_dir:./output/ TRAIN.batch_size:lite_train_lite_infer1280|whole_train_whole_infer1280 pretrained_model:null checkpoints:null use_custom_relu:False|True model_type:cls|cls_distill|cls_distill_multiopt MODEL.siamese:False|True norm_train:train.py -c mv3_large_x0_5.yml -o quant_train:False prune_train:False各字段语义与脚本中的对应关系如下行号从 1 计数字段含义脚本解析函数2model_name测试的模型名标识func_parser_value3python使用的 Python 解释器func_parser_value4gpu_listGPU 列表0为单卡、0,1为多卡、xx.xx.xx.xx;0,1为多机多卡func_parser_value5use_gpu是否使用 GPU按索引与gpu_list一一对应func_parser_key/value6AMP.use_amp是否开启自动混合精度amp时会注入AMP.use_ampTruefunc_parser_key/value7epoch按模式取 epoch 数func_parser_params8save_model_dir模型保存目录func_parser_key9TRAIN.batch_size按模式取批大小func_parser_params10pretrained_model预训练模型路径null表示不加载func_parser_value11checkpoints断点续训路径null表示不加载func_parser_value12use_custom_relu是否使用自定义 ReLU OPFalse/True二值遍历func_parser_value13model_type模型形态cls/cls_distill/cls_distill_multioptfunc_parser_value14MODEL.siamese是否使用 Siamese 共享权重结构func_parser_value15norm_train实际训练命令模板即train.py -c mv3_large_x0_5.yml -ofunc_parser_value16quant_train是否量化训练PACT QAT透传至训练脚本17prune_train是否裁剪训练FPGM透传至训练脚本脚本按for gpu → for autocast → for custom_op → for model_type → for share_conv的五重循环对配置中的|分隔值做笛卡尔积遍历每条组合通过func_set_params拼接出完整命令行再经eval执行最后调用status_check记录状态见 test_train_python.sh 与 common_func.sh。需要说明的是该配置模板的model_name沿用了ch_PPOCRv2_det命名而实际训练的模型是 CIFAR-100 分类任务上的MobileNetV3_large_x0_5由 mv3_large_x0_5.yml 定义。补充测试的重点在于验证训练链路本身而非复现某个具体 OCR 模型的精度。五、普通训练测试与命令拼接细节执行普通训练测试即运行上文的lite_train_lite_infer或whole_train_whole_infer命令。以lite_train_lite_infer为例脚本最终会生成类似如下的训练命令对应原文档中的成功日志示例python3.7 train.py -c mv3_large_x0_5.yml -o use_gpuTrue epoch2 AMP.use_ampTrue TRAIN.batch_size1280 use_custom_reluFalse model_typecls MODEL.siameseFalse从 test_train_python.sh 可以看到命令的三档组装规则CPU 或单 GPUgpu长度 ≤ 2直接执行python train.py ...单机多卡ips为空、gpu为0,1python -m paddle.distributed.launch --gpus${gpu} train.py ...多机多卡python -m paddle.distributed.launch --ips${ips} --gpus${gpu} train.py ...。而train.py的入口则依据model_type分发到三个训练实现train.pycls→train()普通分类训练使用单分支MobileNetV3_large_x0_5cls_distill→train_distill()双分支蒸馏共享同一个优化器损失为两个 student 分支的交叉熵损失 DML 互蒸馏损失 KL/JS 散度损失之和cls_distill_multiopt→train_distill_multiopt()双分支蒸馏 每分支独立优化器反向传播时对第一个损失使用retain_graphTrue后分别更新两个优化器。三种model_type对应的模型构建逻辑位于 mv3.py 的build_modelcls支持 Siamese 双塔结构MODEL.siameseTrue时构造 SiameseMV3两个共享骨干网络的特征相加后过分类头cls_distill与cls_distill_multiopt均构造 DistillMV3内含student与student1两个子网络。此外use_custom_reluTrue时模型的前向传播会在 ReLU 激活处调用 JIT 编译的自定义算子custom_ops.custom_relu见 mv3.py 与 ConvBNLayer该算子源码位于 custom_op/custom_relu_op.ccCPU 实现与 custom_op/custom_relu_op.cuCUDA 实现通过paddle.utils.cpp_extension.load动态编译这正是自定义 OP 训练流程验证的核心对象。六、量化训练PACT QAT当需要验证量化训练时不能使用普通配置文件而应切换到对应的 PACT 配置文件 train_infer_python_PACT.txt。该文件与普通配置的唯一差异在第 15 行norm_train:train.py -c mv3_large_x0_5.yml -o quant_trainTrue即通过命令行向训练脚本注入quant_trainTrue。对应的测试指令为bash test_tipc/test_train_python.sh ./test_tipc/train_infer_python_PACT.txt lite_train_lite_inferquant_trainTrue会在 train.py 中触发如下量化逻辑if quant_train in config and config[quant_train] is True: quanter QAT(configquant_config, act_preprocessPACT) quanter.quantize(model)其中PACT激活预处理层与quant_config量化配置均定义在 slim/slim_quant.pyPACT 层以可学习参数alpha初始值 20带 L2 正则截断激活值范围forward中通过relu(x - alpha)与relu(-alpha - x)实现对称截断从而在训练中自适应学习激活量化范围quant_config默认采用channel_wise_abs_max权重量化、moving_average_abs_max激活量化、8 bitweight_bits/activation_bits、输出int8可量化的层类型为[Conv2D, Linear]滑动平均系数moving_rate0.9。量化分支在普通训练、蒸馏训练、多优化器蒸馏训练三条路径中均被支持见 train.py 与 train.py因此model_type的三个取值都能与量化组合验证。七、FPGM 滤波器裁剪训练FPGMFilter Pruning via Geometric Median裁剪训练使用独立的配置文件 train_infer_python_FPGM.txt其第 15 行注入prune_trainTruenorm_train:train.py -c mv3_large_x0_5.yml -o prune_trainTrue对应测试指令bash test_tipc/test_train_python.sh ./test_tipc/train_infer_python_FPGM.txt lite_train_lite_infer训练脚本中prune_trainTrue的分支会调用 slim/slim_fpgm.py 的prune_modeldef prune_model(model, input_shape, prune_ratio0.1): flops paddle.flops(model, input_shape) pruner FPGMFilterPruner(model, input_shape) params_sensitive {} for param in model.parameters(): if transpose not in param.name and linear not in param.name: # set prune ratio as 10%. The larger the value, the more convolution weights will be cropped params_sensitive[param.name] prune_ratio plan pruner.prune_vars(params_sensitive, [0]) flops paddle.flops(model, input_shape) return model实现要点除transpose与linear相关参数外其余参数主要是卷积核统一按prune_ratio0.110%设置裁剪敏感度prune_vars依据几何中位数准则挑选可裁剪的滤波器剪枝前后分别调用paddle.flops计算模型 FLOPs 以便对比裁剪收益。该分支同样在三条训练路径中通用见 train.py、train.py、train.py。八、多机多卡训练配置与运行多机多卡场景对应三份_fleet后缀配置文件train_infer_python_fleet.txt普通训练train_infer_python_FPGM_fleet.txtFPGM 裁剪train_infer_python_PACT_fleet.txtPACT 量化与单机配置相比_fleet配置的关键区别在第 4 行的gpu_listgpu_list:xx.xx.xx.xx,yy.yy.yy.yy;0,1其中分号前为节点 IP 列表xx.xx.xx.xx,yy.yy.yy.yy多个 IP 用逗号分隔分号后为每个节点上的 GPU 编号0,1。运行时需要把xx.xx.xx.xx替换为实际 IP并且必须在多机的每个节点上分别执行命令。以多机多卡量化训练为例bash test_tipc/test_train_python.sh ./test_tipc/train_infer_python_PACT_fleet.txt lite_train_lite_infer脚本对gpu_list的解析规则见 test_train_python.sh当gpu串长度超过 15 时按;切分出ips与gpu随后在命令中注入--ips${ips} --gpus${gpu}同时use_gpu取值与gpu_list按索引一一对应fleet配置中use_gpu:True为单值索引 0 即对应多机场景。九、运行日志与结果校验执行上述任意指令后日志会自动写入test_tipc/extra_output目录该目录由脚本在启动时创建见 test_train_python.sh核心结果文件为test_tipc/extra_output/ |- results_python.log # 运行指令状态的日志results_python.log记录每条指令的运行状态命令执行成功时status_check会向日志追加形如下文的记录原文档示例完整覆盖普通训练、蒸馏、多优化器蒸馏与 Siamese 组合Run successfully with command - python3.7 train.py -c mv3_large_x0_5.yml -o use_gpuTrue epoch20 AMP.use_ampTrue TRAIN.batch_size1280 use_custom_reluFalse model_typecls MODEL.siameseFalse ! Run successfully with command - python3.7 train.py -c mv3_large_x0_5.yml -o use_gpuTrue epoch2 AMP.use_ampTrue TRAIN.batch_size1280 use_custom_reluFalse model_typecls MODEL.siameseFalse ! Run successfully with command - python3.7 train.py -c mv3_large_x0_5.yml -o use_gpuTrue epoch2 AMP.use_ampTrue TRAIN.batch_size1280 use_custom_reluFalse model_typecls MODEL.siameseTrue ! Run successfully with command - python3.7 train.py -c mv3_large_x0_5.yml -o use_gpuTrue epoch2 AMP.use_ampTrue TRAIN.batch_size1280 use_custom_reluFalse model_typecls_distill MODEL.siameseFalse ! Run successfully with command - python3.7 train.py -c mv3_large_x0_5.yml -o use_gpuTrue epoch2 AMP.use_ampTrue TRAIN.batch_size1280 use_custom_reluFalse model_typecls_distill MODEL.siameseTrue ! Run successfully with command - python3.7 train.py -c mv3_large_x0_5.yml -o use_gpuTrue epoch2 AMP.use_ampTrue TRAIN.batch_size1280 use_custom_reluFalse model_typecls_distill_multiopt MODEL.siameseFalse !其中Run successfully表示退出码为 0Run failed表示失败status_check 依据$?判断并同时输出到终端与日志。日志中每条命令的字段epoch、TRAIN.batch_size、use_custom_relu、model_type、MODEL.siamese、AMP.use_amp正是配置文件各字段经笛卡尔积组合后的真实执行命令可作为排障与追溯的直接依据。十、补充训练示例的实现细节补充测试自带一套完整可跑的 CIFAR-100 分类示例除上述文件外还包含mv3.pyMobileNetV3 large/small 骨干、Siamese 双塔、蒸馏双子网络、自定义 OP 的 JIT 加载与模型工厂build_modelloss.py普通分类损失、蒸馏损失LossDistill、DML 互蒸馏损失与 KL/JS 散度损失optimizer.py优化器与学习率调度器构建对应配置中LEARNING_RATE的 Cosine 与OPTIMIZER的 Momentum L2 正则data_loader.py 与 load_cifar.py训练/验证数据加载config.py命令行-c xxx.yml -o keyvalue的配置合并与解析mv3_large_x0_5.yml模型与训练超参配置class_dim: 100、epoch: 1000、AMP.scale_loss: 1024.0、TRAIN.batch_size: 1280等。值得留意的是 train.py 中训练循环对 AMP 的处理当配置开启AMP.use_amp时会创建paddle.amp.GradScaler在paddle.amp.auto_cast()上下文中前向并通过scaler.scale/scaler.minimize完成带动态损失缩放的反向与参数更新未开启时走普通loss.backward()路径。这也是配置文件中AMP.use_amp:True|False遍历所要覆盖的组合之一。相关文件索引用途路径补充训练主程序test_train_python.sh参数解析与状态检查公共函数common_func.sh普通训练配置train_infer_python.txtPACT 量化训练配置train_infer_python_PACT.txtFPGM 裁剪训练配置train_infer_python_FPGM.txt多机多卡训练配置train_infer_python_fleet.txt 及两份_FPGM_fleet/_PACT_fleet训练入口脚本train.py模型定义与自定义 OP 加载mv3.pyPACT 与量化配置slim/slim_quant.pyFPGM 裁剪实现slim/slim_fpgm.py模型超参配置mv3_large_x0_5.yml依赖清单requirements.txt【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考