PhoneBit: 基于手機 GPU 的高能效二值神經網絡加速引擎開源項目發布

在過去的幾年里,深度神經網絡(DNN)已經在計算機視覺和其他領域取得了巨大的進展。然而,由于深度神經網絡較高的計算復雜度,以及移動設備性能和功率限制,導致深度神經網絡在移動設備上部署仍然具有挑戰性。二值神經網絡(Binary Neural Networks)是一種特殊的神經網絡,它將網絡的權重和中間特征壓縮為 1 個比特位,通過使用位運算替代傳統的浮點運算來實現模型的壓縮與加速。現有的大多數神經網絡計算框架,如MXNet、Caffe、TensorFlow等,它們大多為浮點計算框架,并只針對桌面平臺的獨立GPU優化。相比桌面與服務器獨立GPU,移動端GPU往往與CPU合并在一塊芯片上作為SoC的一部分,同時存在著功率小、可分配資源少、帶寬低等限制,這使得在移動端GPU上進行并行計算的優化與獨立GPU有很大的不同。而在移動設備上,大多數輕量級框架如TensorFlow Lite,CNNdroid,Core ML,Caffe2等,它們大多支持浮點與8bit量化,并不支持BNN,同時存在一定兼容性問題,如TensorFlow Lite對移動GPU的支持并不完善。2019年8月,京東AI開源了第一個基于ARM CPU的高度優化的BNN前向傳播計算框架daBNN,但是daBNN使用CPU計算使得daBNN和其他使用CPU計算的框架一樣,仍然具有在運算時發熱大、消耗電量快等缺點。因此,使用移動GPU對BNN進行推理計算優化仍然是一個空白。

中山大學無人系統研究所陳剛副教授和黃凱教授聯合鵬城實驗室發表在DATE 2020的論文 《PhoneBit: Efficient GPU-Accelerated Binary Neural Network Inference Engine for Mobile Phones》提出了業界首個基于手機 GPU 的高能效二值神經網絡加速引擎,針對移動端GPU進行高度優化。PhoneBit框架在進行二值神經網絡推理的同時,可大幅提升推理速度,降低計算消耗的電量以及帶來更高的能耗比。目前,PhoneBit框架已在鵬城匯智開源代碼托管平臺上正式發布(地址:https://code.ihub.org.cn/projects/915)。

PhoneBit框架及其優化簡介


如下圖所示,PhoneBit框架加載一個在其他框架上訓練好的模型,模型經過轉換工具的轉換后,上傳至移動設備,只需要簡單幾步即可完成模型的部署。

PhoneBit框架于移動端快捷部署BNN模型

同時,PhoneBit框架為使用者提供了多項支持:

1) 提供了對多種常用神經網絡層的支持,例如add,convolution,max pooling,average pooling,BN,dense,softmax等層,同時支持shortcut結構并有對應的優化,理論上可適應大多數網絡結構。

2) 支持混合精度,支持32位浮點,16位浮點,int8整數,二值化等計算方式。

3)提供了模型轉換工具,支持從ONNX(Open Neural Network Exchange)模型轉換至本框架專用模型,在轉換模型的同時進行針對BNN的模型壓縮與半精度浮點格式的轉換,。

4) 考慮到Android應用大多采用Java編寫,本框架提供了方便的Java API支持,使用者只需要簡單的調用幾行Java代碼,即可自動實現模型的GPU推理計算。

使用框架進行BNN模型加載與推理

在BNN前向計算過程中,由于輸入特征與權重只包含1與-1兩種值,因此一個輸入特征和權重可以只用1個二進制位來表示,而通常的輸入特征與權重是浮點數,一個浮點數需要使用32個二進制位來表示,二者相差32倍,因此,BNN相比通常的浮點DNN,理論上可以將模型縮小32倍,同時計算上提升32倍的速度。在計算卷積層時,有大量的向量點乘操作。在BNN中,通過數學推導,傳統的浮點向量點乘操作可以被以下公式替代:
其中,與  是由浮點向量經過壓縮后的二值向量,是向量的長度, 與  分別是 中每個比特位。因此,在BNN中的卷積計算時采用上述公式,就能完成使用1位二進制位計算代替通常的32位計算,極大的減小了傳輸的數據量與計算量。同時,在BNN計算中將卷積層、Batch-Normalization(BN)層、二值化層(將浮點數據變為1與-1的層)整合,通過層與層之間的整合,層之間額外的數據傳輸以及計算量得到大幅度降低,從而節省時間。

同時,針對移動GPU的體系結構,PhoneBit框架采用了向量化訪存與計算、合并內存訪問、隱藏訪存延遲、合理安排計算量負載、避免邏輯分支的判斷等計算優化方法。相比于矢量方式1次指令只能讀取1個數據,向量化方式讀寫使得計算時GPU可以只使用1次指令即可讀取若干個數據如4個、8個甚至16個,達到高效利用內存帶寬的效果;合并內存訪問則是將GPU中同一批計算單元安排處理內存上連續的數據,這樣訪存時不需要間隔訪問,達到最大的讀寫率;隱藏訪存延遲則通過安排GPU中一批計算單元計算時,另一批待計算的單元同時讀取數據,避免相互等待;合理安排計算量負載則是根據計算規模的不同,調整GPU同一批計算單元進行計算的數據量,使之不會因為計算數據量過少而造成浪費,也不會因為數據量過多造成擁塞。避免邏輯分支則是盡可能讓GPU中同一批計算單元執行相同的條件分支代碼,節省執行時間。通過以上優化方法,PhoneBit框架速度比較如下:


于高通驍龍820平臺運行YOLOv2 Tiny網絡與現有主流浮點DNN框架對比

在高通驍龍820平臺,運行YOLOv2 Tiny網絡,相比CNNdroid(一個基于Android RenderScript的浮點神經網絡前向傳播框架),PhoneBit框架實現了1218-2378倍的速度提升,2.54-4.05倍更低的功率以及89-5263倍更高的能效比。相比TensorFlow Lite(谷歌針對移動設備提出的輕量級神經網絡前向傳播框架,支持浮點與8bit量化模式),PhoneBit框架實現了10-15.6倍的速度提升,2-2.77倍更低的功率以及23.9-44倍更高的能效比。

于高通驍龍820平臺運行Bi-Real Net 18網絡與現有基于ARM的BNN框架對比

在高通驍龍820平臺,運行Bi-Real Net 18網絡,相比daBNN(一個最新的基于ARM高度優化的二值神經網絡框架),PhoneBit框架實現了2.6倍的速度提升,2.62倍更低的功率以及6.8倍更高的能效比。


PhoneBit框架使用Bi-Real Net 18網絡對物品進行分類

目前,PhoneBit框架項目仍在不斷快速迭代進化,框架整體性能亦在不斷提升中,希望能夠以此項目為相關領域的科研工作者、開發者們提供一個穩定易用、高效便捷的輕量化神經網絡加速引擎。同時,也期望能有更多志同道合的朋友加入項目組,共同開發、優化本項目,為PhoneBit框架的發展出一份力。

上一篇:Linux、RISC-V等基金會負責人參訪鵬城實驗室
下一篇:推動量子計算與AI融合,飛槳成為中國首個支持量子機器學習的深度學習平臺

主站蜘蛛池模板: 无码福利一区二区三区| 欧美freesex黑人又粗超长| 看看黄色一级片| 成年免费视频黄网站在线观看 | 午夜电影成人福利| 中文字幕亚洲精品| 精品综合久久久久久888蜜芽| 成全视频在线观看免费看 | 91精品国产综合久久青草| 永久免费视频v片www| 国产视频福利一区| 亚洲国产精品一区二区成人片国内 | 欧美第一页浮力影院| 日韩精品一区二区三区老鸦窝 | 无翼乌全彩无遮挡动漫视频| 国产69精品久久久久777| 一级特色大黄美女播放网站| 看大片全色黄大色黄| 在线免费观看韩国a视频| 亚洲欧洲日产韩国在线| 中文字幕激情视频| 日韩精品一区二区三区老鸭窝| 国产乱xxxxx97国语对白| 中文乱码字字幕在线第5页 | 97精品免费视频| 欧美亚洲综合视频| 国产女人aaa级久久久级| 久久久久亚洲AV无码专区桃色| 精品视频一区二区三区| 天天色天天操综合网| 亚洲欧洲日产韩国在线| 国产视频你懂得| 拍拍拍无挡无遮10000| 免费专区丝袜脚调教视频| 91最新地址永久入口| 最近2019免费中文字幕视频三 | 性色av无码一区二区三区人妻| 免费一级特黄视频| 三级网站免费观看| 日本三级不卡视频| 免费国产成人高清在线观看麻豆|