PaddleSeg 推理 Benchmark 全解析:GPU 加速、TensorRT 精度配置与实测数据解读
发布时间:2026/9/26 2:06:50来源:尧图网络
人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载PaddleSeg 官方推理 Benchmark 文档系统性地评估了 7 个主流语义分割模型在 V100 GPU 上的推理性能覆盖 Paddle Inference 原生 FP32、TensorRT FP32/FP16/INT8 四种推理组合并给出 mIoU 与单图耗时指标。本文以 docs/deployment/inference/infer_benchmark.md 为核心骨架结合 deploy/python/infer.py 与 deploy/python/infer_benchmark.py 的源码实现完整复现测试方法论、参数体系与结果解读帮助你复现同款基准测试并为自己的分割模型做精度-速度权衡选型。一、测试环境与测试方法1.1 硬件与软件栈Benchmark 数据对应的测试环境如下组件配置GPUNVIDIA V100 32GCPUIntel(R) Xeon(R) Gold 6148 CPU 2.40GHzCUDA10.1cuDNN7.6TensorRT6.0.1.5Paddle2.1.1需要强调的是该环境属于 Benchmark 发布时的固定快照其中 TensorRT 6.0 / Paddle 2.1.1 均为当时版本。如果你在更高版本如 CUDA 10.2 cuDNN 8.1 TensorRT 7.x Paddle 2.3上复测绝对数值会发生变化但 FP16/INT8 相对 FP32 的加速趋势与精度变化规律仍可参考。部署环境的具体准备步骤见 Python 部署指南GPU 场景下 Naive 模式可直接安装paddlepaddle-gpu2.1TensorRT 模式还需额外下载与 CUDA/cuDNN 匹配的 TensorRT 库并加入LD_LIBRARY_PATH。1.2 四项测试约定原文档明确了 4 条测试约定它们是理解 Benchmark 数值的前提数据集使用 Cityscapes 全量验证集原始分辨率 1024×2048测试运行方式单 GPU、batch size 为 1耗时口径只统计纯模型推理时间不包含数据预处理与后处理推理后端使用 Paddle Inference 的 Python API 测试通过use_trt参数决定是否启用 TensorRT通过precision参数设置预测数据类型。这四条约定与 deploy/python/infer_benchmark.py 的实现一一对应该脚本的PredictorBenchmark.run()只执行predictor.run()循环并用time.time()掐表测量区间严格限定在模型前向推理上。二、GPU 推理 Benchmark 数据总览下表为原文档提供的 7 个模型 × 4 种推理组合的完整数据mIoU 与耗时 s/img模型使用 TRT预测类型mIoU耗时 (s/img)ANN_ResNet50_OS8NFP320.79090.274ANN_ResNet50_OS8YFP320.79090.281ANN_ResNet50_OS8YFP160.79090.168ANN_ResNet50_OS8YINT80.79060.195DANet_ResNet50_OS8NFP320.80270.371DANet_ResNet50_OS8YFP320.80270.330DANet_ResNet50_OS8YFP160.80270.183DANet_ResNet50_OS8YINT80.80390.266DeepLabV3P_ResNet50_OS8NFP320.80360.165DeepLabV3P_ResNet50_OS8YFP320.80360.206DeepLabV3P_ResNet50_OS8YFP160.80360.196DeepLabV3P_ResNet50_OS8YINT80.80440.083DNLNet_ResNet50_OS8NFP320.79950.381DNLNet_ResNet50_OS8YFP320.79950.360DNLNet_ResNet50_OS8YFP160.79950.230DNLNet_ResNet50_OS8YINT80.79890.236EMANet_ResNet50_OS8NFP320.79050.208EMANet_ResNet50_OS8YFP320.79050.186EMANet_ResNet50_OS8YFP160.79040.062EMANet_ResNet50_OS8YINT80.79390.106GCNet_ResNet50_OS8NFP320.79500.247GCNet_ResNet50_OS8YFP320.79500.228GCNet_ResNet50_OS8YFP160.79500.100GCNet_ResNet50_OS8YINT80.79590.144PSPNet_ResNet50_OS8NFP320.78830.327PSPNet_ResNet50_OS8YFP320.78830.324PSPNet_ResNet50_OS8YFP160.78830.218PSPNet_ResNet50_OS8YINT80.79150.223UNetNFP320.65000.071UNetYFP320.65000.099UNetYFP160.65000.099UNetYINT80.65030.099注UNet 的 mIoU 为 Cityscapes 上以 1024×512 输入得到的基准值与表中其余模型在 1024×2048 下的测试口径不同直接横向比较 mIoU 意义有限请结合模型配置理解。对应训练配置可参考 configs/unet/unet_cityscapes_1024x512_160k.yml。2.1 从数据中能读出的关键规律1TensorRT 并非在所有场景下都更快对比 Naive FP32 与 TRT FP32 两列可以发现对 ANN、PSPNet 这类模型TensorRT 加速有限甚至略慢ANN 0.274→0.281 s/img而 UNet 在开启 TRT 后反而明显变慢0.071→0.099 s/img。这印证了官方文档的提示——a small number of models do not support deployment using TensorRT on Nvidia GPUs少数模型使用 TensorRT 部署可能得不到加速。原因从源码可推断TRT 引擎对算子做子图融合需要满足特定条件且动态 shape 模式下每次推理可能涉及引擎调度开销对小模型收益常被开销抵消。是否启用 TRT 应实测决定不能默认更优。2FP16 是多数模型的性价比之选EMANet 在 FP16 下达到 0.062 s/img相比 Naive FP32 的 0.208 s/img 加速约 3.4 倍且 mIoU 基本无损0.7905→0.7904GCNet 从 0.247 降到 0.100 s/imgDNLNet 从 0.381 降到 0.230 s/img。这些模型在 FP16 下精度损失几乎为 0。3INT8 依赖量化校准效果因模型而异INT8 需要加载量化后的预测模型并配合校准源码中对应use_calib_modeFalse的配置路径其精度与加速比在不同模型上差异较大正向案例DeepLabV3P_ResNet50_OS8 在 INT8 下耗时降至 0.083 s/img约 2 倍于 Naive FP32mIoU 反而从 0.8036 提升到 0.8044负向案例DNLNet 在 INT8 下耗时 0.236 s/img 反超 FP16 的 0.230 s/img且 mIoU 从 0.7995 微降至 0.7989无明显收益案例UNet 三种 TRT 精度耗时均为 0.099 s/img。这说明 INT8 的收益高度依赖模型结构与量化实现选择前务必结合自身数据实测。4精度-速度的选型建议若追求极致精度Naive FP32 或 TRT FP32 即可若追求高吞吐且精度敏感优先尝试 FP16——表中所有模型在 FP16 下 mIoU 与 FP32 的差值最大不超过 0.0001若对精度容忍度高且模型结构适合量化如 DeepLabV3PINT8 能带来最大加速比。三、复现 Benchmark从导出模型到运行脚本3.1 前置步骤导出推理模型Benchmark 使用的部署模型需要通过 tools/export.py 从训练权重导出。以 PP-LiteSeg 为例详见 模型导出指南python tools/export.py \ --config configs/pp_liteseg/pp_liteseg_stdc1_cityscapes_1024x512_scale0.5_160k.yml \ --model_path model.pdparams \ --save_dir output/inference_model导出产物为 4 个文件其中deploy.yaml是部署配置含预处理 transforms、模型与参数文件名model.pdmodel是静态图模型model.pdiparams是参数文件output/inference_model ├── deploy.yaml # 部署配置文件 ├── model.pdiparams # 静态模型参数 ├── model.pdiparams.info # 附加信息一般无需关注 └── model.pdmodel # 静态模型文件DeployConfigpaddleseg/deploy/infer.py在推理时会解析该 yamlmodel/params属性基于 yaml 中Deploy.model、Deploy.params拼出完整路径transforms则通过manager.TRANSFORMS注册表按type键加载预处理算子并组合为T.Compose流水线。这也是为什么推理脚本只需传入--config即可自动还原与训练一致的预处理逻辑。若在导出或推理时遇到 shape 相关报错官方指南建议显式指定--input_shape如--input_shape 1 3 1024 1024导出固定输入形状的模型。3.2 运行 Benchmark 脚本仓库提供了两个层级的能力常规推理deploy/python/infer.py 面向真实预测场景支持批处理与可选--benchmark日志专项 Benchmarkdeploy/python/infer_benchmark.py 面向性能测试固定 batch1、可自定义 warmup/repeats是本 Benchmark 数据的方法来源。infer_benchmark.py的核心用法python deploy/python/infer_benchmark.py \ --config ./inference_model/deploy.yaml \ --image_path ./cityscapes_demo.png \ --save_dir ./output \ --use_trt True \ --precision fp32对比infer.pyinfer_benchmark.py新增了--warmup默认 50与--repeats默认 100两个参数用于控制预热轮数与计时轮数。其run()流程为先做 warmup 循环预热 GPU 与 TRT 引擎再对repeats次推理计时最后输出Average time: %.3f ms/img同时会把预测结果以伪彩色图保存到save_dir。3.3 关键参数速查表以下参数同时适用于 deploy/python/infer.py 与 deploy/python/infer_benchmark.pywarmup/repeats仅后者有参数作用是否必填默认值config导出模型时生成的deploy.yaml或 configs 目录下的训练配置是-image_path输入图片的路径、目录或文件列表是-batch_size单卡批大小Benchmark 脚本固定为 1否1save_dir结果保存目录否outputdevice推理设备可选 cpu/gpu否gpuuse_trt是否启用 TensorRT 加速devicegpu 时生效否FalseprecisionTRT 精度可选 fp32/fp16/int8devicegpu 且 use_trtTrue 时生效否fp32min_subgraph_sizeTRT 子图最小尺寸同上生效条件否3enable_auto_tune开启自动动态 shape 收集devicegpu、use_trtTrue 且 Paddle2.2 时生效否Falseauto_tuned_shape_file自动调优动态 shape 的临时文件否auto_tune_tmp.pbtxtcpu_threadsCPU 推理线程数devicecpu 时生效否10enable_mkldnn是否启用 MKL-DNN 加速 CPU 推理devicecpu 时生效否Falsebenchmark是否输出含环境、模型、配置与性能信息的日志infer.py 专有否Falsemodel_namebenchmark 日志中展示的模型名与 benchmark 配合使用否with_argmax对预测结果执行 argmax否Falsewarmup / repeats预热轮数 / 计时轮数infer_benchmark.py 专有否50 / 100组合使用规则官方说明CPU 部署--device cpu可配--cpu_threads与--enable_mkldnnGPU Naive 部署--device gpuGPU TensorRT 部署--device gpu --use_trt True并按需指定--precisionfp32加载常规预测模型执行 FP32 精度fp16加载常规预测模型执行 FP16 精度可加速推理int8加载量化后的预测模型执行 INT8 精度可加速推理。四、源码级原理精度开关与动态 shape 的实现4.1 precision 到 PrecisionType 的映射deploy/python/infer.py 的_init_gpu_config()用一张映射表把命令行精度翻译成 Paddle Inference 的枚举precision_map { fp16: PrecisionType.Half, fp32: PrecisionType.Float32, int8: PrecisionType.Int8 }开启 TRT 时调用enable_tensorrt_engine其中workspace_size1 301GB 工作空间、max_batch_size1、precision_modeprecision_mode、use_calib_modeFalse。use_calib_modeFalse意味着 INT8 模式要求加载的模型本身是量化导出的而非在推理时在线校准这与文档int8加载量化预测模型的说明一致。4.2 TRT 动态 shape手动指定与自动调优两条路径由于分割模型输入尺寸可变开启 TRT 时必须提供动态 shape 信息。源码中有两条路径手动路径默认set_trt_dynamic_shape_info指定min[1,3,100,100]、max[1,3,2000,3000]、opt[1,3,512,1024]三组 shape。若你的图片分辨率不在该区间内推理可能报错自动调优路径enable_auto_tune True时先用部分测试数据离线收集各 TRT 子图的动态 shape 范围collect_shape_range_info写入auto_tune_tmp.pbtxt再通过enable_tuned_tensorrt_dynamic_shape加载。这正好对应官方文档中针对报错(InvalidArgument) some trt inputs dynamic shape info not set的解决方案——遇到该错误时设置--enable_auto_tune True即可该能力要求 Paddle 2.2deploy/python/infer.py 的use_auto_tune通过hasattr检查版本兼容性。此外infer.py在创建 predictor 失败时会捕获异常并提示If the above error is (InvalidArgument) some trt inputs dynamic shape info not set ..., please set --enable_auto_tuneTrue to use auto_tune.与官方部署指南中的排障建议相互印证。4.3 Benchmark 计时口径的实现细节infer_benchmark.py的PredictorBenchmark.run()是计时核心logger.info(Warmup) for _ in range(args.warmup): self.predictor.run() logger.info(Infer) start_time time.time() for _ in range(args.repeats): self.predictor.run() results output_handle.copy_to_cpu() end_time time.time() avg_time (end_time - start_time) * 1000 / args.repeats两次predictor.run()之间只夹了一次copy_to_cpu()将结果拷回主机计时区间不包含图像解码、预处理与后处理——这正是原文档运行耗时为纯模型预测时间的源码依据。CPU 端拷贝对 GPU 推理耗时的影响可忽略因此该口径在 CPU/GPU 两侧均成立。同时脚本提供--resize_width/--resize_height参数默认均为 0按原始分辨率走deploy.yaml中的 transforms若显式设置则会读取 yaml 的Deploy.transforms并在最前面插入一个Resize(target_size[w,h])算子方便在低分辨率下快速验证性能。4.4 与 TIPC 基准测试的衔接仓库的 TIPCTest In PaddleCloud体系将上述推理能力与基准测试联动例如 test_tipc/configs/pp_liteseg_stdc1/train_infer_python.txt 中infer 段直接调用deploy/python/infer.py并开启--benchmark:True可输出含环境、模型、配置与性能信息的日志而infer_benchmark_params段则给出随机输入{float32,[3,1024,1024]}用于自动化性能摸底。这说明官方既提供了本文所述的文档级手工 Benchmark 路径也内置了可脚本化、可回归的性能测试通道。五、结论与选型建议回到这份 Benchmark可以形成以下可执行的工程判断先实测再选型TensorRT 对小模型如 UNet可能反而变慢务必以自身模型的实际数据为准FP16 作为默认加速选项表中 7 个模型 FP16 相对 Naive FP32 均有可观加速EMANet 约 3.4×且精度损失可忽略INT8 谨慎使用加速比与精度保持性因模型而异DeepLabV3P 显著受益DNLNet 无收益且需要额外准备量化模型动态 shape 是 TRT 部署的常见坑优先用--enable_auto_tune自动收集或确保输入尺寸落在手动指定的 min/max/opt 范围内。若需深入掌握推理部署全流程可继续阅读仓库中的 Python 推理部署指南、模型导出指南 以及推理脚本源码 deploy/python/infer.py 与 deploy/python/infer_benchmark.py。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载相关推荐PaddleSeg 语义分割模型 FastDeploy 部署实战CPU/GPU 推理与 Paddle-TensorRT 加速PaddleSeg 语义分割模型 FastDeploy 部署实战CPU/GPU 推理与 Paddle TensorRT 加速 本篇指南基于 PaddleSeg人工智能计算机视觉预训练PaddleDetection 推理 Benchmark 实战指南环境搭建、测试方法、FP32/FP16 与 TensorRT 加速性能全解析PaddleDetection 推理 Benchmark 实战指南环境搭建、测试方法、FP32/FP16 与 TensorRT 加速性能全解析 本篇技术指南以人工智能深度学习计算机视觉PaddleDetection 推理 Benchmark 全指南环境搭建、测试方法与 TensorRT 加速性能实测PaddleDetection 推理 Benchmark 全指南环境搭建、测试方法与 TensorRT 加速性能实测 PaddleDetection 作为基于人工智能深度学习计算机视觉上一篇Feather框架安全最佳实践防止常见Web安全漏洞的完整方案下一篇embassy-mcxa HAL 开发指南从驱动架构到异步中断模式的设计实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网