ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

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

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-LitePaddle 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_extraOFF时编译基础预测库--build_extraON时编译全量预测库。对应的 CMake 配置项为LITE_BUILD_EXTRA其在 docs/source_compile/compile_options.md 中的定义如下编译选项说明默认值LITE_BUILD_EXTRA编译全量预测库包含更多算子和模型支持OFF一个需要注意的细节虽然 CMake 层面LITE_BUILD_EXTRA默认为OFF但 lite/tools/build.sh 脚本内部声明的BUILD_EXTRAON默认值为ON。也就是说如果通过build.sh构建且不显式传入--build_extra脚本会默认产出全量库。因此当你的目标是基础预测库时务必显式加上--build_extraOFF不要依赖默认值。2.2 源码层面如何生效从源码结构看build_extra对算子/内核的收录控制发生在 CMake 配置阶段核心机制在 cmake/functions.cmake 的两个函数中add_operator(TARGET level)算子注册入口level取值为basic、extra、train之一add_kernel(TARGET device level)内核注册入口level取值basic、extra。关键逻辑cmake/functions.cmakeif (${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)因此基础预测库与全量预测库的差异本质上是编译期通过levelextra标记将附加算子/内核排除或纳入而不是运行时行为差异。三、基础预测库--build_extraOFF3.1 支持功能基础算子默认编译的算子。原文档给出的是78 个基础算子以当前仓库的算子清单 docs/quick_start/support_operation_list.md 为准当前统计为91 个基础算子后续版本持续扩充具体以所拉取分支的清单文档为准9 个基础模型3 个 int8 量化模型。3.2 支持的模型Fluid 基础模型来源为 PaddlePaddle/models 系列模型库mobilenetV1 mnasnet yolov3 ssd_mobilenetv1 shufflenet_v2 mobilenetV2 resnet50 unet squeezenet_v11int8 量化模型mobilenet_v1 mobilenet_v2 resnet503.3 特点轻量级预测库体积更小支持常用模型。适合对安装包大小敏感的移动端常规 CV 推理场景。3.4 编译方法编译时设置--build_extraOFFCMake 层面的默认值即可编译出基础预测库。例如为 Android armv8 架构、gcc 编译器、C 静态链接 STL 构建./lite/tools/build.sh --arm_osandroid --arm_abiarmv8 --arm_langgcc --android_stlc_static tiny_publish四、全量预测库--build_extraON4.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_extraON即可编译出全量预测库其余参数与基础库保持一致./lite/tools/build.sh --arm_osandroid --arm_abiarmv8 --arm_langgcc --android_stlc_static --build_extraON tiny_publish需要说明的是由于 lite/tools/build.sh 中BUILD_EXTRA的脚本默认值即为ON显式写出--build_extraON更多是出于可读性和确定性考虑。五、附加算子是什么何时必须开启附加算子指levelextra级别的算子。按照构建脚本 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_conv、sequence_pool、sequence_expand、sequence_softmax、sequence_reverse、sequence_topk_avg_pooling等搜索/匹配类search_fc、search_grnn、search_seq_fc、match_matrix_tensor等OCR/NLP 常用crf_decoding、beam_search、beam_search_decode、lstm、gru、gru_unit、rnn等。这些算子在 docs/quick_start/support_operation_list.md 的附加算子表格中均被列为需要开启--build_extraON该文档中写作--with_extraON与build_extra是同一开关仅命名表述不同才会编译。命名说明build_extrabuild.sh 参数、LITE_BUILD_EXTRACMake 选项与部分历史文档中的with_extra指向同一个开关。文档 docs/quick_start/support_operation_list.md 使用--with_extraON表述实际传入build.sh时请使用--build_extraON。六、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当前仅支持 gccclang 预留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 LevelARMv7 最低 16ARMv8 最低 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_kernel的levelextra过滤逻辑衔接。七、选型建议与注意事项安装包体积敏感、模型为常规 CV 分类/检测/分割选择基础预测库显式传--build_extraOFF模型包含序列类算子OCR、NLP、搜索推荐等必须使用全量预测库--build_extraON否则推理阶段会因缺少算子内核而失败调试与测试阶段使用full_publish任务或全量库便于覆盖全部算子路径体积仍有富余时还可以配合按模型裁剪的LITE_BUILD_TAILOR选项进一步压缩库体积详见 docs/source_compile/library_tailoring.rst具体某个算子在各类硬件上是否有内核实现可在 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),仅供参考
返回列表