Paddle-Lite终极精简指南:如何实现最小化编译仅保留核心功能

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

Paddle-Lite是飞桨高性能深度学习端侧推理引擎,通过最小化编译仅保留核心功能,能显著减小库文件体积,提升在移动和边缘设备上的部署效率。本文将详细介绍如何通过裁剪预测库功能,实现Paddle-Lite的极致精简。

📌 为什么需要最小化编译?

Paddle-Lite默认编译会将所有已注册的算子打包到预测库中,导致库文件体积较大。而裁剪预测库能针对具体模型,只打包优化后该模型需要的算子,有效降低预测库文件大小。

体积优化效果对比

以Android动态预测库为例,裁剪后的体积优化效果显著:

测试模型 裁剪开关 libpaddle_light_api_shared.so 转化后模型中的 OP
mobilenetv1(armv8) 裁剪前 1.5 MB conv2d,depthwise_conv2d,fc,pool2d,softmax
mobilenetv1(armv8) 裁剪后 859 KB conv2d,depthwise_conv2d,fc,pool2d,softmax
mobilenetv1(armv7) 裁剪前 967 KB conv2d,depthwise_conv2d,fc,pool2d,softmax
mobilenetv1(armv7) 裁剪后 563 KB conv2d,depthwise_conv2d,fc,pool2d,softmax

📝 Paddle-Lite架构解析

Paddle-Lite的架构设计为裁剪提供了可能,其核心包括模型转换、优化和执行三个主要阶段。

Paddle-Lite架构图

从架构图可以看出,Paddle-Lite支持多种深度学习框架模型的转换,通过一系列优化Pass,最终生成针对不同硬件平台的优化模型和执行代码。这一架构使得裁剪特定算子和功能成为可能。

🔍 最小化编译完整流程

Paddle-Lite的最小化编译流程主要包括模型准备和针对性编译两个步骤。

Paddle-Lite工作流程图

Step 1. 准备模型

首先需要准备符合要求的模型文件,Paddle-Lite支持以下五种模型格式:

  • 格式一:model + var1 + var2 + ...
  • 格式二:model + var1 + var2 + ...
  • 格式三:pdmodel + pdiparams
  • 格式四:model + params
  • 格式五:model + weights

将所有需要支持的模型放入同一个文件夹,例如:

/models
  |- mobilenet_v1
  |       |-- model
  |       |-- params
  |- shufflenet_v1
          |-- __model__
          |-- var1
          |-- var2
          |-- ...

Step 2. 根据模型编译预测库

根据目标平台的不同,Paddle-Lite提供了不同的编译脚本,可以针对性地编译预测库。

编译Android预测库
cd Paddle-Lite
./lite/tools/build_android_by_models.sh /models
# “模型文件夹的绝对路径” 作为脚本输入

编译产出位于:Paddle-Lite/android_lib,包含不同架构的预测库、模型转换工具和优化后的模型。

你还可以通过修改build_android_by_models.sh脚本调整编译选项:

# Paddle-Lite/lite/tools/build_android_by_models.sh
 8 WITH_LOG=OFF      # (1)可以修改 ON:运行时输出日志  OFF: 运行时不输出日志
 9 WITH_CV=ON        # (2)可以修改 ON:包含图像处理API OFF:不含图像处理 API
10 WITH_EXCEPTION=ON # (3)可以修改 ON:DEBUG 选项(可回溯错误信息)
11 TOOL_CHAIN=clang  #  (4) DNK 编译器: 可选择 clang 或着 gcc
编译iOS预测库
cd Paddle-Lite
./lite/tools/build_ios_by_models.sh --model_dir=/models
# “模型文件夹的绝对路径” 作为脚本输入

编译脚本支持多种选项参数:

--with_metal: (OFF|ON)         是否编译 iOS GPU预测库,默认为 OFF
--with_extra: (OFF|ON)         是否编译 OCR/NLP 模型相关 kernel&OP,默认为 OFF,只编译 CV 模型相关 kernel&OP
--with_cv: (OFF|ON)            是否编译 CV 相关预处理库, 默认为 OFF
--with_exception: (OFF|ON)     是否在错误发生时抛出异常,默认为 OFF
--model_dir: (Paddle 模型目录)   Paddle 模型目录,可以放多个模型,每个模型以子目录形式放置在该目录

可以通过以下命令查看完整的参数选项:

./lite/tools/build_ios_by_models.sh help

⚙️ 模型优化工具Opt的使用

Paddle-Lite提供了模型优化工具Opt,可以对模型进行优化,进一步减小模型体积并提高推理性能。

Opt工具帮助信息

Opt工具支持多种优化选项,包括模型量化、算子融合等,可以根据实际需求进行配置。详细使用方法可以参考官方文档docs/source_compile/library_tailoring.rst

📚 总结

通过最小化编译,Paddle-Lite能够针对特定模型和硬件平台,只保留核心功能,显著减小库文件体积,非常适合在资源受限的移动和边缘设备上部署。本文介绍的方法可以帮助开发者快速实现Paddle-Lite的精简部署,提升应用性能和用户体验。

如果你想了解更多关于Paddle-Lite的使用和优化技巧,可以参考官方文档和示例代码,进一步探索Paddle-Lite的强大功能。

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

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐