news 2026/9/17 14:28:43

Paddle Lite 预测库构建详解:基础预测库与全量预测库(build_extra)的选型与编译

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Paddle Lite 预测库构建详解:基础预测库与全量预测库(build_extra)的选型与编译

Paddle Lite 预测库构建详解:基础预测库与全量预测库(build_extra)的选型与编译

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

Paddle Lite 的预测库按算子(OP)覆盖范围分为基础预测库全量预测库两种形态:前者体积小、启动快,只收录常用 CV 算子;后者收录全部算子,可支撑 OCR、NLP 等序列模型,但产物更大。本文以 docs/source_compile/library.md 为骨架,结合编译脚本 lite/tools/build.sh、构建函数 cmake/functions.cmake 与算子清单 docs/quick_start/support_operation_list.md,完整讲解build_extra编译选项的作用、两种库的差异、各自的编译命令以及底层源码实现机制,帮助你根据部署场景选对预测库形态。

一、为什么要有"基础"与"全量"两种预测库

端侧推理引擎面对的是两类截然不同的需求:

  • 追求极致体积:移动 App 集成预测库时,库体积直接进入安装包。只部署图像分类、检测等常规模型的场景,不需要为用不到的算子付体积代价;
  • 追求模型覆盖面:OCR(文字检测/识别)、NLP(翻译、语义理解)等模型依赖序列相关算子(如sequence_*search_*系列),这些算子只有在开启全量编译时才会被打包。

因此在 Paddle Lite 中:

  • 基础预测库只包含基础 CV 算子(OP),体积较小,支持的模型相对固定;
  • **全量预测库(with_extra)**包含所有 Lite 算子(基础算子 + 附加算子),体积较大,支持模型更多。

二者的切换完全由编译选项build_extra控制:

编译形态build_extra产物特点适用场景
基础预测库OFF体积小、支持常用模型移动端部署、安装包体积敏感
全量预测库ON算子全、模型覆盖广OCR / NLP / 序列模型、调试测试

二、build_extra编译选项:默认值与生效机制

2.1 默认值

原文档 docs/source_compile/library.md 明确指出:编译时由编译选项build_extra(默认为OFF)控制,--build_extra=OFF时编译基础预测库--build_extra=ON时编译全量预测库

对应的 CMake 配置项为LITE_BUILD_EXTRA,其在 docs/source_compile/compile_options.md 中的定义如下:

编译选项说明默认值
LITE_BUILD_EXTRA编译全量预测库,包含更多算子和模型支持OFF

一个需要注意的细节:虽然 CMake 层面LITE_BUILD_EXTRA默认为OFF,但 lite/tools/build.sh 脚本内部声明的BUILD_EXTRA=ON默认值为ON。也就是说,如果通过build.sh构建且不显式传入--build_extra,脚本会默认产出全量库。因此,当你的目标是基础预测库时,务必显式加上--build_extra=OFF,不要依赖"默认值"。

2.2 源码层面如何生效

从源码结构看,build_extra对算子/内核的"收录"控制发生在 CMake 配置阶段,核心机制在 cmake/functions.cmake 的两个函数中:

  • add_operator(TARGET level):算子注册入口,level取值为basicextratrain之一;
  • add_kernel(TARGET device level):内核注册入口,level取值basicextra

关键逻辑(cmake/functions.cmake):

if ("${level}" STREQUAL "extra" AND (NOT LITE_BUILD_EXTRA)) return() endif()

即:当某个算子/内核被标记为extra级别,而构建时未开启LITE_BUILD_EXTRA,该源文件会被直接跳过,不会进入ops_src_list/kernels_src_list参与编译。与此配套,cmake/configure.cmake 在开启该选项时会向编译器注入宏定义:

if (LITE_BUILD_EXTRA) add_definitions("-DLITE_BUILD_EXTRA") endif(LITE_BUILD_EXTRA)

因此,基础预测库与全量预测库的差异,本质上是编译期通过level=extra标记将附加算子/内核排除或纳入,而不是运行时行为差异。

三、基础预测库(--build_extra=OFF

3.1 支持功能

  • 基础算子(默认编译的算子)。原文档给出的是78 个基础算子;以当前仓库的算子清单 docs/quick_start/support_operation_list.md 为准,当前统计为91 个基础算子(后续版本持续扩充,具体以所拉取分支的清单文档为准);
  • 9 个基础模型
  • 3 个 int8 量化模型

3.2 支持的模型

  1. Fluid 基础模型(来源为 PaddlePaddle/models 系列模型库):
mobilenetV1 mnasnet yolov3 ssd_mobilenetv1 shufflenet_v2 mobilenetV2 resnet50 unet squeezenet_v11
  1. int8 量化模型:
mobilenet_v1 mobilenet_v2 resnet50

3.3 特点

轻量级预测库,体积更小,支持常用模型。适合对安装包大小敏感的移动端常规 CV 推理场景。

3.4 编译方法

编译时设置--build_extra=OFF(CMake 层面的默认值)即可编译出基础预测库。例如为 Android armv8 架构、gcc 编译器、C++ 静态链接 STL 构建:

./lite/tools/build.sh --arm_os=android --arm_abi=armv8 --arm_lang=gcc --android_stl=c++_static tiny_publish

四、全量预测库(--build_extra=ON

4.1 支持功能

全量预测库包含 Paddle Lite 的全部算子,即"基础算子 + 附加算子"。按当前仓库 docs/quick_start/support_operation_list.md 的统计,当前共计支持算子 278 个,其中基础算子 91 个、附加算子 187 个,附加算子需开启build_extra才会参与编译。

以 docs/images/all_ops.png 的算子-硬件支持矩阵为例,每个算子在 ARM、OpenCL、Metal、昆仑芯 XPU、X86、寒武纪 MLU、昇腾 NPU、联发科 APU、麒麟 NPU、TIM-VX、Android NNAPI、OpenVINO 等硬件上的支持情况各不相同,全量库能最大化保证"模型里出现的算子都能找到可执行的内核"。

4.2 特点

包含更多算子、支持更多模型(尤其序列相关模型,如 OCR、NLP),但体量更大。

4.3 编译方法

设置--build_extra=ON即可编译出全量预测库,其余参数与基础库保持一致:

./lite/tools/build.sh --arm_os=android --arm_abi=armv8 --arm_lang=gcc --android_stl=c++_static --build_extra=ON tiny_publish

需要说明的是,由于 lite/tools/build.sh 中BUILD_EXTRA的脚本默认值即为ON,显式写出--build_extra=ON更多是出于可读性和确定性考虑。

五、附加算子是什么?何时必须开启

附加算子指level=extra级别的算子。按照构建脚本 lite/tools/build.sh 中--build_extra参数的官方说明:

--build_extra: (OFF|ON); controls whether to publish extra operators and kernels for (sequence-related model such as OCR or NLP)

即:附加算子与内核主要面向序列相关模型(如 OCR、NLP)。典型代表包括:

  • 序列类:sequence_convsequence_poolsequence_expandsequence_softmaxsequence_reversesequence_topk_avg_pooling等;
  • 搜索/匹配类:search_fcsearch_grnnsearch_seq_fcmatch_matrix_tensor等;
  • OCR/NLP 常用:crf_decodingbeam_searchbeam_search_decodelstmgrugru_unitrnn等。

这些算子在 docs/quick_start/support_operation_list.md 的"附加算子"表格中均被列为需要开启--build_extra=ON(该文档中写作--with_extra=ON,与build_extra是同一开关,仅命名表述不同)才会编译。

命名说明:build_extra(build.sh 参数)、LITE_BUILD_EXTRA(CMake 选项)与部分历史文档中的with_extra指向同一个开关。文档 docs/quick_start/support_operation_list.md 使用--with_extra=ON表述,实际传入build.sh时请使用--build_extra=ON

六、build.sh常用参数与任务速查

tiny_publish只是 lite/tools/build.sh 支持的任务之一。完整的脚本用法(含参数解析、合法性校验,见 lite/tools/build.sh)如下:

6.1 常用参数

参数取值说明
--arm_osandroid/ios/ios64/armlinux目标操作系统
--arm_abiarmv8/armv7目标 ABI 架构
--arm_langgcc(当前仅支持 gcc,clang 预留)ARM 编译工具链
--android_stlc++_static/c++_sharedAndroid 下 STL 链接方式
--build_extraOFF/ON是否编译附加算子与内核(序列模型如 OCR/NLP 需要)
--with_logOFF/ON(默认 ON)是否输出日志信息
--with_exceptionOFF/ON(默认 OFF)出错时是否抛出异常
--with_profileOFF/ON(默认 OFF)是否支持耗时性能统计
--with_precision_profileOFF/ON(默认 OFF)是否支持精度分析
--build_trainOFF/ON是否发布训练算子与内核(仅 full_publish 支持)
--build_pythonOFF/ON是否发布 Python API 库(不支持 Android / iOS)
--build_javaOFF/ON(默认 ON)是否发布 Java API 库(仅 Android 支持)
--build_cvOFF/ON是否编译 CV 图像加速库
--android_api_level数字或DefaultAndroid API Level,ARMv7 最低 16,ARMv8 最低 21
--ios_deployment_target默认 9.0iOS 最低兼容系统版本

6.2 常用任务

任务说明
tiny_publish编译移动端轻量部署库(基础库 / 全量库由--build_extra决定)
full_publish编译全功能库(含测试与调试能力)
test编译全部单元测试
benchmark编译 Android benchmark 程序
ios编译 iOS 预测库
x86/test_x86/x86_benchmark编译 X86 平台预测库、测试或基准

参数与任务的关系在 lite/tools/build.sh 的main函数中完成解析,tiny_publish任务最终调用make_tiny_publish_so,并将-DLITE_BUILD_EXTRA=$BUILD_EXTRA传入 CMake(见 lite/tools/build.sh),从而与add_operator/add_kernellevel=extra过滤逻辑衔接。

七、选型建议与注意事项

  1. 安装包体积敏感、模型为常规 CV 分类/检测/分割:选择基础预测库,显式传--build_extra=OFF
  2. 模型包含序列类算子(OCR、NLP、搜索推荐等):必须使用全量预测库,--build_extra=ON,否则推理阶段会因缺少算子内核而失败;
  3. 调试与测试阶段:使用full_publish任务或全量库,便于覆盖全部算子路径;
  4. 体积仍有富余时:还可以配合按模型裁剪的LITE_BUILD_TAILOR选项进一步压缩库体积,详见 docs/source_compile/library_tailoring.rst;
  5. 具体某个算子在各类硬件上是否有内核实现,可在 docs/quick_start/support_operation_list.md 的算子-硬件矩阵中逐一核对;更多编译选项的完整说明见 docs/source_compile/compile_options.md。

相关文档导航

  • 本文主体依据:docs/source_compile/library.md
  • 支持算子清单(基础算子/附加算子与硬件支持矩阵):docs/quick_start/support_operation_list.md
  • 编译选项总表:docs/source_compile/compile_options.md
  • 按模型裁剪预测库:docs/source_compile/library_tailoring.rst
  • 编译脚本实现:lite/tools/build.sh
  • 算子/内核收集机制:cmake/functions.cmake 与 cmake/configure.cmake

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 14:27:46

Superlinked数值嵌入指南:MIN/MAX与SIMILAR两种模式的实战区别

Superlinked数值嵌入指南:MIN/MAX与SIMILAR两种模式的实战区别 【免费下载链接】sie Open-source inference server and production cluster for all the models your agent needs. 项目地址: https://gitcode.com/GitHub_Trending/su/sie 在 Superlinked 向…

作者头像 李华
网站建设 2026/9/17 14:27:44

Source SDK 2013 三步跑通:从零搭好你的第一个 Source 引擎 Mod

Source SDK 2013 三步跑通:从零搭好你的第一个 Source 引擎 Mod 【免费下载链接】source-sdk-2013 The 2013 edition of the Source SDK 项目地址: https://gitcode.com/GitHub_Trending/so/source-sdk-2013 这是 Source SDK 2013,Valve 官方提供…

作者头像 李华
网站建设 2026/9/17 14:27:21

写作压力小了!2026最新AI论文平台测评:好用工具推荐与对比分析

2026年真正好用的AI论文平台,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

作者头像 李华
网站建设 2026/9/17 14:27:13

擦亮眼睛!并非所有 AI 都适合写论文,2026 导师力荐工具汇总

每年毕业季,无数同学深陷论文难题:开题毫无思路、搭建框架耗费数日、初稿逻辑松散、查重标红泛滥、AI检测超标、格式反复被导师驳回。现如今市面上通用型AI工具遍地开花,但绝大多数通用大模型存在编造虚假参考文献、学术语句口语化、AI生成痕…

作者头像 李华
网站建设 2026/9/17 14:27:05

数据库小数存储选型:FLOAT、DECIMAL与BIGINT实战指南

1. 为什么小数存储不是“随便选个类型就行”的小事?在数据库设计里,FLOAT、DECIMAL、BIGINT这三个类型常被拿来存“带小数点的数”,但很多人一上来就拍脑袋:用FLOAT吧,省事;或者图省心直接上DECIMAL(10,2)&…

作者头像 李华
网站建设 2026/9/17 14:26:29

Spark与Flink核心区别详解:架构、实时性、编程模型与选型指南

1. 一个跑批老兵眼中的Spark和Flink做了这么多年数据开发,Spark和Flink这两套东西,几乎是大数据领域绕不开的两座大山。我自己从Spark 1.6时代就开始用,后来因为实时业务需要,又从零啃Flink,期间踩过的坑、写错的代码、…

作者头像 李华