[Android+NN] Deep learning models on mobile devices
移动端深度学习框架
Ref: 如何评价百度刚刚开源的mobile-deep-learning?
2017 年 9 月 25 日,百度在 GitHub 开源了移动端深度学习框架 mobile-deep-learning(MDL)的全部代码以及脚本
目前同类工具:高通的SNPE,腾讯的NCNN或者ARM的ACL
这是一个移动端的前向计算框架。
首先不能用于模型的训练,训练部分还是得利用TensorFlow,Caffe或者Pytorch等框架进行,具体得看MDL现在或者以后会支持哪些框架的模型转换。
目前的现代框架移植到移动端一般都不是太大的问题,除非需要有python等支持。比如说Caffe2在支持Facebook应用需要的layer以及全protobuf的情况下大概小于1MB,核心大概在一百多KB左右,这个数据看起来和MDL是一致的。
目前移动端最重要的问题是如何优化。
绝大多数数学库的优化都是针对server或者GPU来做的,所以移动端经常是可以跑,但是跑得不快。比起框架来,这些优化反而更加重要。
大概列几个问题出来,有兴趣的同学读代码的时候可以重点考虑考虑,说不定你能比现在所有人都做得更好:)
- 是否有CPU优化?是否使用NEON?是否有为mobile设计的thread pool?是否有针对CPU架构做超参数的调整(比如说thread number)?
NEON
是适用于ARM Cortex-A系列处理器的一种128位SIMD(Single Instruction, Multiple Data,单指令、多数据)扩展结构。从智能手机和移动计算设备到HDTV,它已被公认为是多媒体应用领域中最为优越的处理器之一。它采用专门设计,简化了软件在不同平台之间的移植,为类似Dolby Mobile的密集型多媒体应用提供了低能耗和灵活的加速功能。
- 算法上是否采用了正确的path,比如说用Winograd来做卷积(类似nnpack),对小矩阵做特殊优化(类似xsmm),等等?
- GPU上,是否有高效的kernel implementation?比如说OpenCL/GL,Metal,等等。
- 是否有在 mobile 上非常有用的一些功能,比如说reduced precision(类似gemmlowp)
百度mobile-deep-learning优化细节
作者:李永会
我们用了其中的Metal、neon等优化,大部分都有所应用,还有一些我们没有使用的优化点会尽快跟进看一下收益。
体积这块我们为了把体积减小到极致,放弃了protobuf。直接用的手写json,所以其他模型要转一下对应的json格式。当然我们也提供了转换脚本。后面会考虑用纯C实现争取把MDL的so降到更小。现在是全部编译后300+k。
=====================原文==============================
从MDL开发之初,到在手机百度这种量级产品中稳定运行,经历了很多困难。手机百度对于AI是欢迎的,但是准入标准也是非常苛刻。包括体积,运行速度、能耗都极其严格的标准。从能运行,到能上线就持续了近半年时间。业界的相关框架也全部尝试了一遍。
和ARM上海和剑桥团队都做了深入接触,我们把跑出来的数据同步给ARM,ARM牛牛们给了我们特别多的好建议。这里要感谢ARM同学们。
MDL的实现过程一直是希望能让移动端工程师可以最简单的集成和使用,而不是每写一个需求都要研究一下深度学习才能继续。基本功能完全可以直接按demo运行起来。
MDL目的不是发paper、秀数据,而是实实在在的让一部中低端机也可以运行。具体的优化点不一一例举了,在github上已经列出。欢迎大家关注。
百度mobile-deep-learning手感
作者:圈圈虫
MDL测试了两天,上手的体验很差,目前只测试了Android、x86-Linux端,需要修改build.sh、追加-pthread链接等等才能编译通过,protobuffer版本要求3.4.0,拜托在README.md中写明白点吧,再怎么说也是大厂

浙公网安备 33010602011771号