有沒有基於移動端GPU的深度學習前饋網路框架?

目前深度學習的框架很多,像Caffe,MxNet,Tensorflow之類的東西,他們現在基本上都有移動版的前饋網路。筆者用過MxNet的http://predict-all.cc,也見過Tensorflow以及Caffe2的移動端demo,自己也抽離過darknet(純C的深度框架),但是前面說的這些都是基於CPU做的運算,這些框架放在PC上運行效率就不高,如果弄到移動端要更差一些,所以有沒有基於手機端的GPU做的前饋網路框架呢?

就筆者所知,這個移動端使用GPU要調用OpenGL庫。筆者前段時間已經寫了一些基於OpenGL的代碼,但是由於畢業(目前在計算所讀渣碩)需要可能沒時間繼續推進這個事情,所以如果有這樣的庫正好可以解放我,如果沒有這樣的庫,有沒有人想要一起,搞一點事情(前期我已經做過一些工作了)。


我說說iOS設備上開發深度學習的情況。

自iOS10發布之後,蘋果在深度學習方面做了很多工作。其實,在這之前也可以用Metal自己寫conv、pool、fc等layer實現深度學慣用手機GPU運行。iOS10之後,蘋果把卷積神經網路的基本層都寫好了,還做了內存部署優化,但需要注意只支持半精度。另外,要實現檢測、分割什麼的,就需要自己寫layer。熟悉一下Metal基本原理不難寫。

說幾組數字吧:(都是GPU半精度測試結果)
iPhone 6s 跑完整vgg-16 每幀300ms
iPhone 7 跑完整vgg-16 每幀200ms

經過實測,如果網路非常tiny的情況下,CPU還是要比GPU快的,只要稍大規模還是GPU占明顯優勢。主要原因是手機GPU沒有獨立顯存,在IO上不佔優勢。

大家對iOS上移植深度學習有什麼問題儘管問。


謝邀。

以目前移動端的GPU架構和驅動水平,還不如用cpu的性能好。

cnndroid一類的開源框架,普遍比我們內部的arm cpu庫單核還要慢3-5倍。廠家自己定製的庫好很多,比如mtk給自家x20定製的mali gpu的cnn庫,性能已經接近cpu庫的性能。看過高通的一個ppt,adreno530的性能更好一些,但並沒有實測過。廠商的庫普遍比較封閉,擴展性差一些,而且未必能拿到,我廠都是簽了協議的。另外高通似乎也不傾向用gpu,他們在推自家的dsp,同樣非常封閉,技術不開放底層細節,要簽一大堆協議。


丟一個乾貨

上個月RenderScript剛剛被加回到Android NDK,正好在上一個有關嵌入式系統的功耗的課,所以課上的項目選的就是用RenderScript加速TensorFlow。我這裡只加速了兩個耗能最高的op:matmul和conv。app在Nexus6上運行時會調用GPU adreno的動態庫,和默認的CPU Eigen庫相比可以有3x的加速。

不過app在使用上有卡頓(one forward path~1.5s),但是實際的計算確實是有3x加速(https://github.com/EE202B/tensorflow/blob/RenderScript/tensorflow/contrib/android_renderscript_ops/doc/test-result.txt),因為課程結束了我也暫時沒有去解決這個bug。

和CNNdroid,Mobile_ConvNet之類的相比應該就是給了開發者更多的flexibility吧。

項目地址:EE202B/tensorflow


「就筆者所知,這個移動端使用GPU要調用OpenGL庫。」

這是錯誤的。移動端不一定只有OpenGL,還可以有CUDA、OpenCL、RenderScript,甚至Metal、D3D。你需要更新認知。

其實最主要的問題是,訓練和預測要分開。訓練的過程,為什麼要用移動GPU?沒任何好處啊。預測的過程,只要移植就行了,沒任何難度。


http://deeplearningkit.org


有回答提到deep learning toolkit的,這個主要是用metal寫的。我上學期在他們的基礎上做了一個完全跑在iOS上的YOLO detection,速度可以到2 fps。寫的時候給deep learning toolkit加了fully connected layer, leaky relu,並且改寫了原來跑得很慢的convolution layer。由於模型巨大,就用swift將json轉成了binary json讀取到iOS 內存里,原來1G多的模型能壓到200M。

其實移動端主要受限的就是內存放不下那麼大的模型,而且GPU也是很慢的,性能大概是titan x的百分之一。隨便玩玩還行,真正要實用的話,還是放在伺服器上跑用網路傳輸比較好。


iOS上有MPS

android上:

CNNdroid 用renderscript

Deepsense 用OpenCL

這兩個有源碼

opengl的不太清楚

話說您覺得用GPU加速有前景么==


iOS 10以上的設備,可以看看原生的Metal框架的MetalPerformanceShaders,裡面提供了MPSCNN框架的基礎組件:卷積層、全連接層和池化層,具體的框架結構需要修改移植


移動端的內存未必放得下那麼大的網路吧,尤其是iOS,我覺得還是部署在伺服器上現實點,然後手機去遠程調用


參看文獻:Squeezing Deep Learning into Mobile Phones - A Practitioner"s guide

最近在公司搞了一點語言模型本地化工作。個人建議:iOS上傾向於使用CoreML,Android端推薦使用TF。如何你非要動手寫前向也行(調用GPU或CPU都行),但是你得確保你能把代碼優化好。推薦用openblas庫寫前向計算中矩陣運算。


我剛剛上傳了我寫的基於iOS Metal的神經網路庫到github。基本上用到的「層」都支持,不像蘋果的Core ML,這個庫只需要iOS8系統。裡面有demo,樓主有興趣可以看一下。

https://github.com/amazingyyc/Brouhaha


請問作者試過哪幾個框架,caffe,tensorflow等幾個框架在cpu下哪個運算相對快些?移動端gpu本身很受限,硬體配置差異很大。


推薦閱讀:

如何評價deep mind開源的sonnet?
如何評價陳天奇的模塊化深度學習系統NNVM?
如何評價Sony新出的深度學習庫NNabla?
為什麼在windows下用不了tensorflow?

TAG:深度學習DeepLearning | Caffe深度學習框架 | TensorFlow | mxnet | Theano |