)
PaddleOCR 多机多卡分布式训练与推理全流程测试指南TIPC Fleet 模式【免费下载链接】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本指南面向需要在大规模 GPU 集群上验证 PaddleOCR 分布式训练与推理能力的开发者完整讲解 PaddleOCR 飞桨训推一体全流程TIPC中多机多卡训练 Python 推理Fleet 模式的测试方法。你将掌握如何修改节点 IP 配置、在所有节点准备数据、设置分布式起始端口、一键运行test_train_inference_python.sh完成从分布式训练到模型导出与推理的端到端验证并能读懂 benchmark 日志中的环境、模型与性能信息快速定位失败环节。1. 测试能力与覆盖范围TIPCTraining and Inference Pipeline Criterion是 PaddleOCR 提供的一整套训练-推理打通验证体系其测试入口脚本为 test_tipc/test_train_inference_python.sh。本文档对应的多机多卡Fleet测试用于验证基于 Python 的模型在多台机器、多张 GPU 上的分布式训练以及训练产出模型在 CPU/GPU 上的推理功能是否打通。以PP-OCRv3_mobile_rec为例官方给出的测试结论如下训练相关多机多卡算法名称模型名称多机多卡PP-OCRv3PP-OCRv3_mobile_rec分布式训练推理相关算法名称模型名称device_CPUdevice_GPUbatchsizePP-OCRv3PP-OCRv3_mobile_rec支持-1/6从表格可以看出多机多卡测试覆盖分布式训练这一训练形态推理侧当前以 CPU 推理验证为主支持的 batchsize 为 1 与 6。这也说明 TIPC 的多机多卡测试核心目的是验证训练链路在分布式环境下的正确性推理部分用于验证训练产出的模型可以正常导出并被 Paddle Inference 加载执行。2. 环境准备运行环境配置请参考 test_tipc/docs/install.md 中 TIPC 运行环境的配置方法。要点如下推荐硬件/驱动组合CUDA 10.1/10.2、CUDNN 7.6/8.1、TensorRT 6.1.0.5/7.1/7.2两种环境搭建方式Docker 镜像安装推荐通过nvidia-docker挂载当前目录到/paddle并安装带 TRT 的 PaddlePaddle wheel 包或本地 Python 环境构建依次安装 CUDNN、TensorRT、PaddlePaddle再安装 AutoLog 与 PaddleOCR 依赖requirements.txt多机场景下每台参与训练的节点都需要独立完成环境配置包括 PaddlePaddle 版本、依赖库版本保持一致否则可能出现分布式通信异常或运行结果不一致。3. 理解核心配置文件train_linux_gpu_fleet_normal_infer_python_linux_gpu_cpu.txt多机多卡测试的配置文件位于 test_tipc/configs/PP-OCRv3_mobile_rec/train_linux_gpu_fleet_normal_infer_python_linux_gpu_cpu.txt。文件名本身即遵循 TIPC 命名规范详见 test_tipc/readme.md 的配置文件命名规范一节train_训练硬件环境(linux_gpu)_是否多机(fleet/normal)_是否混合精度(amp/normal)_预测模式(infer)_语言(python)_预测硬件环境(linux_gpu_cpu).txt其中fleet即代表多机多卡训练模式normal代表不使用混合精度。文件内容按train_params / eval_params / infer_params / infer_benchmark_params四段组织3.1 train_params训练参数段配置项值说明model_namePP-OCRv3_mobile_rec被测模型名用于输出目录与日志命名pythonpython3.7测试使用的 Python 解释器gpu_list192.168.0.1,192.168.0.2;0,1多机多卡核心配置分号前为各节点 IP 列表分号后为每节点使用的 GPU 卡号脚本据此判定为多机模式Global.use_gpuTrue训练使用 GPUGlobal.auto_castfp32训练精度为 FP32非混合精度Global.epoch_numlite_train_lite_infer3\|whole_train_whole_infer50按测试模式选择训练轮数轻量模式 3 轮、完整模式 50 轮Global.save_model_dir./output/模型保存根目录脚本会在其下追加模式与节点信息子目录Train.loader.batch_size_per_cardlite_train_lite_infer16\|whole_train_whole_infer64每卡 batchsize按模式切换Global.pretrained_modelnull不加载预训练权重train_model_namelatest训练完成后用于导出的模型权重名train_infer_img_dir./inference/rec_inference推理测试使用的图片目录trainer/norm_traintools/train.py -c ...PP-OCRv3_mobile_rec_distillation.yml -o训练入口命令使用 test_tipc/configs/PP-OCRv3_mobile_rec/PP-OCRv3_mobile_rec_distillation.yml 蒸馏训练配置通过-o追加命令行覆盖参数3.2 infer_params推理参数段配置项值说明norm_exporttools/export_model.py -c ...PP-OCRv3_mobile_rec_distillation.yml -o模型导出命令训练权重转推理模型inference_dirStudent蒸馏模型训练后导出时取 Student 分支作为推理模型infer_model./inference/PP-OCRv3_mobile_rec_infer预下载的官方推理模型目录whole_infer模式使用inferencetools/infer/predict_rec.py --rec_image_shape3,48,320识别推理脚本与输入尺寸3 通道、高 48、宽 320--use_gpuFalse推理设备多机多卡测试中推理走 CPU--enable_mkldnnFalse不启用 MKLDNN 加速--cpu_threads6CPU 推理线程数--rec_batch_num1\|6推理 batchsize 遍历 1 与 6--use_tensorrtFalse不启用 TensorRT--precisionfp32推理精度 FP32--image_dir./inference/rec_inference推理图片目录--benchmarkTrue开启 benchmark 模式输出详细性能数据infer_benchmark_params段中的random_infer_input:[{float32,[3,48,320]}]用于 benchmark 模式下的随机输入构造与--rec_image_shape3,48,320保持一致。4. 多机多卡功能测试流程整个多机多卡测试分为四步改配置 → 备数据 → 设端口 → 跑测试。由于是分布式训练除第一步外所有节点都需要重复执行。4.1 修改配置文件中的 IP 设置多机训练要求gpu_list中同时携带节点 IP 列表与每节点 GPU 卡号格式为IP1,IP2,...;gpu1,gpu2,...。假设两台机器的 IP 分别为192.168.0.1和192.168.0.2每台机器使用 0、1 号 GPU则配置文件gpu_list字段需修改为gpu_list:192.168.0.1,192.168.0.2;0,1IP 地址查看命令为ifconfig。需要强调的是该字段是所有节点共用的全局配置各节点上的配置文件内容应保持一致。4.2 在所有节点准备数据运行 test_tipc/prepare.sh 下载轻量训练数据icdar2015_lite、ic15_data、pubtabnet 等、PP-OCRv3_mobile_rec 预训练权重与rec_inference推理图片。以配置文件test_tipc/configs/PP-OCRv3_mobile_rec/train_linux_gpu_fleet_normal_infer_python_linux_gpu_cpu.txt为例bash test_tipc/prepare.sh test_tipc/configs/PP-OCRv3_mobile_rec/train_linux_gpu_fleet_normal_infer_python_linux_gpu_cpu.txt lite_train_lite_infer注意由于是多机训练所有节点上都必须运行上述命令准备数据——每个节点需要独立持有自己的训练数据与预训练权重。prepare.sh同时会安装requirements.txt依赖、AutoLog 与 paddleslim并针对PP-OCRv3_mobile_rec下载对应预训练模型见 test_tipc/prepare.sh 中lite_train_lite_infer分支的PP-OCRv3_mobile_rec_train.tar下载与解压逻辑。4.3 设置分布式起始端口paddle.distributed.launch启动多机训练时需要通过环境变量指定通信起始端口否则进程会因找不到可用运行端口而hang 住。在各节点执行export FLAGS_START_PORT17000官方建议端口范围在10000~20000之间。该变量需在运行测试命令的同一个 shell 会话中设置并在所有节点上保持一致。4.4 运行测试以lite_train_lite_infer模式轻量训练 轻量推理为例在所有节点执行bash test_tipc/test_train_inference_python.sh test_tipc/configs/PP-OCRv3_mobile_rec/train_linux_gpu_fleet_normal_infer_python_linux_gpu_cpu.txt lite_train_lite_infer注意多机训练要求所有节点同步启动上述命令测试脚本会依次完成分布式训练 → 模型导出 → CPU 推理 → 结果记录。4.5 输出结果解读4.5.1 运行成功标志当终端输出如下日志时表示对应环节运行成功Run successfully with command - PP-OCRv3_mobile_rec - python3.7 -m paddle.distributed.launch --ips192.168.0.1,192.168.0.2 --gpus0,1 tools/train.py -c test_tipc/configs/PP-OCRv3_mobile_rec/PP-OCRv3_mobile_rec_distillation.yml -o Global.use_gpuTrue Global.save_model_dir./test_tipc/output/PP-OCRv3_mobile_rec/lite_train_lite_infer/norm_train_gpus_0,1_autocast_fp32_nodes_2 Global.epoch_num3 Global.auto_castfp32 Train.loader.batch_size_per_card16 ! ...... Run successfully with command - PP-OCRv3_mobile_rec - python3.7 tools/infer/predict_rec.py --rec_image_shape3,48,320 --use_gpuFalse --enable_mkldnnFalse --cpu_threads6 --rec_model_dir./test_tipc/output/PP-OCRv3_mobile_rec/lite_train_lite_infer/norm_train_gpus_0,1_autocast_fp32_nodes_2/Student --rec_batch_num1 --image_dir./inference/rec_inference --benchmarkTrue --precisionfp32 ./test_tipc/output/PP-OCRv3_mobile_rec/lite_train_lite_infer/python_infer_cpu_usemkldnn_False_threads_6_precision_fp32_batchsize_1.log 21 !两条命令分别对应多机分布式训练与CPU 推理两个环节可以从命令细节看到训练命令通过python3.7 -m paddle.distributed.launch --ips192.168.0.1,192.168.0.2 --gpus0,1拉起两节点、每节点双卡的分布式训练模型保存在./test_tipc/output/PP-OCRv3_mobile_rec/lite_train_lite_infer/norm_train_gpus_0,1_autocast_fp32_nodes_2/目录名中的nodes_2标识节点数为 2推理使用训练产出的Student分支模型batchsize 为 1CPU 推理并开启 benchmark。4.5.2 benchmark 详细性能数据开启--benchmarkTrue后log 中会输出包含运行环境、Paddle 版本、参数设置、模型、数据、性能六类信息的详细报告示例[2022/06/02 22:53:35] ppocr INFO: [2022/06/02 22:53:35] ppocr INFO: ---------------------- Env info ---------------------- [2022/06/02 22:53:35] ppocr INFO: OS_version: Ubuntu 16.04 [2022/06/02 22:53:35] ppocr INFO: CUDA_version: 10.1.243 [2022/06/02 22:53:35] ppocr INFO: CUDNN_version: 7.6.5 [2022/06/02 22:53:35] ppocr INFO: drivier_version: 460.32.03 [2022/06/02 22:53:35] ppocr INFO: ---------------------- Paddle info ---------------------- [2022/06/02 22:53:35] ppocr INFO: paddle_version: 2.3.0-rc0 [2022/06/02 22:53:35] ppocr INFO: paddle_commit: 5d4980c052583fec022812d9c29460aff7cdc18b [2022/06/02 22:53:35] ppocr INFO: log_api_version: 1.0 [2022/06/02 22:53:35] ppocr INFO: ----------------------- Conf info ----------------------- [2022/06/02 22:53:35] ppocr INFO: runtime_device: cpu [2022/06/02 22:53:35] ppocr INFO: ir_optim: True [2022/06/02 22:53:35] ppocr INFO: enable_memory_optim: True [2022/06/02 22:53:35] ppocr INFO: enable_tensorrt: False [2022/06/02 22:53:35] ppocr INFO: enable_mkldnn: False [2022/06/02 22:53:35] ppocr INFO: cpu_math_library_num_threads: 6 [2022/06/02 22:53:35] ppocr INFO: ----------------------- Model info ---------------------- [2022/06/02 22:53:35] ppocr INFO: model_name: rec [2022/06/02 22:53:35] ppocr INFO: precision: fp32 [2022/06/02 22:53:35] ppocr INFO: ----------------------- Data info ----------------------- [2022/06/02 22:53:35] ppocr INFO: batch_size: 1 [2022/06/02 22:53:35] ppocr INFO: input_shape: dynamic [2022/06/02 22:53:35] ppocr INFO: data_num: 6 [2022/06/02 22:53:35] ppocr INFO: ----------------------- Perf info ----------------------- [2022/06/02 22:53:35] ppocr INFO: cpu_rss(MB): 288.957, gpu_rss(MB): None, gpu_util: None% [2022/06/02 22:53:35] ppocr INFO: total time spent(s): 0.4824 [2022/06/02 22:53:35] ppocr INFO: preprocess_time(ms): 0.1136, inference_time(ms): 79.5877, postprocess_time(ms): 0.6945各类信息含义与用途Env info操作系统、CUDA、CUDNN、驱动版本用于复现环境与排查驱动/加速库不匹配问题Paddle infoPaddlePaddle 版本与 commit、AutoLog 版本Conf info运行设备cpu/gpu、是否 IR 优化、内存优化、TensorRT/MKLDNN 开关、CPU 线程数对应推理参数的实际生效情况Model info模型名称rec 识别模型与精度fp32Data infobatchsize、是否为动态 shapeinput_shape: dynamic、测试数据数量Perf infoCPU/GPU 内存占用、总耗时、预处理/推理/后处理三段耗时是评估推理性能的核心指标。该信息可在运行 log 中查看以上面的PP-OCRv3_mobile_rec为例log 位置在./test_tipc/output/PP-OCRv3_mobile_rec/lite_train_lite_infer/results_python.log单次推理的详细日志则按python_infer_cpu_usemkldnn_{}_threads_{}_precision_{}_batchsize_{}.log命名规则存放在同一目录。4.5.3 运行失败的处理如果某个环节运行失败终端同样会输出失败日志及对应的完整运行命令形如Run failed with command - ...其中包含退出码、被执行的完整命令与 log 文件路径。可以基于该命令脱离测试脚本单独重放例如手动执行其中的paddle.distributed.launch训练命令或predict_rec.py推理命令结合报错堆栈缩小问题范围如端口冲突、节点间网络不通、数据路径不一致等。5. 源码级原理脚本如何判定多机多卡理解 test_tipc/test_train_inference_python.sh 的多机判定逻辑有助于自定义新的多机测试场景。脚本对gpu_list的解析与命令构造逻辑如下解析gpu_list脚本按;拆分若;前存在 IP 列表ips非空则进入多机分支源码中注释明确说明if length of ips 15, then it is seen as multi-machine即IP 字符串长度超过 15如0.0.0.0,0.0.0.0这样的最小多机形态即判定为多机计算节点数nodes${#ips_array[]}即按,拆分 IP 列表后的数量节点数会写入训练输出目录名如nodes_2与日志文件名如..._nodes_2_eval.log构造分布式启动命令多机分支下统一拼接为${python} -m paddle.distributed.launch --ips${ips} --gpus${gpu} ${run_train} ${set_use_gpu} ${set_save_model} ${set_pretrain} ${set_epoch} ${set_batchsize} ${set_amp_config} ${set_train_params1}其中--ips为节点 IP 列表--gpus为每节点 GPU 卡号而单机多卡分支仅使用--gpus单卡/CPU 分支则直接执行训练脚本三者的区分正是通过ips的长度判断实现对应 test_tipc/test_train_inference_python.sh 中约第 294-299 行的三分支逻辑训练后处理训练结束后脚本会依据train_model_namelatest找到权重调用tools/export_model.py导出推理模型蒸馏配置导出Student分支再调用tools/infer/predict_rec.py执行 CPU 推理每个环节通过status_check函数定义于 test_tipc/common_func.sh记录成功/失败 命令 日志路径到results_python.log。6. 多机多卡测试的注意事项与 FAQ6.1 模型只在 trainer_id0 的节点保存注意分布式训练时仅在trainer_id0所在的节点保存模型。因此其他节点在执行模型导出与推理环节时会因找不到模型权重而报错这是正常现象不代表测试失败。判断测试是否通过应以trainer_id0节点上results_python.log中各个环节的Run successfully记录为准。6.2 常见问题排查进程 hang 住多为未设置FLAGS_START_PORT或端口不在 10000~20000 区间、被其他进程占用需在所有节点重新export FLAGS_START_PORT17000后重启测试节点间通信失败确认所有节点配置文件中的gpu_listIP 一致、网络互通可用ifconfig核对 IP检查防火墙/安全组放行分布式通信端口数据不一致确认每个节点都执行过prepare.sh且lite_train_lite_infer等模式参数在epoch_num、batch_size_per_card上的取值一致版本不一致多机场景强烈建议各节点使用相同的 PaddlePaddle 版本与依赖版本并优先使用 Docker 镜像统一环境。6.3 扩展到其他模型与场景TIPC 的多机多卡配置并非 PP-OCRv3_mobile_rec 专属test_tipc/readme.md 的汇总表显示 ch_ppocr_mobile_v2.0_det、ch_PP-OCRv2_det、rec_r34_vd_none_none_ctc_v2_0 等模型同样支持多机多卡与混合精度训练。替换配置文件并保持命名规范如train_linux_gpu_fleet_amp_infer_python_linux_gpu_cpu.txt对应多机多卡 混合精度链路即可一键测试其他模型的分布式训练能力若同时验证混合精度可在配置中设置Global.auto_castamp脚本会自动追加Global.use_ampTrue Global.scale_loss1024.0 Global.use_dynamic_loss_scalingTrue的 AMP 配置对应 test_tipc/test_train_inference_python.sh 中的 autocast 分支逻辑。7. 总结本文完整梳理了 PaddleOCR TIPC 多机多卡Fleet测试的配置、流程与原理核心在于把gpu_list配置为IP列表;GPU列表的多机形态在所有节点同步完成数据准备与端口设置后一键运行test_train_inference_python.sh即可自动化完成多机分布式训练 → 模型导出 → CPU 推理 → 性能采集的端到端验证。理解 test_tipc/test_train_inference_python.sh 中基于ips长度判定多机、按节点数生成输出目录、蒸馏模型导出 Student 分支等实现细节能帮助你快速定制新模型的多机验证并准确区分真正的失败与多机模式下非主节点无模型产出的正常现象。【免费下载链接】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),仅供参考