Paddle-Lite终端部署深度学习模型流程

Paddle Lite是飞桨基于Paddle Mobile全新升级推出的端侧推理引擎,在多硬件、多平台以及硬件混合调度的支持上更加完备,为包括手机在内的端侧场景的AI应用提供高效轻量的推理能力,有效解决手机算力和内存限制等问题,致力于推动AI应用更广泛的落地

部署流程一般分为四步

  • 1)把其他框架(pytorch/tensorlfow)训练的模型转换为paddle模型
  • 2)paddle模型优化为轻量级的模型
  • 3)paddle-lite通过api调用轻量级的模型推理
  • 4)融合进业务代码,完成落地

1. X2Paddle 模型转换工具

X2Paddle目前已经支持Caffe/TensorFlow/ONNX/PyTorch四大框架的预测模型的转换,PyTorch训练项目的转换,涵盖了目前市面主流深度学习框架,一条命令行或者一个API即可完成模型转换。具体参考下面链接:

https://github.com/PaddlePaddle/X2Paddle

注意模型的转换是在内存中进行的,也就是说不是单纯模型文件的转换,是要先通过torch读取pytorch的模型,加载权重,读入内存后,然后再转换为paddle的模型进行保存。

1.1 pytorch模型转paddle模型

比如一个pytorch模型为model.pt,其最终生成的结果如下:

 

 其中inference_model里保存了paddle模型。里面model.pdmodel为模型结果文件,model.pdiparams为模型权重文件。具体转换过程参考下面连接:

X2Paddle/pytorch2paddle.ipynb at develop · PaddlePaddle/X2Paddle · GitHub

2. opt工具量化模型

Paddle-Lite 提供了多种策略来自动优化原始的训练模型,其中包括量化、子图融合、混合调度、Kernel优选等等方法。为了使优化过程更加方便易用,提供了opt 工具来自动完成优化步骤,输出一个轻量的、最优的可执行模型。

paddle模型按照形式来分可分为combine形式和非combine形式。combine形式就是说模型结构文件和权重文件是分开的,非combine形式就是两者在一个文件里。opt最终会把paddle模型转为naive_buffer格式的.nb文件(推荐),或者protobuf文件。同时要根据使用情况给参数--valid_targets选择对应的平台,arm或者x86,如果硬件架构不匹配结果会出错。注意使用opt工具时的参数解释就好,具体参考下面链接:

python调用opt转化模型 — Paddle-Lite 文档

3. Paddle-Lite部署和推理

Paddle-Lite的部署和推理具体要根据硬件平台而定,可部署到x86, Arm(Android)和Arm(linux)上。paddle-lite可以直接读取paddle模型,也可以读取opt优化后的模型。paddle-lite使用步骤如下:

  • 编译paddle-lite源码,生成对应平台的库文件。
  • 其他语言(如C++)调用paddle-lite的api,通过api来读取opt转化后的模型,推理得到结果。这个过程要C++写推理之前的算法预处理部分,和推理之后的算法后处理部分,这个要跟训练模型时保持一致。
  • 一般是C++写好后再次编译封装成接口,给业务调用。

在实际使用中,参考Welcome to Paddle-Lite's documentation! — Paddle-Lite 文档

猜你喜欢

转载自blog.csdn.net/Eyesleft_being/article/details/120368277