如何评价百度飞桨发布的Paddle Lite框架?
看到说是百度纯自研的移动端框架,已经上线应用,不知未来潜力怎样 假装泻药,利益不相关<hr/>背景
本来不想做Paddle Lite框架评测的,只是组里的两位小姐姐尝试编译了3天(这期间还有Paddle Lite的小朋友友情协助,不要问是谁,圈圈虫人脉广)依然失败。我猜根据我在圈内摸鱼3年的经验,编译一个移动端的推理框架问题不难吧,总比当初移植Caffe到Android容易吧(果然打脸了)。
已经提前git clone完毕Paddle-Lite的repo,配置好ANDROID_NDK路径(ncnn、mnn、mace、Tengine均能识别)
开始踩坑
2019-08-2323:03:04
ANDROID_NDK-迷之找不到
好吧,只能识别到NDK_ROOK,修改吧。
嘟嘟嘟……有点正常的感觉了
一大堆xxx.a文件生成中
为啥每个op要单独生成一个静态库呢?编译有点慢哟,洗澡去了。
2019-08-2323:23:04
为啥还没编完呢???
有种奇怪的感觉
好像网卡灯再闪烁,在下载什么第三方库吗?
后台悄悄下载,挺有x度风格
2019-08-2323:44:12
突破100MB了
到底缺少什么第三方库,我想睡觉了,我自己去下载行不行呢?赶紧看看README.md
无任何第三方依赖???
2019-08-24 00:31:43
依然没有找到缺少的第三库,我放弃了,我睡觉了。对不起各位看官,本来想出一份Paddle Lite的Benchmark,看来比我想象中的困难。也许我做了2年假的推理框架优化吧。
肝疼!
鸣金收兵,来日再战
第一次看见一个号称极致的轻量级部署推理框架居然只能使用docker才能正常跑通,也许是我太老了,跟不上节奏了……
(一个轻量级的推理框架,从git clone完成,到第一个example输出正常结果,花费的时间超过了30分钟,就要好好反思下了编译工具是否友善,相关文档是否健全)
使用评价
满分100的话,目前我只能打出20分,其中10分给百度工程师们屡败屡战的坚强斗志,另外10分感谢小伙伴的友情指导。(突然发现我司的框架编译难度已经很容易了.......233)
OAID/TengineTencent/ncnnTencent/FeatherCNNXiaoMi/macealibaba/MNN
<hr/>貌似Paddle lite 发布了2.0,希望解决编译问题了 电力院校的青椒路过,非专业人士。作为一个用各大深度学习框架和推理框架来做电力应用的伸手党。深度学习我们都不懂,只知道能用就行了,用的最多框架就是caffe和darknet。至于各个学习框架和推理框架也都觉得快不快不重要,也感觉不到。只关心安装编译难不难,示例代码多不多,bug多不多,部署简单不简单,更不更新也无所谓。
正如百度说得当前,两大深度学习框架TensorFlow、PyTorch虽然是开源项目,但都在美国公司掌控之下,都可能要“遵守美国法律”。国产框架很重要,这一点对于我们这种专业很重要,毕竟我们要写基金申请书向国家拿钱。这也是paddle刚刚出来,我就用paddle的原因。后来paddle的bug挺多,动不动就换框架。对我们来说这是噩梦。
现在我觉得腾讯的ncnn以及opencv dnn模块非常不错。opencv dnn模块开箱即用,支持框架多,非常方便。至于ncnn发现也很好用,调用也很简单,就是支持框架不多。最重要一点ncnn也是国产的,用来写基金申请书也是挺不错的。可能我太水,觉得ncnn就不能多点mxnet的demo。不过ncnn的optimize工具还有caffe int8工具很不错,还不停的更新,嗯用来写论文还是非常不错的。
不扯其他的,我想用Paddle Lite框架,但是不敢用Paddle Lite框架。技术上我不清楚,但是长期写论文的人直觉上觉得Paddle Lite有点不靠谱。这是百度目前官网的最新资讯,
里面内容都还不错,主要是里面内容和图表好像是转载的。关键这些图好像质量不好,整篇文章图的dpi貌似不一样,有些是很清晰,有些很模糊。还有那个传送门,我点了半天发现没有超链接,没法验货。感觉你自己官网的宣发文章都不靠谱,框架可能更加不靠谱。
不过还是希望paddle lite能够更好,另外希望ncnn也能够更好。多出demo,造福我们这种伸手党。有木有其他好的框架和工具,苦逼的人路过~~ 最近飞桨确实势头不错,看Paddle Lite这次的特点是高扩展、高性能、轻量化,还是首个支持华为NPU在线编译的深度学习端侧推理框架。这次升级我和我身边的开发者朋友都比较关注于高性能和广适配两个方面。兼容性从ARM开发板、高通苹果GPU到FPGA都有适配,性能上根据测评在主流模型上也都超越了竞品框架。
不得不说PaddlePaddle团队执行力确实高,上次受邀参加百度AI开发者大会上看到飞桨和华为合作的仪式,强强联手感觉很有搞头像是有大事发生。没想到这次百度公开与华为合作不到两个月内,就已经做出实实在在的东西来了,根据公开测评来看性能确实已经超越了同行,这个团队确实有点实力,很想看到接下来Paddle-lite在市场上会如何发展。 性能开源里数一数二,必然会越来越好!即使屡败屡战,也请不要放弃!
<hr/>非官方docker环境下,Linux交叉编译-android-armv8,以及benchmark踩坑完成,这一路真尼玛心累,需要脚本见后文。
整体感觉开源有些急功近利了,【一键安装】、【一键benchmark】、【缺 · Demo】做的不是不好是很差,委婉地说还需加油鸭!
[*]需要优化安装流程,做到【一键安装】:
[*]CMake里会自动下载第三方库的源码再编译比较慢(可以考虑wget预编译好的第三方库);
[*]编译的时候在编译beam search(或者别的什么在80%的位置)时候卡住过(ctrl+c重来解决,发现不是多线程卡了,而是台在下载东西,下了很久很久,是到80%的beam search的时候,还以为卡住了,很久过后就提示正在git clone google/benchmark)
[*]网络不好git clone如protobuf会挂(可以将编译好的依赖,放到墙内);
[*]目前Docker镜像很大(issue区也有人提过)很不方便,而且不支持arm linux。希望后续摆脱对Docker的依赖,文档能对非Docker编译有具体说明;
[*]这里可以参考ncnn根目录下的build.sh和package.sh,分别来做编译和打包,简单干净;
[*]需要优化benchmark,做到【一键benchmark】:
[*]在lite/api/下有几个常见经典模型的测试文件,需要挨个手动去跑,有点麻烦,希望有自动化脚本实现【一键benchmark】;
[*]issue区回复说下个版本就会有预编译版本,但是作为用户感觉听心累的,希望能把这最基本的做好,再开源;
[*]编译安装和对经典模型的benchmark的重要性不言而喻,这两个应该加入到CI中保证一直可用;
[*]android/linux、armv7/v8、cpu/gpu的编译安装和benchmark都要加入CI中。
[*]需要有Demo,现在没看到。APP的demo(图像分类、检测、分割)或者 OCR 之类的等等,这个想必慢慢会有的,希望能再开源些例子;
[*]其它的感受
[*]移动端和x86都支持,虽然没啥问题,但名为lite感觉怪怪的。毕竟目前TFLite重点在IOT,在支持单片机了,Tengine也支持ARM Q系列了;
[*]代码复杂,看着费劲。
[*]要加新backend不知道会不会很麻烦,可能是不少继承自paddle训练框架的包袱?如果真心做lite的话,我想能否一定程度上弱化与paddle训练框架的关系(官方怕不愿意,估计要力推Paddle?),强化突出对其它框架模型的转换支持,如TF、Pytorch、Caffe;
[*]有个mir的fuse模块做op融合,这些我都感觉很复杂,或许加到模型转换的时候会更好?进一步优化简化代码?对其它训练框架的支持需加强加强加强宣传,毕竟大多数用户用的是TF、Pytorch训练模型的,不是用Paddle(目前是推理的时代了,这点真的真的真的需要认清楚);
[*]我作为用户,除了关心编译安装、benchmark是否方便,还关心我自己用TF或者Pytorch训练的模型好不好在PaddleLite上做benchmark,这点支持的好嘛?我看wiki里有个模型转换方法,还以为是对TF、Pytorch的转换,一脸懵逼……
[*]cpu单线程性能比tflite好,比ncnn好一些,和mnn差不大,与mace比不清楚;
下面是我测的4 x A53@1.59ghz + 2 x A73@1.98ghz手机samsungexynos7872,1、2、4线程cpu性能,基于官方提供的几个模型:
1,2,4线程,测试代码见后文
-- mnasnet avg = 81.0020 ms
-- mnasnet avg = 48.8180 ms
-- mnasnet avg = 53.7830 ms
-- mobilenetv1 avg = 120.6600 ms
-- mobilenetv1 avg = 64.5190 ms
-- mobilenetv1 avg = 164.0540 ms
-- mobilenetv2 avg = 84.2120 ms
-- mobilenetv2 avg = 48.4280 ms
-- mobilenetv2 avg = 165.7700 ms
-- shufflenetv2 avg = 42.7610 ms
-- shufflenetv2 avg = 25.3870 ms
-- shufflenetv2 avg = 32.3390 ms
-- squeezenet_v1.1 avg = 89.3500 ms
-- squeezenet_v1.1 avg = 50.5720 ms
-- squeezenet_v1.1 avg = 138.6160 ms<hr/>我们小白用户不care你们历史包袱的问题,更不care你们的设计架构多么高端(什么auto-tuning,软硬件隔离),就问一句好不好用、稳定性如何?先不说编译费劲,benchmark的那个wiki文档让人崩溃(手动微笑脸),不说追谁的责任的问题(别说最后又是某个实习生做的),负责的Leader,请俯身亲力亲为完整地按照文档,编译一遍!
[*]性能大家都差不多,凭啥用你们家的?大家都用习惯了NCNN,懒得换。
[*]做框架的目的是紧贴业务,不考虑业务犹如无源之水无本之木。框架的开发RD需要了解业务,就拿最简单的,是否支持一键部署?一键benchmark?(NCNN就是这两点做得好,这两座大山可是吓跑了不少用户)一个新框架刚出来,大家尝鲜的都是做性能测试,复现性能,如果一个安装编译老费劲了,不从用户角度考虑,先不说更多的例子Demo。倒是请想一想,谁还愿意用呢?
<hr/>Linux-X86交叉编译安卓v8脚本
# 更新库
sudo apt update
sudo apt install -y vim git wget unzip build-essential openjdk-8-jre default-jdk adb
# 下载ndk-r17c
export NDK=android-ndk-r17c
cd /tmp
sudo wget -c https://dl.google.com/android/repository/${NDK}-linux-x86_64.zip
cd /opt
sudo unzip /tmp/${NDK}-linux-x86_64.zip
echo &#34;export NDK_ROOT=/opt/${NDK}&#34; >> ~/.bashrc
echo &#34;export ANDROID_NDK=${NDK_ROOT}&#34; >> ~/.bashrc
# 下载cmake 3.11.0-rc4
cd /tmp
wget -c https://cmake.org/files/v3.11/cmake-3.11.0-rc4-Linux-x86_64.tar.gz
sudo tar zxvf cmake-3.11.0-rc4-Linux-x86_64.tar.gz
sudo mv cmake-3.11.0-rc4-Linux-x86_64/opt/cmake-3.11
sudo ln -sf /opt/cmake-3.11/bin/*/usr/bin/
# 编译paddlelite
mkdir ~/code
cd ~/code
git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite
./lite/tools/build.sh --arm_os=android \
--arm_abi=armv8 \
--arm_lang=gcc \
--android_stl=c++_static \
full_publishLinux-X86交叉编译Benchmark安卓脚本
# (paddle-lite根目录下) 下载benchmark模型
wget -c https://paddle-inference-dist.bj.bcebos.com/lite_benchmark%2Fbenchmark_models.tar.gz
tar -zxvf lite_benchmark%2Fbenchmark_models.tar.gz
# 编译benchmark
./lite/tools/ci_build.sh \
--arm_os=&#34;android&#34; \
--arm_abi=&#34;armv8&#34; \
--arm_lang=&#34;gcc &#34; \
build_arm
# adb上传benchmark的bin和模型
adb shell mkdir /data/local/tmp/paddlelite
adb push -p ./benchmark_models/ /data/local/tmp/paddlelite/
adb push -p ./build.lite.android.armv8.gcc/lite/api/benchmark_bin /data/local/tmp/paddlelite/
MODEL_LIST=$(ls ./benchmark_models)
REPEATS_NUM=50
WARMUP_NUM=10
THREADS_NUM_LIST=(1 2 4)
# 执行benchmark
for model_name in ${MODEL_LIST[@]}; do
for thread_num in ${THREADS_NUM_LIST[@]}; do
echo &#34;${model_name}-${thread_num}&#34;
adb shell /data/local/tmp/paddlelite/benchmark_bin \
--model_dir=/data/local/tmp/paddlelite/${model_name} \
--repeats=${REPEATS_NUM} \
--warmup=${WARMUP_NUM} \
--threads=${thread_num} \
--result_filename=/data/local/tmp/paddlelite/benchmark.log
done
done
# 拉取benchmark日志
adb pull /data/local/tmp/paddlelite/benchmark.log .
cat benchmark.log 差评
建议想要在终端部署AI能力的开发者,考虑以下项目,这几个项目一直在维护和更新,API比较稳定,功能丰富,应用广泛,可避免遭遇被推到重来的 不 知 所 措。如果特别喜欢 paddle-lite,也建议先观望半年,看看代码和技术实现学习下,总之先别用
Tencent/ncnnhttps://github.com/XiaoMi/macealibaba/MNN
因为开发新项目容易写KPI和PR,维护旧项目不好写KPI和PR吗?
心疼使用baidu终端推理框架的用户,又双叒叕要重写所有的底层代码啦!
baidu的开源项目很实在,完全开放源代码,你用请你自己负责,自己动手,丰衣足食哦
2017年9月底,baidu发布移动端深度学习框架 mobile-deep-learning(MDL)
baidu忠实开发者:哇塞!快研究起来,用MDL做AI应用
2018年5月底,baidu发布跨平台AI推理加速引擎 anakin
baidu忠实开发者:baidu又出新的框架了,看起来比MDL牛逼,我要用anakin做AI应用(重写code...)
2018年5月底,baidu移动端深度学习框架完全重构为 paddle-mobile
baidu忠实开发者:MDL不维护了,新框架应该更厉害了吧,我还是用paddle-mobile吧(重写code...)
2018年8月,baidu为ARM移动端开发精简版anakin引擎 anakin-lite
baidu忠实开发者:作为忠实粉丝,我要与时俱进,anakin-lite我来了(重写code...)
2019年8月中,baidu发布纯自研的移动端框架 paddle-lite
baidu忠实开发者:别问,问就是 paddle-lite 最强(重写code...)
作为底层库开源项目,没有底层库的自我修养,说不维护就不维护,一年不到所有API全部推到重来,没有向后兼容,没有向前兼容,更别提稳定的ABI了,毫无用户体验,baidu做终端推理框架没有良心,作为开发者有被玩弄的感觉
什么?你可以继续用老框架?新的模型结构老框架不支持怎么办?遇到bug结果算得不对怎么办?速度太慢需要优化怎么办?baidu必然不会将新功能和优化更新到老框架里,不然怎么迫使你用新的?
没有人敢用不维护的开源项目,即使你曾经速度最快,功能最强,技术最先进
没有人敢用可能不到一年便不维护的开源项目,即使你现在速度最快,功能最强,技术最先进
paddle-lite 加油鸭!!
如何评价百度刚刚开源的mobile-deep-learning?如何评价百度开源的高性能神经网络计算库 Anakin?
页:
[1]