作者: Sam(甄峰) sam_code@hotmail.com
0:
简介:
Paddle
Lite是PaddlePaddle提供的高性能,轻量级深度学习推理框架。定位于支持移动端,嵌入式和边缘端在内的多种硬件平台。
支持多平台,包括:Android,iOS,
嵌入式Linux,Windows,MacOS和Linux主机。
支持多种语言:Java,Python,C++.
轻量化和高性能:针对移动端设备的机器学习进行优化,压缩模型和二进制文件体积,高效体积,降低内存消耗。
(Sam感觉Paddle Lite在GPU,ARM
Neon上的优化非常有效,实际测试比tf.keras+OpenCV DNN快很多)
1.
模型支持和优化:
1.1:模型支持:
Paddle
Lite框架支持PaddlePaddle深度学习框架产出的模型格式,其它如Caffe,Tensorflow,
Pytorch等框架产出的模型,可以通过X2Paddle工具转换为PaddlePaddle格式。PaddlePaddle需要使用优化工具opt优化为.nb文件后使用。
1.2:优化工具:
Paddle
Lite框架提供了优秀的加速,优化工具----opt。优化后的模型更轻量级,耗费资源更少,执行速度更快。(注意:
opt工具应该与Paddle Lite版本一致,否则容易出问题)
2.编译环境和编译过程:
2.1:预编译库:
PaddlePaddle提供了多种多样的预编译库。可以直接下载使用:
https://www.paddlepaddle.org.cn/lite/develop/quick_start/release_lib.html
从平台来说,支持Android, iOS, ARMLinux, x86-Linux, MacOS,
Windows. 如果只测试性能和做Demo,直接下载就够了。但实际使用中,还是有很大需要自己编译的。例如:
Sam在Android
Paddle-lite中需要一个clang+opencl+执行耗时分析等。预编译的版本不支持这种组合,于是需要自己编译。
另外,还有一种现实情况,因为paddle-lite库和OPT工具版本最好统一。但下载的预编译库和OPT工具版本对应困难。所以干脆选择paddle-lite和OPT工具全部自己编译。
2.2:编译环境:
Paddle lite的编译环境,根据编译平台(x86-Linux, ARM-Linux, MAC,
Windows)和目标平台(android, x86-linux, ARM-Linux, MAC,
iOS)的不同,需要不同的配置。但如果只是想编译Android,ARM-Linux,
x86-Linux,iOS版本的Paddle-Lite库,则可以使用PaddlePaddle提供的Docker来简化编译环境的搭建(需要编译平台是Linux)。
2.2.1:
Linux下使用Docker构建Paddle-Lite编译平台:
A. 从仓库拉取Docker镜像:
docker pull paddlepaddle/paddle-lite:2.0.0_beta
B. 获取对应版本的Paddle-Lite Source code:
git
clone https://gitee.com/paddlepaddle/paddle-lite.git
此时,下载的Source
code在paddle-lite目录,
这个Source code将用来编译paddle-lite library, 以及OPT工具。
C. 启动容器:
docker run -i -t --name
paddlelite-docker -v
$PWD/paddle-lite:Paddle_Lite paddlepaddle/paddle-lite:latest /bin/bash
(Docker使用: https://blog.sina.com.cn/s/blog_602f87700102ynra.html)
此时,可以看到Paddle lite Source mount 到
/Paddle_Lite目录内。现在可以编译了。
2.3: 编译:
2.3.1: paddle-lite android 版本编译选项:
在docker环境,进入Paddle_Lite目录,可以看到paddle lite的完整Source Code。
在lite/tools/build_android.sh即为编译Android 版本库的脚本。
可以修改其选项。
选项如下:
其中,Sam比较关注的是:
arch
toolchain
with_cv
with_extra
ON/OFF 是否编译完整算子
(最好加)
with_profile ON/OFF 是否打开执行耗时分析
with_opencl
ON/OFF 是否包含
OpenCL 编译 (如果需要GPU版本,则加入,它需要模型配合,即opt转换时,指定 opencl)
2.3.2: 编译:
lite/tools/build_android.sh
2.3.3: 编译opt:
./lite/tools/build.sh build_optimize_tool
编译结果在:
build.opt/lite/api/opt
3.
模型转换:
在使用Paddle lite推理之前,需要转化模型为 Paddle Lite 格式。
opt 可以将 PaddlePaddle 的部署模型格式转化为 Paddle Lite
支持的模型格式,期间执行的操作包括:
PaddleLite学习<一>初探
作者: Sam(甄峰) sam_code@hotmail.com
0: 简介:
Paddle Lite是PaddlePaddle提供的高性能,轻量级深度学习推理框架。定位于支持移动端,嵌入式和边缘端在内的多种硬件平台。
支持多平台,包括:Android,iOS, 嵌入式Linux,Windows,MacOS和Linux主机。
支持多种语言:Java,Python,C++.
轻量化和高性能:针对移动端设备的机器学习进行优化,压缩模型和二进制文件体积,高效体积,降低内存消耗。
(Sam感觉Paddle Lite在GPU,ARM Neon上的优化非常有效,实际测试比tf.keras+OpenCV DNN快很多)
1. 模型支持和优化:
1.1:模型支持:
Paddle Lite框架支持PaddlePaddle深度学习框架产出的模型格式,其它如Caffe,Tensorflow, Pytorch等框架产出的模型,可以通过X2Paddle工具转换为PaddlePaddle格式。PaddlePaddle需要使用优化工具opt优化为.nb文件后使用。
1.2:优化工具:
Paddle Lite框架提供了优秀的加速,优化工具----opt。优化后的模型更轻量级,耗费资源更少,执行速度更快。(注意: opt工具应该与Paddle Lite版本一致,否则容易出问题)
2.编译环境和编译过程:
2.1:预编译库:
PaddlePaddle提供了多种多样的预编译库。可以直接下载使用:
https://www.paddlepaddle.org.cn/lite/develop/quick_start/release_lib.html
从平台来说,支持Android, iOS, ARMLinux, x86-Linux, MacOS, Windows. 如果只测试性能和做Demo,直接下载就够了。但实际使用中,还是有很大需要自己编译的。例如:
Sam在Android Paddle-lite中需要一个clang+opencl+执行耗时分析等。预编译的版本不支持这种组合,于是需要自己编译。
另外,还有一种现实情况,因为paddle-lite库和OPT工具版本最好统一。但下载的预编译库和OPT工具版本对应困难。所以干脆选择paddle-lite和OPT工具全部自己编译。
2.2:编译环境:
Paddle lite的编译环境,根据编译平台(x86-Linux, ARM-Linux, MAC, Windows)和目标平台(android, x86-linux, ARM-Linux, MAC, iOS)的不同,需要不同的配置。但如果只是想编译Android,ARM-Linux, x86-Linux,iOS版本的Paddle-Lite库,则可以使用PaddlePaddle提供的Docker来简化编译环境的搭建(需要编译平台是Linux)。
2.2.1: Linux下使用Docker构建Paddle-Lite编译平台:
A. 从仓库拉取Docker镜像:
docker pull paddlepaddle/paddle-lite:2.0.0_beta
B. 获取对应版本的Paddle-Lite Source code:
git clone https://gitee.com/paddlepaddle/paddle-lite.git
此时,下载的Source code在paddle-lite目录,
这个Source code将用来编译paddle-lite library, 以及OPT工具。
C. 启动容器:
docker run -i -t --name paddlelite-docker -v $PWD/paddle-lite:Paddle_Lite paddlepaddle/paddle-lite:latest /bin/bash
(Docker使用: https://blog.sina.com.cn/s/blog_602f87700102ynra.html)
此时,可以看到Paddle lite Source mount 到 /Paddle_Lite目录内。现在可以编译了。
2.3: 编译:
2.3.1: paddle-lite android 版本编译选项:
在docker环境,进入Paddle_Lite目录,可以看到paddle lite的完整Source Code。
在lite/tools/build_android.sh即为编译Android 版本库的脚本。
可以修改其选项。
选项如下:
其中,Sam比较关注的是:
arch
toolchain
with_cv
with_extra ON/OFF 是否编译完整算子 (最好加)
with_profile ON/OFF 是否打开执行耗时分析
with_opencl ON/OFF 是否包含 OpenCL 编译 (如果需要GPU版本,则加入,它需要模型配合,即opt转换时,指定 opencl)
2.3.2: 编译:
lite/tools/build_android.sh
2.3.3: 编译opt:
./lite/tools/build.sh build_optimize_tool
编译结果在:
build.opt/lite/api/opt
3. 模型转换:
在使用Paddle lite推理之前,需要转化模型为 Paddle Lite 格式。
opt 可以将 PaddlePaddle 的部署模型格式转化为 Paddle Lite 支持的模型格式,期间执行的操作包括:
将 protobuf 格式的模型文件转化为 naive_buffer 格式的模型文件,有效降低模型体积
执行“量化、子图融合、混合调度、 Kernel 优选”等图优化操作,提升其在 Paddle Lite 上的运行速度、内存占用等效果。
3.1: 准备PaddlePaddle模型:
PaddlePaddle模型包括两种形式:
Combined Param,Seperated Param
3.2: 转换为Paddle Lite 模型格式:
./opt --valid_target=arm --model_file=/Paddle_Lite/PPLC_Net/inference_model/palmfist_s_128_20231009/model.pdmodel --param_file=/Paddle_Lite/PPLC_Net/inference_model/palmfist_s_128_20231009/model.pdiparams --optimize_out=/Paddle_Lite/PPLC_Net/inference_model/palmfist_s_128_20231009/clas_palmfist_s_128_20231009
其中: model_file指定模型文件,param_file指定权重文件。 optimize_out指定生成的nb文件, 注意,此处不要带后缀名,opt会自动加入后缀.nb
valid_target
:指定模型在特定的硬件平台上执行,默认为 arm 。目前可支持 arm
、 opencl
、 x86、 metal、 xpu、 bm、 mlu、 intel_fpga、 huawei_ascend_npu、imagination_nna、 rockchip_npu、 mediatek_apu、 huawei_kirin_npu、 amlogic_npu,可以同时指定多个硬件平台(以逗号分隔,优先级高的在前),Model Optimize Tool 将会自动选择最佳方式。如果需要支持华为麒麟 NPU ,应当设置为" huawei_kirin_npu , arm "。
注意:如果想要在Android平台支持GPU. 则需要在此地选择 opencl.
quant_type
:
指定 opt 中动态离线量化功能的量化类型,可以设置为 QUANT_INT8 和 QUANT_INT16 ,即分别量化为 int8 和 int16 。量化为 int8 对模型精度有一点影响,模型体积大概减小4倍。量化为 int16 对模型精度基本没有影响,模型体积大概减小2倍。
但注意:它相当于动态离线量化。只减小体积,不会减小推理时间。若要减小推理时间,需要paddleslim.
3.3:查看是否支持OP:
./opt --print_model_ops=true --model_dir=pplc_small --valid_targets=arm