简单搜索--Paddle Mobile的技术实现和业务落地

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Paddle MobilePaddlePaddle组织下的致力于嵌入式平台的深度学习框架集成了百度移动端预测的实践经验,提供多平台支持,在工程实现支持及底层算法模型压缩的基础上,通过CPUmall GPU等硬件加速,作用于DuerOS、百度APP、百度网盘APP等移动端场景。目前,Paddle Mobile在PaddlePaddle 0.14版本下已支持CPUMali GPU等平台,以及图像、人脸、OCR等模型。值得一提的是,它的体积极小,最小仅300K今天这篇文章是由百度大搜索高级研发工程师谢柏渊老师,为大家介绍Paddle Mobile的技术实现和业务落地。

以下为谢柏渊的演讲实录


Paddle Mobile框架概览

简单搜索--Paddle Mobile的技术实现和业务落地_第1张图片

图一:Paddle Mobile框架

Paddle Mobile各大框架,偏重于与AI硬件的结合,提升本地用户性能。

  1. Paddle Mobile的训练分为训练过程和运算过程,训练过程兼容统一训练模型,训练基础上提供量化深度压缩功能。  
  2. 目标检测有单主体检测,多主体检测,手势识别。
  3. 实时OCR保证在高性能的情况下,每个图片完整的映射。
  4. 语音唤醒,形成无数的样本输出。
  5. 多硬件平台支持,支持全部ARM CPU,Mali GPU,高通DSPArm-Linux FPGA

Paddle Mobile的架构设计
Paddle Mobile的架构设计主要分为: Loader 模块、 Program 模块、 Executor 模块、 Op 模块、 Kernel 模块、Scope variable Tensor 模块。它的模型分为两种结构: 一种为参数文件是散开的, 如下图, 红框为模型结构的 protobuf 文件, 其余为参数文件。

简单搜索--Paddle Mobile的技术实现和业务落地_第2张图片

图二:模型

其中Loader 模块的作用是将模型结构信息 load 进内存, 如红框内的 protobuf 文件 load 进内存, 并对模型结构进行优化(如将几个细粒度的 op 融合成粗粒度的op, 如将 conv add batchnorm relu 融合为 conv\_add\_batchnorm\_relu),方便进行算法优化。由于 conv 可以转换为两个大矩阵相乘, 更进一步可以分为若干个一行一列的小矩阵相乘, 并得出最终运算。

简单搜索--Paddle Mobile的技术实现和业务落地_第3张图片

图三:Op融合

Program Loader 模块的结果, 包含了优化前的模型结构对象, 以及优化后的模型结构对象, 此模块基本对应 PaddlePaddle 模型结构, 关于Paddle 模型的概念定义, 详细设计可以参考 program.md
kernel op 的底层运算实现, 主要有两个函数, Init Compute, 分别用来初始化、预处理 运算操作, 值得提出的是, kernel 会根据泛型特化到不同的平台。

简单搜索--Paddle Mobile的技术实现和业务落地_第4张图片

图四:平台

不同平台的 kernel 实现, 为同一个 kernel 类不同泛型的特化实现, 目前有三个平台, armmalifpga, 图中的 central-arm-func\ 目录为 op kernel arm 实现, 它承担了 arm\ 目录下 kernel 的底层实现, 同时 arm 处理器作为中央处理器, central-arm-func\ 也可以作为其他协处理器的底层实现, : fpga 的某一个 op kernel 还没有 fpga 协处理器的实现, 就可以直接调用使用这里的 arm 实现.

Paddle Mobile的优化

Paddle Mobile的优化体现在两个方面,体积优化和效率提升。其中,体积优化从三方面来进行:第一,模型量化压缩方案;第二,代码深度精简;第三,分模型打包。效率提升主要从Operator融合和各平台特化实现两方面才进行提升。

Scope用来存储管理所需要用到的variable,用来存储不同类型的对象,主要是矩阵为tensor,也就是说scpoe管理着op运算过程中所有参数矩阵,输入输出矩阵。可以将scope理解为一个map,这里在map上封了一层scope的概念是为了方便内存管理。scope可以用来存储不同类型的对象,Paddle mobile主要用它来存储tensortensor代表着矩阵,通过泛型可以用来存储不同类型的矩阵,但需要注意的是存入和取出时的类型必须保持一致,如果类型不一致,不能通过类型检查。

提问环节

提问:把很多模型压缩放到移动端,压缩是手动还是会自动。

谢柏渊:我们提供一个脚本,跟Paddle mobile项目读取模型一样,我们进行映射,按照255乘以值,预算的时候用这个数乘以255。具体实践可以看Paddle mobile这个项目有量化的脚本,做一个简单的片断。

提问:压缩是把矩阵一点点读进去,读的是哪部分?

谢柏渊:我对这个算法了解不是特别深入,这个想深入了解可以打开PaddlePaddle,在文档列表搜介绍。

提问:能否提供简单的算法然后传播,我们进行简单的预算?

谢柏渊:目前没有,后续考虑会支持。

提问:如果把训练好模型放到手机上,大概有多大?

谢柏渊:目前压缩以后,差不多有5兆,6兆左右,很小。例如有一些AR团队设立鸡蛋的模型,只有50K,不用量化,量化以后10K,就没有必要了。模型大小跟复杂程度有关,用一张数据训练,参数大就大;模型设计的简单,参数少,模型也就小。模型大小是纯粹数据的排列,非常简单,你有多少数就多大。所以我们设计一个模型考虑的问题就是如何设计一个既省空间,效率又高,又准确的模型。

提问:您的模型用的是哪个模型。

谢柏渊:模型因为属于商业化东西,我们对外开放了一部分,在官网可以查询和观看demo,对外也提供了接口,把项目编译出来后,ARM模型在手机上,处理好的数据输入进去,可以拿到所有点的结果。使用起来非常简单。

实录结束

谢柏渊,百度大搜索高级研发工程师,拥有多年Android开发经验,多模搜索部创新团队成员,Paddle Mobile团队成员,落地功能有图搜实时翻译,lite版语音搜索,悬浮球搜索等。目前主要负责Paddle Mobile从学术到上线的打通工作,推动技术实现到业务落地。  

转载于:https://my.oschina.net/u/3968773/blog/2222245

你可能感兴趣的:(python,移动开发,嵌入式)