天天看點

基于GPU推理的神經網絡推理架構

一、簡介

人工智能技術這幾年非常的火爆。神經網絡算法可以在傳統算法的極限上進一步突破,成為了各個算法領域做到頂級水準後繼續研究更新的首要路徑。目前大多數的神經網絡主要還是應用在服務端。當然,大多數人還是看好這些進階的算法能跑到移動端上面。但是個人認為移動端有三個問題是必須解決的:一個是算力問題,目前移動端能堆積的算力不像服務端那麼靈活,算力較小;一個是功耗問題,大量的算力,必然導緻功耗太高,手機發熱,電池不夠用等問題;還有一個是模型太大,動不動幾十兆,假設一個應用場景需要一個模型,内置上百兆的模型不可行,下載下傳上百兆也不友善。不過還是很感謝很多技術開發人員在這方面的努力。就比如各個大廠都在深度開發端側推理架構。

二、什麼是推理架構

通常神經網絡算法從研發到應用有兩大環節,第一環節是設計并訓練模型;第二環節是把模型部署到産品上。推理通常認為是部署到産品後架構所需要實作的運算。一個模型輸入一個給定的資料得出一個資料,類似于推理得到了一個結果。不過上述說道的第一環節,其實也涉及到推理,隻不過訓練的時候推理隻是其中的一小部分而已。一般訓練包括推理+資料集+損失函數。能夠執行這個推理過程的軟體封裝可以認為是一個推理架構。

三、開源的移動端推理架構

目前開源的移動端推理架構還是很多的,有騰訊主導的ncnn,小米旗下的mace,谷歌的TensorFlow-lite(簡稱tflite),Facebook的caffe2,百度的paddle-lite,阿裡巴巴的mnn,arm中國的tengine,arm的computelibrary,【蘋果的CoreML,閉源的】等等。

四、實作了GPU推理功能的移動端推理架構

上述幾個主流的推理架構除了caffe2移動端推理架構暫時還沒看到實作GPU推理外,其餘架構均已支援GPU前向推理。不過需要說明的是tengine的規劃是使用arm的computelibrary裡面的GPU推理實作,是以略有重疊。

五、各個移動端推理架構GPU程式設計實作方法

1、騰訊的ncnn:使用vulkan,支援跨平台ios,android。不過ios需要通過第三方的SDK才能使用vulkan。蘋果自己開發了一套metal的GPU程式設計API。以後ios上什麼opencl,opengles,vulkan都不再是官方原生支援的GPU程式設計API了。

2、阿裡的mnn:使用opencl,opengles,vulkan,metal四種GPU程式設計API開發了這個推理架構。據說很多公司開始把mnn納入到公司内部的推理架構進行二次開發,估計更全面的GPU程式設計API支援是其一個最大優勢。

3、小米的mace:mace是基于opencl開發的,mace架構出來得比較早,當然沒有比arm的computelibrary早。很多架構的GPU推理實作都或多或少的參考了computeLibrary。

4、谷歌的tflite:使用opengles的compute shader實作了安卓版本的GPU推理,對于IOS版本則是使用metal開發。

5、百度的paddle-lite:使用vulkan開發安卓版本的GPU推理,使用metal開發IOS版本的GPU推理

6、arm中國的tengine:tengine使用的是arm compute library架構作為底層GPU實作,據了解tengine在cpu端的優化下了很大功夫,當然作為ARM旗下的推理架構,自然對arm的架構和ISA指令更加了解。

7、arm compute library:這個架構是使用opencl和opengles來實作GPU推理的。該架構做得比較早。是armnn的底層推理實作。因為arm獨特的ip授權模式,armnn是為了讓半導體公司能直接打通安卓的android-nn架構。

8、閉源的蘋果coreML。沒怎麼研究,但是可以大膽假設,一定是使用metal做GPU調用的。

9、閉源的高通SNPE。snpe是高通開發的一個推理架構,支援GPU推理,之前嘗試分析過,一些調試資料看,内部必然存在opencl實作。

當然,這些架構為了相容性,都實作了CPU的推理功能。畢竟CPU推理相容性更好,特别是現階段幾乎所有的手機端都是采用ARM的CPU。是以使用CPU的推理方案相容性會更好。

六、為什麼GPU能做神經網絡加速

一方面是GPU對通用計算支援力度越來越大;另一方面是現階段的模型主要以cnn為主,cnn最終就是卷積運算,而cnn的運算恰好是支援并行計算的算法,當然還有很多層也是支援并行運算的;此外,GPU可以分擔CPU的負載。

不過,個人覺得有點小遺憾,現階段在GPU端的推理主要以浮點推理為主,CPU的推理則是以定點推理為主。希望能盡快看到GPU用定點推理的架構。

七、GPU推理架構是否有可能被npu替代

個人認為最終是要被替代的,理由有:一個是GPU主要以浮點運算,功耗極高,有相關資料顯示,浮點單元使用的半導體數量是定點單元使用的半導體的6倍之多;另一個是AI算法這麼火,早晚是要有專用的ASIC專用子產品的。再來看看SOC晶片廠商的做法:

1、英偉達的GPU在桌面端稱霸AI,但是内置的tensor core性能是GPU的好幾倍;

2、高通則是選擇了DSP進行擴充,增加一些AI性能,例如HTA單元;

3、arm開始發力npu,雖然有點遲,但是依然在2019年年底亮相;

4、華為海思麒麟晶片據說最先使用寒武紀npu核,後來自研了達芬奇系列的npu;

5、聯發科也自研了APU系列AI加速子產品;

6、英特爾更是收購了兩家做AI加速子產品的公司;

7、amd現在階段在開發miopen做生态,npu到沒看到太大進展。

八、現階段GPU推理架構還是要繼續研發

現階段,雖然android-nn持續發展,但是個人認為android-nn對模型的保護力度太小,估計很多公司甯願選擇自研或者使用第三架構進行二次開發也不會輕易使用android-nn架構。随着半導體公司在移動端終端方案引入AI加速子產品(NPU/APU/HTA),各個晶片廠商也提供了一套推理架構,可以說現在的移動端推理架構實在是太多了。如何選用,各種各樣的推理架構,光是評估都得花較多時間。不過話說回來,架構多了,投入的人才也就多了,反而能促進各個架構的進一步優化。至少得保證軟體的相容性直到npu替代GPU與及舊款的缺乏npu的手機機型全部退役。