1. 程式人生 > >Facebook開源移動端深度學習加速框架,比TensorFlow Lite快一倍

Facebook開源移動端深度學習加速框架,比TensorFlow Lite快一倍

方栗子 發自 凹非寺
量子位 出品 | 公眾號 QbitAI

640?wx_fmt=png

Facebook釋出了一個開源框架,叫QNNPACK,是手機端神經網路計算的加速包。

官方表示,它可以成倍提升神經網路的推理效率,幾乎比TensorFlow Lite快一倍。

這個框架,能夠為很多運算加速,比如DW卷積 (Depthwise Convolution) ,許多先進的架構裡面都用得到。

目前,QNNPACK已經是PyTorch 1.0的一部分,在Caffe2裡就能直接使用。

其實,Facebook手機應用裡面,已經部署了這個QNNPACK。也就是說,數以億計的手機都在用了。

從哪個角度加速?

QNNPACK,這個名字眼熟麼?

兩年前,Facebook就推出過一個加速包,叫做NNPACK

,Caffe2Go用的就是它。

基於Winograd變換和傅立葉變換,有效減少卷積計算裡的乘加運算 (Multiply-Add) 。這樣一來,3x3卷積可以只比1x1慢一倍,而不會慢8倍。

不過,世界變化很快。現在的計算機視覺 (CV) 神經網路裡,用到的很多卷積型別,已經沾不到NNPACK的光

比如,1x1卷積,分組卷積 (Grouped Convolution) ,Strided Convolution,擴張卷積 (Dilated Convolution) ,DW卷積 (DepthWise Convolution) ,適用於精度/儲存頻寬受到限制的 (移動端等) 場景。

而CV神經網路,大部分推理時間,都花在卷積和全連線運算上。

640?wx_fmt=png

這樣的運算,和矩陣乘法密切相關:

大核心的卷積,可以分解成im2col和一個矩陣乘法。

所以,有高效的矩陣乘法,才能有高效的卷積網路。

於是,QNNPACK出世了。

怎樣加速矩陣乘法?

640?wx_fmt=jpeg

矩陣乘法,A x B = C。C裡面的每一個元素,都可以看成A中某行B中某列的點乘。

但直接在點乘基礎上計算的話,一點也不快,會受到儲存頻寬的限制。

640?wx_fmt=png

如果,能同時計算A中多行B中多列的點乘,即MRxNR,就能給運算速度帶來猛烈的提升。

不需要太多,這樣細小的改變就夠了。

節省記憶體和快取

模型訓練,可能更需要高精度。但在訓練完成後,推理部分對精度的需求可能就沒有那麼高了。

低精度的計算,有時對推理的準確性不會產生明顯的影響。

而這樣的運算,不需要太大儲存,並節省能源,有助於把AI部署在移動端。

QNNPACK用的線性量化 (Linear Quantization) 方案,與安卓的神經網路API相容。

它假設量化值q[i]是用8位元的無符號整數 (Unsigned Integers) 來表示的,以及q[i]與真實值r[i]相關,關係如下:

640?wx_fmt=png

與其他庫不同,QNNPACK把矩陣A、B都放進一級快取 (L1 Cache) ,目標是把所有對運算過程並不非常必要的記憶體轉換 (Memory Transformations) 都刪掉。

QNNPACK可以在一次微核心呼叫 (Microkernel Call) 裡,處理A和B。

不需要在微核心之外,累積32位的中間結果,QNNPACK把32位的中間值融合進微核心,然後寫出8位值,節省了儲存頻寬和快取。

贏了TensorFlow Lite

開發團隊用谷歌的視覺框架MobileNetV2裡面的影象分類模型來測試。

TensorFlow Lite做對手,和QNNPACK比了一場。

640?wx_fmt=png

結果是,QNNPACK比TensorFlow Lite幾乎快一倍,不論是在高階智慧機,還是普通智慧機身上。

所以,各位也去試一下?

GitHub專案頁:
https://github.com/pytorch/QNNPACK

部落格原文:
https://code.fb.com/ml-applications/qnnpack/

加入社群

量子位AI社群開始招募啦,歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話介面回覆關鍵字“交流群”,獲取入群方式;

此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。

進專業群請在量子位公眾號(QbitAI)對話介面回覆關鍵字“專業群”,獲取入群方式。(專業群稽核較嚴,敬請諒解)

活動策劃招聘

量子位正在招聘活動策劃,將負責不同領域維度的線上線下相關活動策劃、執行。歡迎聰明靠譜的小夥伴加入,並希望你能有一些活動策劃或運營的相關經驗。相關細節,請在量子位公眾號(QbitAI)對話介面,回覆“招聘”兩個字。

640?wx_fmt=jpeg

量子位 QbitAI · 頭條號簽約作者

վ'ᴗ' ի 追蹤AI技術和產品新動態