作者/熊偉,福州瑞芯微電子股份有限公司
面向移動設備的深度學習部署運算優(yōu)化技術
作者/熊偉,福州瑞芯微電子股份有限公司
深度學習是機器學習的一個分支,隨著訓練方法的改進、數(shù)據(jù)量的爆發(fā)式增長及硬件運算能力的提升,近年來在圖像識別、語音識別等很多領域取得突破,并被逐步推廣部署到實際應用中。然而深度學習算法運算復雜度高、內存占用及帶寬需求大,在實際應用的部署中限制很大,尤其難以在移動設備中部署應用。本文首先介紹深度學習的背景,其次對面向移動設備深度學習部署運算優(yōu)化的關鍵技術進行歸納總結,最后對未來工作中的難點和發(fā)展趨勢進行了展望。
深度學習;移動設備;優(yōu)化
深度學習是模擬人腦進行分析學習的多層神經(jīng)網(wǎng)絡,它模仿人腦的機制來解釋數(shù)據(jù),處理數(shù)據(jù),通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。在2006年Hinton提出神經(jīng)網(wǎng)絡新的訓練方法之后,深度學習發(fā)展迅速,促使人工智能在圖像、語音、自然語言處理等多個領域有了實質性的突破,達到產(chǎn)業(yè)應用標準。例如:在人臉識別領域,Google的FaceNet[1]在LFW數(shù)據(jù)集[2]上識別率達到了99.63%,超過了人眼的識別率(97.53%);在圖像識別領域,微軟的ResNet[3]在ImageNet2012數(shù)據(jù)集上的錯誤率達到了3.57%,低于人類5.1%的錯誤率; 在語音識別領域,百度的DeepSpeech2[4]在中文語音識別的錯誤率達到了3.7%,而人類錯誤率為4.0%。
在應用層面,有很多實際領域可以廣泛運用深度學習技術,例如:
·圖像和視頻:視頻可能是大數(shù)據(jù)時代中最多的資源。它占據(jù)了當今互聯(lián)網(wǎng)70%的流量,世界范圍內每天都會產(chǎn)生80億小時的監(jiān)控視頻。計算機視覺需要從視頻中抽取有意義的信息。深度學習網(wǎng)絡已經(jīng)極大地提高了許多計算機視覺任務地準確性,可廣泛用于圖像分類,物體定位和檢測,圖像分割,和動作識別等任務中;
·語音和語言:深度學習已經(jīng)極大地提高了語音識別和許多其他相關任務地準確率,可以應用在機器翻譯,自然語言處理和音頻生成等應用中;
·醫(yī)藥:深度學習在基因學中扮演了重要的角色,它探究了許多疾病的基因層面的原因,例如孤獨癥,癌癥,和脊髓性肌萎縮。深度學習技術也被應用在醫(yī)學圖像檢測中,用來檢測皮膚癌,腦癌以及乳腺癌等等。
·機器人:深度學習網(wǎng)絡可以應用到機械臂抓取,運動規(guī)劃,視覺導航,四旋翼飛行器穩(wěn)定性控制以及無人駕駛汽車駕駛策略。
上述很多應用有部分可以依賴云端進行深度學習運算,但也有很多要求低延遲、帶寬限制大、安全要求高的應用比如機器人控制、無人車等,需要在本地設備中運行深度學習算法。
深度學習模型通常在PC或服務器上進行訓練,訓練時會同時進行前向及反向運算用以更新網(wǎng)絡參數(shù),得到的參數(shù)數(shù)值以浮點形式存儲。移動設備運算性能有限,內存空間有限,電力受電池限制,散熱條件也較差,如果直接在移動設備部署這樣的模型,其占用空間大,運行時占用很大內存,耗費處理器大量的運算資源。而大量的運算及存儲器訪問會導致移動設備功耗過大,續(xù)航時間及散熱的壓力很大。
如下表格[5]為45納米CMOS制程芯片上的數(shù)值運算及訪問內存所需的能量消耗:

操作能量消耗(pJ)倍率8位整數(shù)加法0.03 1 8位整數(shù)乘法0.2 6.6 16位浮點加法0.4 13.3 16位浮點乘法1.0 33.3 32位整數(shù)加法0.1 3.3 32位浮點加法0.9 30 32位寄存器訪問1 33 32位整數(shù)乘法3.1 102.3 32位浮點乘法3.7 122.1 32位靜態(tài)存儲緩存訪問5 165 32位動態(tài)存儲器訪問640 21120
如果能盡量以定點數(shù)、低位寬進行運算,盡量訪問內部存儲器,則運行功耗能得到有效控制。
近年來典型深度學習網(wǎng)絡主要有:
· AlexNet[6]:它在2012年贏得了ImageNet挑戰(zhàn),是第一個使用CNN方法贏得ImageNet的網(wǎng)絡。它擁有5個卷積層和3個全連接層。
· VGG16[7]:網(wǎng)絡深度大大加深,達到16層,其中包含13個卷積層和3個全連接層。為了平衡網(wǎng)絡層數(shù)加深而導致的成本增加,一個大的卷積核被分解為多個小的卷積核來減小參數(shù)數(shù)量,同時保持同樣的感知野。
· GoogLeNet[8]:網(wǎng)絡深度達到22層,同時引入了Inception模型。之前的模型通常是級聯(lián)的,而Inception模型是并行連接的。它使用了多種大小的卷積核對輸入進行處理,因此能夠在不同尺度上處理輸入。它的22層網(wǎng)絡包括了三個卷積層,9個Inceptioin層(每層相當于兩個卷積層),以及一個全連接層。
· ResNet[3]:也叫做殘差網(wǎng)絡(Residual Net),其使用了殘差連接使得能夠構建更深的網(wǎng)絡。它是ImageNet挑戰(zhàn)中第一個Top—5錯誤率低于人類的。當網(wǎng)絡層次變得更深時,訓練時的一個難點就是梯度消失(Vanishing Gradient)。而ResNet引入了“短接”模型,包含了全等連接,使得梯度傳播可以跳過卷積層,即使網(wǎng)絡層數(shù)達到一千層仍可以訓練。
下表為各典型網(wǎng)絡的復雜度:

年份模型名稱層數(shù)參數(shù)數(shù)量運算量錯誤率2012 AlexNet[6]8 60M 0.725B 16.4% 2014 VGG16[7]16 138M 15.5B 7.32% 2014 GoogLeNet[8]22 6.8M 1.566B 6.67% 2015 ResNet[3]152 19.4M 11.3B 3.57%
現(xiàn)有主流的幾類深度學習軟件框架及特點如下:
Caf f e:Caf f e 全稱為Convolutional Architecture for Fast Feature Embedding,是最早被廣泛使用的開源深度學習框架,目前由伯克利大學視覺中心進行維護。Caf f e 的主要優(yōu)勢包括如下幾點:(1)容易上手,網(wǎng)絡結構都是以配置文件形式定義,不需要用代碼設計網(wǎng)絡。(2)訓練速度快,能夠訓練 state—of—the—art 的模型與大規(guī)模的數(shù)據(jù)。(3)組件模塊化,可以方便地拓展到新的模型和學習任務上。
Caf f e 的核心概念是層,神經(jīng)網(wǎng)絡的每個模塊都是一個層。由層接收輸入數(shù)據(jù),經(jīng)過內部計算產(chǎn)生輸出數(shù)據(jù)。設計網(wǎng)絡結構時,只需通過編寫protobuf配置文件,把各個層拼接在一起即可構成完整的網(wǎng)絡。在模型結構非常復雜時,可能需要寫非常冗長的配置文件,閱讀時也比較費力。由于Caf f e出現(xiàn)較早,它的一大優(yōu)勢是擁有大量的訓練好的經(jīng)典模型(AlexNet、VGG16、Inception)。因為知名度較高,Caf f e 被廣泛地應用于前沿的工業(yè)界和學術界,許多提供源碼的深度學習的論文都是使用 Caf f e 來實現(xiàn)其模型的。
將Caf f e部署到移動設備上時,只需要簡單移植即可讓深度學習算法開始工作,但原始模型體積大、運算復雜度高,運行速度非常緩慢。
MXNet:MXNet是由DMLC(Distributed Machine Learning Community)開發(fā)的一款開源的、輕量級、可移植的、靈活的深度學習庫,通過混合使用符號編程模式和指令式編程模式來最大化效率和靈活性,已經(jīng)成為了AWS(亞馬遜云服務)官方推薦的深度學習框架。它是各個框架中率先支持多 GPU和分布式運算的,并且達到了近乎線性的分布式性能擴展。MXNet通過采用計算圖優(yōu)化算法讓符號計算執(zhí)行得非常快,通過內存空間重用來節(jié)省內存。MXNet的一個很大的優(yōu)點是支持非常多的語言封裝,比如 C++、Python、R、Julia、Scala、Go、MATLAB 和 JavaScript 等,可謂非常全面,基本主流的腳本語言全部都支持了。
MXNet原生支持在移動設備上運行基于深度學習的圖像識別等任務,但并未得到理想的優(yōu)化,運算速度及功耗不夠理想。
TensorFlow:TensorFlow由Google開發(fā),發(fā)布相對較晚,但借助Google巨大的影響力是目前最流行的機器學習庫。使用它可以非常方便地設計神經(jīng)網(wǎng)絡結構,其核心代碼和Caf f e及MXNet一樣是用 C++編寫的。除了核心代碼的C++接口,TensorFlow 還有官方的 Python、Go 和Java 接口。
TensorFlow支持在內存和CPU資源都緊張的移動設備上運行較復雜的模型,其在 CPU 上的矩陣運算庫使用了Eigen庫,能夠基于ARM架構編譯和優(yōu)化,因此在移動設備上有更好的表現(xiàn)。
3.1 模型剪枝壓縮
基于訓練好的深度學習模型,對權重值較小的連接進行剪枝:即刪除網(wǎng)絡中權重值低于某一閾值的所有連接,之后重新訓練網(wǎng)絡,得到剩余稀疏連接的權重值。剪枝方法使AlexNet和VGG—16模型的參數(shù)數(shù)量分別減少了9倍和13倍[9],具體如下表:

模型名稱權值數(shù)量運算量權值壓縮率運算量壓縮率AlexNet 61M 1.5B*11% 30% VGG16 138M 30.9B*7.5% 21%
3.2 降低權值精度
原始深度學習模型的參數(shù)都是32位浮點數(shù),如前所述位寬大的浮點數(shù)相比位寬小的浮點數(shù)、浮點數(shù)相比整數(shù)的計算更復雜、功耗更大。根據(jù)試驗,權值采用16位浮點數(shù)存儲時與權值采用32位浮點數(shù)存儲時相比,模型精度沒有損失[10],此時運算速度和功耗表現(xiàn)則有很大提升[11]:

模型名稱:AlexNet Tegra X1 (FP32) Tegra X2 (FP16)性能47 張/秒67 張/秒功耗5.5瓦5.1瓦每瓦性能8.6張/秒/瓦13.1張/秒/瓦
3.3 卷積運算優(yōu)化
在部署深度學習模型時,僅進行前向運算,其中卷積層所占的運算量最大,如下表所示:

全連接層占比AlexNet[6]61M 3.8% 96.2% 0.7B 91.9% 8.1% VGG-16[7]138M 10.6% 89.4% 15.5B 99.2% 0.8% NIN[12]7.6M 100% 0% 1.2B 100% 0.0% GoogLeNet[8]6.9M 85.1% 14.9% 1.6B 99.9% 0.1%模型名稱權值數(shù)量卷積層占比全連接層占比運算量卷積層占比
從上表可以看出,隨著深度學習模型的進化與發(fā)展,卷積層運算量占據(jù)了總運算量越來越大的比重。卷積運算主要有兩大類處理方式:
與T0時點相比,C組在T2和T3時點BP、HR均明顯增高,術中及術后各時點VAS評分均升高(P<0.05);與 T0時點相比,D組患者BP、HR在各時點差異無統(tǒng)計學意義(P>0.05),在T1~T5時點VAS評分升高(P<0.05)。在 T2和 T3時點,D組BP均明顯低于C組(P<0.05);在T2時點,D組患者HR明顯低于C組(P<0.05)。兩組患者各時點VAS評分變化趨勢基本相同,但T1~T5時點C組VAS評分明顯高于D組,差異有統(tǒng)計學意義(P<0.05)。見表1。兩組術后各時點SpO2變化曲線基本重合,差異無統(tǒng)計學意義(P>0.05)。
一是將卷積通過im2col轉化為矩陣乘法,利用現(xiàn)有的高性能矩陣運算庫來獲得高性能,這種方式將占用較大的臨時存儲空間;
二是直接計算卷積,具體有:采用樸素算法直接計算;采用將卷積計算轉化為FFT運算來加速,其將卷積運算復雜度由降低到了其中輸出大小為No,卷積核大小為Nf ;針對大小為3x3的卷積核采用Winograd算法[14]提高卷積計算性能,但需要在內存中占據(jù)臨時空間;利用ReLU輸出的稀疏性加速卷積計算[15]。
3.4 運算向量化
通過充分利用CPU/GPU的SIMD(單指令多數(shù)據(jù))指令,在進行卷積、池化、激活函數(shù)的運算時,可數(shù)倍提高計算效率。在移動設備中使用最廣的ARM處理器即設計了NEON指令集,NEON是結合了64—bit和128—bit的SIMD指令集,提供128位寬的向量運算,NEON技術從ARMv7開始被采用,目前可以在ARM Cortex—A和Cortex—R系列處理器中采用。NEON指令集支持的數(shù)據(jù)類型有:32—bit單精度浮點數(shù);8,16,32,64—bit無符號/有符號整型;8,16—bit多項式。
ARM公開的ComputeLibray程序庫,采用NEON(ARM CPU的SIMD指令集)優(yōu)化后的卷積運算及SGEMM(單精度矩陣乘法)性能比OpenCV原始版本提升了15倍以上。
針對現(xiàn)有移動設備,采用前文所述的一系列技術,可大幅減小模型體積,降低內存占用,大幅減少運算量及提高運算效率,進而有效控制深度學習算法在移動設備上的運行功耗。隨著深度學習技術的繼續(xù)發(fā)展,將會有性能更強、容量更大、運算量更大的模型不斷涌現(xiàn),運算性能及功耗的限制始終是深度學習算法在移動設備上部署的挑戰(zhàn)。針對這樣的發(fā)展趨勢,在硬件及芯片層面進行專有設計,開展更深度的優(yōu)化,例如:將運算位數(shù)進一步降低甚至僅采用一位二進制數(shù)進行權值存儲及運算[16];硬件實時對壓縮后的權值及特征圖進行解壓縮,大幅降低帶寬及訪存功耗[2]。在未來將專有硬件逐步引入移動設備后,深度學習將在更多的領域帶來突破,應用場景將更加廣泛。
* [1] F. Schroff, D. Kalenichenko, and J. Philbin. Facenet: A unified emb edding for face recognition and clustering. In CVPR, 2015. 1, 7
* [2] Y.—H. Chen, T. Krishna, J. Emer, and V. Sze, “Eyeriss: An Energy—Efficient Reconfigurable Accelerator for Deep Convolu— tional Neural Networks,” IEEE J. Solid—State Circuits, vol. 51, no. 1, 2017.
* [3] K. He, X. Zhang, S. Ren, and J. Sun, “Deep Residual Learning for Image Recognition,” in CVPR, 2016.
* [4] Amodei, Dario, et al. "Deep Speech 2: End—to—End Speech Rec ognition in English and Mandarin." international conference on machine learning (2015): 173—182.
* [5] M. Horowitz, “Computing’s energy problem (and what we can do about it),” in IEEE Int. Solid—State Circuits Conf. Dig. Tech. Papers (ISSCC), Feb. 2014, pp. 10-14.
* [6] A. Krizhevsky, I. Sutskever, and G. E. Hinton, “ImageNet Clas sification with Deep Convolutional Neural Networks,” in NIPS, 2012.
* [7] K. He, X. Zhang, S. Ren, and J. Sun, “Delving deep into rectifi ers: Surpassing human—level performance on imagenet classifica tion,” in The IEEE International Conference on Computer Vision (ICCV), December 2015.
* [8] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov,D. Erhan, V. Vanhoucke, and A. Rabinovich, “Going Deeper With Convolutions,” in CVPR, 2015.
* [9] Han, Song, Pool, Jeff, Tran, John, and Dally, William J. Learni ng both weights and connections for efficient neural networks. In Advances in Neural Information Processing Systems, 2015.
* [10] S. Gupta, A. Agrawal, K. Gopalakrishnan, and P. Narayan an, “Deep Learning with Limited Numerical Precision,” in ICML,2015.
* [11] Nvidia, GPU—Based Deep Learning Inference: A Performance and Power Analysis.
* [12] Min Lin, Qiang Chen, Shuicheng Yan, Network In Network. arXiv:1312.4400, 2013.
* [13] M. Mathieu, M. Henaff, and Y. LeCun, “Fast training of convol utional networks through FFTs,” in ICLR, 2014.
* [14] A. Lavin and S. Gray, “Fast algorithms for convolutional neu ral networks,” in CVPR, 2016.
* [15] Shi, Shaohuai; Chu, Xiaowen, Speeding up Convolutional Neural Networks By Exploiting the Sparsity of Rectifier Units. epri nt arXiv:1704.07724.
* [16] M. Courbariaux, Y. Bengio, and J.—P. David, “Binaryconnect:Training deep neural networks with binary weights during propa gations,” in NIPS, 2015.