Paddle-Lite x86 部署完全指南:支持现状、参考示例与自编译部署库实践
2026/9/16 23:12:16 网站建设 项目流程

Paddle-Lite x86 部署完全指南:支持现状、参考示例与自编译部署库实践

【免费下载链接】Paddle-LitePaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎)项目地址: https://gitcode.com/GitHub_Trending/pa/Paddle-Lite

本文围绕 Paddle-Lite 在 x86 平台上的预测部署展开,覆盖已验证的芯片/设备/模型支持范围、官方 generic demo 的完整运行流程,以及从源码自行编译 x86 部署库并替换到示例工程的方法。读完后,你可以独立完成:在 x86 设备上运行图像分类等参考示例、按需要切换模型与测试图片、并通过build_linux.sh产出可分发的libpaddle_full_api_shared.so/libpaddle_light_api_shared.so部署库。

一、x86 支持现状

1.1 芯片与设备

根据 x86 部署文档,Paddle-Lite 已支持在 x86 设备上进行预测部署,当前支持范围如下:

类别已验证支持对象
x86 芯片Intel(R) Xeon(R) Gold 6271、ZHAOXIN KaiSheng KH-37800D 等
x86 设备搭载 x86 芯片的设备,如 GNS-V40 等

1.2 已验证支持的 Paddle 模型

x86 后端经过验证的模型覆盖面较广,横跨图像分类、目标检测、姿态检测、人脸检测、关键点检测、OCR、NLP、生成网络、推荐系统、图像分割与视频分类。完整清单如下(原文档为每个模型提供了对应的模型包下载地址,可按需获取):

图像分类

AlexNet、DarkNet53、DeiT、DenseNet121、DPN68、EfficientNetB0、GhostNet、GoogLeNet、HRNet-W18、Inception-v3、Inception-v4、MobileNet-v1、MobileNet-v2、MobileNetV3_large、MobileNetV3_small、PP-LCNet、Res2Net50、ResNet-18、ResNet-50、ResNet-101、ResNeXt50、SE_ResNet50、ShuffleNetV2、SqueezeNet-v1、VGG16、VGG19、ViT

目标检测

Picodet、PP-YOLO_mbv3、PP-YOLO_r50vd_dcn、PPYOLO_tiny、PP-YOLOv2_r50vd_dcn、SSD-MobileNetV1(1.8)、SSD-MobileNetV1(2.0+)、SSDLite-MobileNetV3_large、SSDLite-MobileNetV3_small、SSD-VGG16、YOLOv3-DarkNet53、YOLOv3-MobileNetV1、YOLOv3-MobileNetV3、YOLOv3-ResNet50_vd、YOLOv4

姿态检测 / 人脸检测 / 关键点检测

  • 姿态检测:PP-TinyPose
  • 人脸检测:BlazeFace、FaceBoxes
  • 关键点检测:HigherHRNet、HRNet

文本检测 / 文本识别 / 端到端检测识别

ch_ppocr_mobile_v2.0_det、ch_ppocr_mobile_v2.0_rec、ch_ppocr_server_v2.0_det、ch_ppocr_server_v2.0_rec、ch_PP-OCRv2_det、ch_PP-OCRv2_rec、CRNN-mv3-CTC、e2e_server_pgnetA

自然语言处理 / 语义理解

BERT、ERNIE、ERNIE-TINY、Transformer

生成网络 / 推荐系统 / 图像分割 / 视频分类

  • 生成网络:ESRGAN
  • 推荐系统:DeepFM、NAML、NCF、Wide&Deep
  • 图像分割:BiseNetV2、DeepLabV3+(CityScapes)、PP-HumanSeg-Lite、PP-HumanSeg-Server(DeepLabV3+)、SegFormer、STDCSeg、U-Net
  • 视频分类:PP-TSN

更多开源模型的支持情况可参考 开源模型支持列表。

二、参考示例演示:generic demo 的运行流程

官方提供PaddleLite-generic-demo.tar.gz通用示例包(下载地址见 x86 部署文档 原文),解压后即包含图像分类、目标检测等多个可直接运行的示例。

2.1 准备本地编译环境

  • 为了保证编译环境一致,建议使用 Docker 开发环境进行配置;
  • 环境搭建可以参考 编译环境准备。

2.2 示例包目录结构

解压后清单如下,理解目录结构是后续所有操作的基础:

- PaddleLite-generic-demo - image_classification_demo - assets - configs - imagenet_224.txt # config 文件 - synset_words.txt # 1000 分类 label 文件 - datasets - test # dataset - inputs - tabby_cat.jpg # 输入图片 - outputs - tabby_cat.jpg # 输出图片 - list.txt # 图片清单 - models - resnet50_fp32_224 # Paddle non-combined 格式的 resnet50 float32 模型 - __model__ # Paddle fluid 模型组网文件,可拖入 netron 进行可视化显示网络结构 - bn2a_branch1_mean # Paddle fluid 模型参数文件 - bn2a_branch1_scale ... - shell - CMakeLists.txt # 示例程序 CMake 脚本 - build.linux.amd64 # 已编译好的,适用于 amd64 - demo # 已编译好的,适用于 amd64 的示例程序 - build.linux.arm64 # 已编译好的,适用于 arm64 - demo ... - demo.cc # 示例程序源码 - build.sh # 示例程序编译脚本 - run.sh # 示例程序本地运行脚本 - run_with_ssh.sh # 示例程序 ssh 运行脚本 - run_with_adb.sh # 示例程序 adb 运行脚本 - libs - PaddleLite - android - arm64-v8a - armeabi-v7a - linux - amd64 - include # Paddle Lite 头文件 - lib # Paddle Lite 库文件 - libpaddle_full_api_shared.so # 预编译 Paddle Lite full api 库 - libpaddle_light_api_shared.so # 预编译 Paddle Lite light api 库 - arm64 - include - lib - armhf ... - OpenCV # OpenCV 预编译库 - object_detection_demo # 目标检测示例程序

几个关键点:

  1. assets/models下是Paddle non-combined 格式__model__组网文件 + 若干参数文件)的模型,这决定了示例程序走的是full API(CxxConfig)在线转换路径;
  2. libs/PaddleLite/linux/amd64/下同时提供了libpaddle_full_api_shared.so(全量 API,可加载非组合模型并在运行时优化)与libpaddle_light_api_shared.so(轻量 API,只加载 opt 优化后的 .nb 模型)两套预编译库;
  3. shell/目录下按目标平台(linux amd64 / arm64)分目录存放已编译好的demo可执行文件,并附build.sh用于重新编译。

2.3 运行图像分类示例

进入PaddleLite-generic-demo/image_classification_demo/shell/目录后,可以运行 mobilenet_v1_int8_224_per_layer 模型观察性能与结果:

# 运行 mobilenet_v1_int8_224_per_layer 模型 # For linux amd64 # 本地执行 $ ./run.sh mobilenet_v1_int8_224_per_layer imagenet_224.txt test linux amd64 cpu # 通过 SSH 远程执行 $ ./run_with_ssh.sh mobilenet_v1_int8_224_per_layer imagenet_224.txt test linux amd64 cpu <IP地址> 22 <用户名> <密码>

正常运行后,输出 Top5 分类结果与预处理/预测/后处理耗时统计:

Top1 Egyptian cat - 0.500662 Top2 tabby, tabby cat - 0.407661 Top3 tiger cat - 0.074697 Top4 lynx, catamount - 0.013188 Top5 ping-pong ball - 0.000638 Preprocess time: 27.854000 ms, avg 27.854000 ms, max 27.854000 ms, min 27.854000 ms Prediction time: 55.152000 ms, avg 55.152000 ms, max 55.152000 ms, min 55.152000 ms Postprocess time: 6.212000 ms, avg 6.212000 ms, max 6.212000 ms, min 6.212000 ms

参数含义为:<模型名> <config 文件名> <数据集名> <系统> <架构> <运行设备>。若需要更换测试模型,例如切换到 resnet50,只需把模型名参数替换:

# 本地执行 $ ./run.sh resnet50_fp32_224 imagenet_224.txt test linux amd64 cpu # 通过 SSH 远程执行 $ ./run_with_ssh.sh resnet50_fp32_224 imagenet_224.txt test linux amd64 cpu <IP地址> 22 <用户名> <密码>

2.4 更换测试图片与重新编译示例

  • 更换测试图片:将图片拷贝到PaddleLite-generic-demo/image_classification_demo/assets/datasets/test/inputs目录下,同时将图片文件名添加到PaddleLite-generic-demo/image_classification_demo/assets/datasets/test/list.txt中即可;
  • 重新编译示例程序:在shell/目录下直接运行
# For linux amd64 $ ./build.sh linux amd64

2.5 源码佐证:仓库中的 x86 C++ Demo

PaddleLite-generic-demo的推理核心与仓库内的 x86 demo 源码逻辑一致。仓库提供了 x86_mobilenetv1_full_demo 与 x86_mobilenetv1_light_demo 两套完整示例,可对照阅读:

full API 示例(mobilenet_full_api.cc)的关键流程是:

  1. 创建 CxxConfigconfig.set_model_dir(model_dir)指定 non-combined 模型目录;
  2. 设置可用 Place:当设备不支持 OpenCL 时回退到 CPU,仅保留Place{TARGET(kX86), PRECISION(kFloat)}Place{TARGET(kHost), PRECISION(kFloat)}(见 L160-L169)。注释中也明确说明“大多数 x86 设备只支持 fp32”;
  3. 创建预测器并落盘优化模型CreatePaddlePredictor<CxxConfig>(config)之后调用SaveOptimizedModel(optimized_model_dir, LiteModelType::kNaiveBuffer)将在线优化结果保存为 naive buffer 模型(L217-L221);
  4. 基准测试循环:默认repeats=10, warmup=10,支持通过命令行传入<paddle_uncombined_model_dir> <raw_input_shapes> <repeats> <warmup> <print_output>(L315-L351),输出 1st/max/min/avg 耗时统计。

对应的 CMakeLists.txt.in 中,Linux 下链接关系为:-lpaddle_full_api_shared(light 示例则为-lpaddle_light_api_shared)+-liomp5+-ldl。这说明 x86 部署运行时除了 Paddle Lite 主库外,还依赖 Intel iOMP 线程库,这也是为什么编译脚本中会引入 mklml 组件。C++ Demo 的整体用法说明可参考 lite/demo/cxx/README.md。

三、从源码编译 x86 部署库

如果官方预编译库版本不匹配,需要自己编译一份支持 x86 的 Paddle Lite 库。

3.1 下载源码

$ git clone https://gitcode.com/GitHub_Trending/pa/Paddle-Lite $ cd Paddle-Lite $ git checkout <release-version-tag>

3.2 编译生成 x86 部署库

编译入口是 lite/tools/build_linux.sh,x86 相关命令如下:

# tiny_publish 编译 $ ./lite/tools/build_linux.sh --arch=x86 # full_publish 编译 $ ./lite/tools/build_linux.sh --arch=x86 full_publish

从脚本实现来看,有几个值得注意的细节:

  1. --arch=x86的处理:脚本在 L149-L158 检测到ARCH == x86时,会设置with_x86=ON并强制WITH_TINY_PUBLISH=OFF,即 x86 构建走完整发布路径,full_publish参数(L811-L814)同样通过WITH_TINY_PUBLISH=OFF控制产物范围;
  2. 构建目录约定make_publish_so将构建输出放到build.lite.linux.$ARCH.$TOOLCHAIN(L336),因此 x86 + gcc 的产物目录即build.lite.linux.x86.gcc,后文替换库文件的路径正来源于此;
  3. x86 专属编译选项(帮助信息见 L427-L430):
    • --with_static_mkl=ON/OFF:是否编译静态 MKL 库,默认OFF
    • --with_avx=ON/OFF:是否启用 AVX 指令集,默认ON(L29)。
  4. 第三方依赖:当开启 x86 后端时,cmake/backends/x86.cmake 会自动下载并集成xbyak(JIT)、xxhashlibxsmmmklmlmkldnn等第三方组件。

3.3 x86 后端的源码结构

编译出的 x86 后端位于 lite/backends/x86/,核心文件包括:

  • cpu_info.cc/cpu_info.h:运行时检测 CPU 型号与指令集能力;
  • mklml.cc/mklml.h:对 mklml 数学库的封装接口;
  • jit/fluid/math/:JIT 生成 kernel、算子实现与数学运算;
  • target_wrapper.cc:x86 TargetWrapper,其中MemcpySync直接退化为std::copy_n(L23-L33),因为 x86 后端与 Host 共用主存,无设备间拷贝开销。

3.4 替换头文件和库

编译完成后,将产物替换到示例包的对应位置:

# 替换 include 目录 $ cp -rf build.lite.linux.x86.gcc/inference_lite_lib/cxx/include/ PaddleLite-generic-demo/libs/PaddleLite/linux/amd64/include/ # 替换 libpaddle_full_api_shared.so $ cp build.lite.linux.x86.gcc/inference_lite_lib/cxx/lib/libpaddle_full_api_shared.so PaddleLite-generic-demo/libs/PaddleLite/linux/amd64/lib/ # 替换 libpaddle_light_api_shared.so $ cp build.lite.linux.x86.gcc/inference_lite_lib/cxx/lib/libpaddle_light_api_shared.so PaddleLite-generic-demo/libs/PaddleLite/linux/amd64/lib/

替换头文件后需要重新编译示例程序./build.sh linux amd64),否则会出现新旧 ABI 不一致的链接/运行问题。

3.5 两套 API 的选用建议

结合 lite/api/paddle_api.h 的定义:

  • CxxConfig(full API):可加载 non-combined / combined 两种模型格式,在运行时执行 IR 优化,还支持set_quant_modelset_sparse_model等优化配置;首次运行耗时较长,可通过SaveOptimizedModel落盘优化结果供后续使用;
  • MobileConfig(light API):跳过 IR 优化等阶段,仅加载 opt 工具离线优化后的模型,创建预测器更快、库体积更小,是生产部署的推荐路径。

四、实战注意事项小结

事项说明
目标平台命令中的linux amd64 cpu参数组合决定使用哪套预编译库与运行设备,x86 设备使用amd64 + cpu
模型格式generic demo 的assets/models为 non-combined 模型,走 full API 在线优化;生产环境建议用 opt 工具转 .nb 模型 + light API
远程运行run_with_ssh.sh支持把示例推送到远程 x86 设备执行,参数依次为 IP、端口、用户名、密码
编译产物路径build.lite.linux.x86.gcc/inference_lite_lib/cxx/{include,lib},注意 gcc 工具链后缀
AVX / MKL默认启用 AVX、动态链接 MKL;部署到不支持 AVX 的老旧 x86 CPU 或需要免依赖部署时,可考虑--with_avx=OFF/--with_static_mkl=ON重新编译

至此,从模型支持范围确认、generic demo 快速验证,到源码级编译与库替换的完整闭环即全部覆盖。若在部署过程中需要进一步裁剪库体积,可继续阅读 库裁剪 相关文档,配合--with_strip参数生成针对指定模型的最小化部署库。

【免费下载链接】Paddle-LitePaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎)项目地址: https://gitcode.com/GitHub_Trending/pa/Paddle-Lite

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询