齊豪 劉少禮 李威③?
(?中國科學技術大學計算機科學與技術學院 合肥230026)
(??上海寒武紀信息科技有限公司 上海201306)
(???中國科學院計算技術研究所處理器芯片國家重點實驗室 北京100190)
近年來,深度學習技術在圖像分類[1]、語音識別[2]、自然語言處理[3]、視頻描述生成[4]等多個領域得到廣泛的應用并取得巨大的成功,很多經(jīng)典的神經(jīng)網(wǎng)絡模型被提出,比如AlexNet[5]、VGGNet[6]、ResNet[7]和Inception V3[8]等。這些模型在提升算法精度的同時,其深度和規(guī)模都在不斷增加,其計算量和訪存量也在迅速增加。研究人員從算法優(yōu)化和硬件加速維度提出了多種優(yōu)化方法來解決上述問題,其中算法優(yōu)化包括模型剪枝[9]、參數(shù)量化[10]等,硬件加速結構包括DianNao[11]、DaDianNao[12]等。
移動設備同時受到算力和功耗的限制,因此針對移動設備的研究致力于設計更輕量級的模型,這些模型由較少的層和計算操作組成,比如Xception[13]、MobileNetV1[14]、MobileNetV2[15]、Mobile-NetV3[16]和EfficientNet[17]等。在這些輕量級模型中,深度卷積(depthwise convolution)是一個比較常用的計算操作,比如在Xception 網(wǎng)絡的所有卷積操作中,深度卷積操作的數(shù)量占50%。因此,如何加速深度卷積的計算是一個值得研究的問題。
深度卷積和傳統(tǒng)卷積的不同之處在于它的輸入通道個數(shù)和輸出通道是相同的,并且是一一對應的,輸入通道之間不累加。目前處理深度卷積的通常做法是將數(shù)據(jù)維度設置為NHWC,其中N表示特征圖的個數(shù),H和W分別表示特征圖的長度和寬度,C是通道數(shù),然后使用單指令多數(shù)據(jù)流(single instruction multiple data,SIMD)指令進行處理[18]。這種處理方式存在一個問題,即如何設計相應處理器的運算器長度? 如果運算器的長度太長,對于C較小的深度卷積,運算效率較低,比如MobileNetV3 的深度卷積最小C是16,如果用運算器長度為64 的SIMD處理器計算,運算效率只有25%;如果運算器長度設置為16,雖然計算效率可以達到100%,但此時處理器的計算峰值偏低。故一個固定運算器長度的SIMD 處理器不能夠高效地處理各種規(guī)模的深度卷積。
針對這一問題,本文提出了一種軟硬件結合的方式來優(yōu)化深度卷積的計算。本文關注于解決各種規(guī)模的深度卷積的優(yōu)化,通過設計特定的數(shù)據(jù)放置方式和多種數(shù)據(jù)傳輸模式,結合軟件模式選擇、數(shù)據(jù)拆分等優(yōu)化方式,在提高運算效率的同時減少了訪存量,提升了算法實現(xiàn)性能。本文主要貢獻如下。
(1) 提出一種新型的深度卷積加速器(depthwise convolution accelerator,DCA)結構,該加速器設計多種權值傳播模式以高效支持各種規(guī)模的深度卷積。
(2) 基于本文設計的深度卷積加速器,在軟件層面,選擇使用不同的權值傳輸模式和數(shù)據(jù)拆分方式,充分發(fā)揮出深度卷積加速器的性能。
(3) 實施了DCA 加速器和軟件優(yōu)化,并測試其在不同深度卷積規(guī)模上的實現(xiàn)性能。實驗結果表明,相比運算器長度為64 的單核SIMD 處理器最大可達29.3 倍的性能加速。
近年來,神經(jīng)網(wǎng)絡飛速發(fā)展,計算量和訪存量的迅速增加給計算機系統(tǒng)帶來了巨大的挑戰(zhàn)。中央處理器(central processing unit,CPU)和圖形處理器(graphics processing unit,GPU)為了保證其通用性,無法以較高的性能功耗比處理神經(jīng)網(wǎng)絡任務。因此,神經(jīng)網(wǎng)絡加速器應運而生并得到了迅速的發(fā)展。Chen 等人[11]在2014 年提出了DianNao,DianNao 著重分析了單核深度學習處理器片上存儲層次以及訪存子系統(tǒng)的設計對性能和功耗的影響,專注于片上存儲層次和訪存子系統(tǒng)的優(yōu)化。DaDianNao[12]是一種用于高效處理大規(guī)模深度學習算法的多核架構,并且采用片上eDRAM 提高片上存儲密度,完全避免了片外訪存的開銷。ShiDianNao[19]是為以極低功耗開銷快速處理嵌入式系統(tǒng)中的圖像應用而設計的架構,它通過將整個卷積神經(jīng)網(wǎng)絡(convolutional neural networks,CNN)模型保存到片上存儲器內(nèi),并放置到圖像傳感器旁邊,直接接收圖像傳感器的輸入,可以完全消除系統(tǒng)對片外存儲器的訪問。文獻[20]設計了一款可以支持多種機器學習算法的運算單元,該運算單元實現(xiàn)了低面積、低功耗的需求。文獻[21]提出了一款新型的稀疏神經(jīng)網(wǎng)絡加速器架構。該架構能夠有效利用稀疏神經(jīng)網(wǎng)絡中的權值稀疏性和神經(jīng)元稀疏性,進一步提升加速器處理神經(jīng)網(wǎng)絡模型時的運算速度。文獻[22]提出了一種軟硬件協(xié)同的方法,有效解決了稀疏神經(jīng)網(wǎng)絡的稀疏不規(guī)則性問題。MW-DLA[23]是一種支持動態(tài)可配置數(shù)據(jù)寬度的深度學習加速器,可支持多種數(shù)據(jù)格式。為了提高神經(jīng)網(wǎng)絡加速器的靈活性和通用性、提升代碼密度,Liu 等人[24]提出了神經(jīng)網(wǎng)絡指令集Cambricon。
隨著神經(jīng)網(wǎng)絡加速器的不斷發(fā)展,許多軟件層面的支持和優(yōu)化被提出來。DLPlib[25]是一個基于深度學習處理器的高性能庫,該庫支持主流神經(jīng)網(wǎng)絡算法的推理操作和一組基本的矩陣和向量操作。ZhuQue[26]定義了神經(jīng)網(wǎng)絡數(shù)據(jù)的動態(tài)標簽和靜態(tài)標簽,提出了一種神經(jīng)網(wǎng)絡數(shù)據(jù)分類方法NNData-Class,實現(xiàn)了基于標記數(shù)據(jù)布局的神經(jīng)網(wǎng)絡開發(fā)套件LDL-NDK,最后抽象出了基于標記的神經(jīng)網(wǎng)絡編程模型。文獻[27]提出了一系列針對神經(jīng)網(wǎng)絡加速器的編譯優(yōu)化技術,包括圖優(yōu)化、循環(huán)展開和流水線優(yōu)化等。TVM[28]是一種深度學習編譯器框架,可以解析各種前端框架的計算圖。它使用Halide[29]中間表示(intermediate representation,IR)表示計算循環(huán)并提供多種級別的優(yōu)化。文獻[18]提出了一種基于ARM 處理器的深度卷積優(yōu)化方案。
上述工作都是針對傳統(tǒng)卷積、矩陣乘和其他機器學習算法等進行硬件支持或軟件優(yōu)化的工作,沒有針對深度卷積進行深入分析和探討。目前多數(shù)平臺通過使用固定運算長度的SIMD 處理器來實現(xiàn)深度卷積,但是這種方法具有局限性,即固定運算長度的SIMD 處理器對計算C方向很小的深度卷積的效率不高,從而可能會影響最終性能。本文提出的深度卷積加速器能夠有效計算各種規(guī)模的深度卷積算法,并且可根據(jù)硬件的設計進行進一步的軟件優(yōu)化。
本節(jié)主要介紹深度卷積的運算和訪存特征,以及在實際神經(jīng)網(wǎng)絡當中的規(guī)模特征。
深度卷積中輸入特征圖的通道數(shù)和輸出特征圖的通道數(shù)是相同的,并且各個輸入特征圖的通道之間不會像傳統(tǒng)卷積算法那樣進行累加操作,各個通道獨立運算。如圖1 所示,輸入input、權重weight及輸出output均為三維向量,其3 個維度分別對應高度(h)、寬度(w)及通道(c)。其中,輸入input在3 個維度上的大小是hi×wi×ci;輸出output在3 個維度上的大小是ho × wo × co,其中co和ci是相同的;深度卷積的權值weight在3 個維度上的大小是ky × kx × ci,其中ky、kx分別表示卷積核在H、W方向的大小。假設深度卷積在H和W方向的步長stride分別為sy和sx,則深度卷積運算可以形式化地表示為式(1)。
圖1 深度卷積
陳云霽等人[[30]在《智能計算系統(tǒng)》一書中提到神經(jīng)網(wǎng)絡訪存有兩個重要的特性,分別是可解耦性和可重用性。在加速器的設計中需要考慮這兩個特性。
深度卷積的乘加運算器(multiply-accumulator,MAC)計算量和訪存量可由式(2)和式(3)得到。對于MobileNetV1、MobileNetV2、MobileNetV3 網(wǎng)絡中的所有深度卷積規(guī)模,計算量和訪存量的比例平均為3.8∶1。加速器的計算和訪存是可以并行的,因此在設計深度卷積加速器時要著重考慮算力和訪存帶寬之間的均衡,應盡量讓計算時間和訪存時間相等。
MobileNet V1、MobileNet V2、MobileNet V3 中的深度卷積的輸入神經(jīng)元規(guī)模有一個特征,即在網(wǎng)絡的前幾層,C方向值較小,而HW方向值較大;在網(wǎng)絡的后幾層,C方向值較大,而HW方向值較小。
網(wǎng)絡中輸入神經(jīng)元的C方向的大小取值范圍是[16,1024]。C方向最小是16,如果使用一個運算器長度為64 的SIMD 處理器來計算,實際計算效率最多只有25%。如果使用一個運算器長度為16的SIMD 處理器來計算,計算效率雖然可以達到100%,但此時處理器算力相對較小。所以在設計加速器時,要選取合適的運算器規(guī)模。
基于上一節(jié)對深度卷積的分析,本節(jié)提出了一個新型的深度卷積加速器架構,稱之為DCA(depthwise convolution accelerator)。該架構通過設計特定的數(shù)據(jù)放置方式和多種數(shù)據(jù)傳輸模式,高效完成各種規(guī)模的深度卷積運算。
加速器的整體架構如圖2 所示,主要包括以下幾個部分:1 個矩陣運算單元(matrix functional unit,MFU)、1 個控制處理器(control processor,CP)、2 個片上緩存(input neuron buffer,NBin 和output neuron buffer,NBout)和直接存儲訪問模塊(direct memory access,DMA)。
圖2 深度卷積加速器總體架構
加速器的2 個片上緩存分別命名為NBin 和NBout,其中NBin 存放輸入數(shù)據(jù),NBout 存放權值和輸出數(shù)據(jù)。加速器沒有為權值數(shù)據(jù)單獨分配一個緩存,而是和輸出數(shù)據(jù)共享一個緩存,主要有以下2 個原因:
(1) 權值數(shù)據(jù)規(guī)模相對于輸入和輸出數(shù)據(jù)規(guī)模較小,可以和輸入或輸出數(shù)據(jù)共享一個緩存,以減少單獨為權值分配緩存的硬件開銷。
(2) 權值數(shù)據(jù)將以不同的方式傳輸?shù)礁鱾€運算單元中(詳見3.4 節(jié)),并且與輸入數(shù)據(jù)進行計算,故輸入數(shù)據(jù)和權值數(shù)據(jù)不能放在同一個緩存上。
矩陣運算單元由多個處理單元(processing element,PE)組成,PE 之間使用胖樹(FatTree)進行連接,以避免線路擁塞,如圖3 所示。不同于NBout,NBin 被分成了多份,每個PE 包含了部分NBin。每個PE 內(nèi)部結構如圖4 所示,包含以下幾個部分:1個運算器(computational unit,CU)、1 個數(shù)據(jù)控制器(data controller,DC)和2 個私有的片上緩存(private buffer,PB),其中1 個緩存用于存放神經(jīng)元(input private buffer,INPB),另外1 個緩存用于存放權值(weight private buffer,WPB)。
圖3 MFU 示意圖
圖4 PE 內(nèi)部結構圖
CU 是一個向量MAC 單元,每個向量MAC 包含多個標量MAC 運算器。MAC 接收16 位定點數(shù)進行計算而不是常用的32 位單精度浮點數(shù),因為研究表明,使用16 位定點數(shù)即可保證深度學習算法的精度基本不受影響[11]。
數(shù)據(jù)通路的設計主要有以下3 個特點:(1) 駐留輸入、傳輸權值;(2) 多種權值傳輸模式;(3) 多播部分輸入數(shù)據(jù)。
駐留輸入、傳輸權值。對于實際的深度卷積,其權值相對于輸入較小。故本文在設計加速器時,與DaDianNao[12]的駐留權值、傳輸輸入的方式不同,本文的加速器將輸入駐留在與運算器相鄰的片上緩存上,傳輸權值。這樣做的目的是減少數(shù)據(jù)傳輸帶來的性能和功耗開銷。
多種權值傳輸模式。為了支持不同的深度卷積規(guī)模,加速器設計了3 種權值傳播模式,分別是權值廣播、權值多播、權值單播,如圖5 中(a)、(b)、(c)所示,不同的線型分別代表不同的權值。
圖5 權值傳輸模式示意圖
加速器在處理一次任務時,需要將當前任務拆分到每一個PE 上。任務在PE 之間的拆分可以看作深度卷積的輸入數(shù)據(jù)在H、W、C3 個方向的拆分。
根據(jù)任務在PE 之間不同的拆分方式,PE 之間存在多種共享權值的方式,對應了不同的權值傳輸模式。在神經(jīng)網(wǎng)絡前幾層,C方向值較小、HW方向值較大,此時PE在HW方向拆分輸入,每個PE 使用相同的權值,對應的權值傳輸模式是權值廣播,如圖5(a)所示;在神經(jīng)網(wǎng)絡后幾層,C方向值較大、HW方向值較小,此時PE在C方向拆分輸入,對應的權值傳輸模式是權值單播,每個PE 使用不同的權值,如圖5(c)所示;在網(wǎng)絡的中間幾層,C方向大小適中,此時PE在HWC3 個方向拆分輸入,對應的權值傳輸模式是權值多播,如圖5(b)所示。權值多播又分為多種形式,將PE 分組,每一組內(nèi)使用相同權值,組之間使用不同的權值,可以有2 個PE 為一組、4 個PE 為一組、8 個PE 為一組等多種模式。
多播部分輸入數(shù)據(jù)。在權值廣播和權值多播模式中,輸入數(shù)據(jù)會在HW方向拆分到不同PE 的NBin 上。根據(jù)卷積的計算特征,對于卷積核大于stride的情況,HW方向相鄰的輸出數(shù)據(jù)點會使用相同的輸入數(shù)據(jù),所以會出現(xiàn)需要2 個PE 內(nèi)部的NBin 存放部分相同輸入數(shù)據(jù)的情況。圖6 給出了相同輸入數(shù)據(jù)在HW平面拆分到不同PE 的情況,圖中input數(shù)據(jù)中灰色的部分是2 個2 ×2 的輸出大小對應的重疊的輸入數(shù)據(jù),其中卷積核和stride的大小分別是3 和1。在這種情況下,本文的加速器專門設計了一種部分數(shù)據(jù)多播的通路,以加速加載輸入數(shù)據(jù)有冗余的情況。數(shù)據(jù)通路會檢查從DMA 傳輸?shù)絅Bin 的數(shù)據(jù),如果是冗余數(shù)據(jù),那么進行多播。
圖6 PE 之間共享數(shù)據(jù)示意圖
本節(jié)介紹針對本文設計的DCA 加速器,軟件應該如何實現(xiàn)并且如何優(yōu)化。本節(jié)的軟件實現(xiàn)是在DLPlib[25]的基礎上進行擴展,使其支持DCA 加速器。其中擴展包括權值傳輸模式的選擇、數(shù)據(jù)拆分。
本文的加速器設計了多種權值傳輸模式,在使用時需根據(jù)具體的情況選擇不同的權值傳輸模式。在權值傳輸模式選擇時,考慮的因素有以下3 個方面。
(1) 運算效率。在計算時,運算效率由有效工作的PE 占所有PE 的比例和每個PE 中有效工作的運算器比例所決定。假設每個PE 做有效工作的運算器的比例都是相同的,則運算效率=有效工作的PE 比例×每個PE 中有效工作的運算器的比例。
(2) 訪存性能。考慮訪存局部性,盡量減少跳躍訪存(非連續(xù)內(nèi)存訪問),因為跳躍訪存可能會導致存儲器內(nèi)部行緩沖區(qū)命中率低,進而降低訪存性能。
(3) 輸入數(shù)據(jù)冗余。輸入數(shù)據(jù)冗余分為2 種類型,即輸入數(shù)據(jù)在片外存儲器上拆分的冗余和輸入數(shù)據(jù)在PE 之間拆分的冗余。第1 種冗余是因為片上緩存大小限制,輸入數(shù)據(jù)在片外存儲器拆分,會引入額外的訪存或者片上數(shù)據(jù)傳輸開銷,從而可能影響整體性能。第2 種冗余不僅會占用更多片上緩存空間,而且冗余的數(shù)據(jù)寫入緩存會增加DCA 加速器的功耗。其中第2 種冗余數(shù)據(jù)的訪存行為可以通過本文3.4 節(jié)介紹的多播部分輸入數(shù)據(jù)的方式消除。但是第2 種冗余數(shù)據(jù)的增多會導致其占用片上緩存增多,使得輸入數(shù)據(jù)在片外存儲器的拆分粒度變小,拆分次數(shù)增加,最終導致第1 種數(shù)據(jù)冗余規(guī)模增加,整體性能下降。
為保證訪存的性能,本文在做數(shù)據(jù)拆分時,不會優(yōu)先拆分C方向,即盡量減少跳躍訪存。因此,后面的內(nèi)容主要考慮運算效率和數(shù)據(jù)冗余對模式選擇的影響。
本文的重點在于加速深度卷積的性能,即最小化深度卷積任務在加速器上的運行時間。因為DCA 加速器的計算和訪存可以并行,所以在理想情況下,最終運行時間T可根據(jù)計算時間Tcpt和訪存時間Tio確定,即:
假設任務的計算量、訪存量和輸入數(shù)據(jù)冗余量分別為CPT(MAC)、IO(B)和R(B),加速器的計算峰值和帶寬分別為CP(Giga operations per second,GOPS)和BW(GB/s),任務運行在加速器上的計算效率為CE(computing efficiency),則有:
從式(5)和式(6)可以看出,在任務規(guī)模以及加速器性能參數(shù)確定的情況下,軟件層面可以控制并且影響任務最終性能的2 個因素分別是計算效率CE和輸入數(shù)據(jù)冗余量R。
假設PE 個數(shù)M為16,向量MAC 的長度為16。因為每個PE 的向量MAC 是沿C方向進行處理,所以計算效率主要受C方向大小的影響。圖7 給出了不同權值傳輸模式下,計算效率隨著C方向大小變化而變化的示意圖,其中在權值多播模式下,4 個PE 為一組(為簡便起見,后續(xù)權值多播模式都使用4 個PE 一組)??梢钥闯?權值廣播模式的計算效率在多數(shù)情況是很高的,并且隨著C的不斷增大趨于穩(wěn)定;權值單播模式在多數(shù)情況下計算效率不高,并且很不穩(wěn)定;權值多播模式的計算效率適中并且變化幅度較小,隨著C的增大逐漸增大并趨于穩(wěn)定。因此,若只從計算效率的角度考慮,應該優(yōu)先選擇權值廣播模式,其次是權值多播模式,最后是權值單播模式。但是權值廣播和多播模式在PE 之間會有部分輸入數(shù)據(jù)的冗余,會影響最終性能。因此,在選擇權值傳輸模式時還需要進一步考慮輸入數(shù)據(jù)冗余對性能的影響。
圖7 不同模式下的計算效率
圖8 給出了在不同傳輸模式下,數(shù)據(jù)冗余量隨著C方向的變化曲線,其中HW方向的輸出大小都是1024,卷積核和stride分別是3 和1。從圖8 可以看出,隨著C方向逐漸增大,3 種模式的數(shù)據(jù)冗余量都逐漸增多,其中權值廣播的變化幅度較大,權值單播模式的變化幅度較小,權值多播的變化幅度介于二者之間。權值廣播模式的曲線在C為896 之后消失,因為在C方向不拆分的情況下,此時每個PE 的片上緩存大小小于輸入數(shù)據(jù)在HW方向拆分最小粒度所需的緩存空間大小。
圖8 不同模式下的數(shù)據(jù)冗余量
假設運算單元的時鐘頻率為500 MHz,NBin 的大小為0.25 MB,內(nèi)存訪問帶寬為64 GB/s,此時加速器是計算量決定性能。圖9 給出了在不同權值傳輸模式下,任務運行時間T隨著C方向增大而變化的曲線。從圖9 可以看出,在多數(shù)情況下,因為權值廣播的計算效率較高,權值廣播模式的運行時間最小。此外還可以看出3 種模式的運行時間隨著C方向的增大呈現(xiàn)階梯形狀,并且權值單播模式下變化幅度最大,其次是權值多播和廣播模式。如果僅從任務運行時間來選擇模式,應該優(yōu)先考慮權值廣播模式,因為在多數(shù)情況下,權值廣播運行時間最小。
圖9 任務在計算量決定性能時,不同模式下的運行時間
圖10 給出了任務在計算量決定性能時,不同模式下的最小運行時間,在運行時間相同的情況下,優(yōu)先考慮數(shù)據(jù)冗余量小的模式。從圖9 和圖10 可以看出,在權值廣播和多播的數(shù)據(jù)規(guī)模和計算效率相同的情況下,應選擇使用權值多播模式,比如C大于48 且小于等于64 的情況,因為此時權值廣播的數(shù)據(jù)冗余量比權值多播模式大。
圖10 任務在計算量決定性能時,不同模式下的最小運行時間
PE 之間在C方向拆分不會引入冗余數(shù)據(jù),故冗余數(shù)據(jù)的大小只需要考慮HW2 個方向。假設一次計算的輸出數(shù)據(jù)在HW方向的大小分別是ho、wo,輸出的HW平面在權值廣播和權值多播模式下分別拆分成x和y份。因為權值多播在C方向拆分,所以在HW方向拆分的個數(shù)y小于x。為了PE 之間的計算負載均衡,每個PE 應該處理相同規(guī)模的數(shù)據(jù),則權值廣播和權值多播在PE 拆分之后的輸出在HW方向大小的乘積分別為ho×wo/x,ho×wo/y。根據(jù)4.2 節(jié)數(shù)據(jù)拆分的結論,即每個PE 處理輸入的HW方向大小應盡可能相等。因此,權值廣播和權值多播模式下的每個PE在HW方向的大小分別為
在卷積核和stride分別為3 和1 的情況下,權值廣播的HW平面的數(shù)據(jù)冗余量如式(7)最左端所示,權值多播的數(shù)據(jù)冗余量類似。因為輸出大小和卷積參數(shù)都是已知量,權值廣播模式的數(shù)據(jù)冗余量可以表示為,同理可得權值多播的數(shù)據(jù)冗余量為。因為x >y,顯然C3。所以在數(shù)據(jù)規(guī)模確定的情況下,權值廣播的數(shù)據(jù)冗余量比權值多播模式大。因此,在任務規(guī)模和計算效率相同的情況下,優(yōu)先考慮使用權值多播模式而不是權值廣播模式。
在權值單播模式下,PE 之間在C方向拆分,PE之間沒有冗余數(shù)據(jù)。因此,當權值單播和權值多播、權值廣播的計算效率相同時,應選擇權值單播模式,比如圖10中C大于240 且小于等于256 的情況。
結合式(4)~(6)以及對其的分析,本文以最小化任務在加速器上的運行時間為目標,然后評估任務在不同模式下的運行時間,最終選擇運行時間最小的模式。如果運行時間相同,應盡可能減小Tcpt和Tio。如果Tcpt和Tio也相同,那么應該減少片上數(shù)據(jù)傳輸量,即減少數(shù)據(jù)冗余量。
數(shù)據(jù)拆分主要分為2 類:因片上緩存大小限制而導致的拆分和輸入數(shù)據(jù)在PE 之間的拆分。第1類是因為片上緩存NBin 和NBout 的大小是有限的,當深度卷積的規(guī)模較大,即數(shù)據(jù)大小大于緩存大小,需要對數(shù)據(jù)進行拆分。其中包括權值拆分、輸入和輸出拆分。權值拆分的情況比較少,這里不做討論。第2 類是輸入數(shù)據(jù)在PE 之間的拆分,因為在權值廣播和多播模式下,PE 之間的輸入數(shù)據(jù)會有冗余。軟件在做拆分時,應盡可能地減少冗余數(shù)據(jù)。在確定一次計算的大小時,需要同時考慮以上2 類拆分。具體步驟如下。
輸入和輸出在緩存上的拆分。對于輸入和輸出的拆分,首先考慮輸出的拆分,然后根據(jù)輸出大小以及卷積參數(shù)推測出輸入的大小??紤]深度卷積的數(shù)據(jù)訪存局部性,拆分的次序分別是ho、wo、co,應盡量保證C方向不拆分。
輸入數(shù)據(jù)在PE 之間的拆分。針對不同的權值傳輸模式,輸入數(shù)據(jù)在PE 之間的拆分將分為3 類,即HW方向拆分、HWC方向拆分和C方向拆分。相應的硬件模式是權值廣播、權值多播、權值單播。
輸入數(shù)據(jù)在HW方向拆分時,PE 之間會有部分冗余輸入數(shù)據(jù),如圖6 所示。相同大小的輸入數(shù)據(jù)在PE 之間的拆分方式不同,冗余數(shù)據(jù)大小不同,輸入數(shù)據(jù)占用片上緩存空間大小也不同。因此,在輸入數(shù)據(jù)規(guī)模確定的情況下,如何在PE 之間拆分輸入數(shù)據(jù)以最小化片上緩存空間是個值得研究的問題。
為了PE 之間的計算負載均衡,每個PE 的計算量應盡可能相同。假設輸出數(shù)據(jù)在HW方向的大小分別是ho和wo,stride在HW方向都為1,拆分后每個PE 的輸出數(shù)據(jù)在HW方向的大小是hp和wp,PE數(shù)量是M,則hp×wp和ho×wo/M相等。每個PE的輸入數(shù)據(jù)大小可以根據(jù)輸出大小和深度卷積參數(shù)推測出,如式(8)所示。
在式(8)中,C4=hp × wp +(ky -1)×(kx -1),因為hp×wp和ho×wo/M相等,在輸出數(shù)據(jù)大小確定的情況下,hp×wp是已知量;因為ky、kx都是已知量,所以(ky-1) ×(kx-1)也是已知量,故C4是已知量。在網(wǎng)絡中,ky和kx的大小通常相等,因此C5=ky -1=kx -1 是已知量。因為C4和C5都是已知量,所以輸入數(shù)據(jù)占用片上緩存空間大小由hp+wp確定。根據(jù)基本不等式當且僅當a和b相等時,a+b的結果取最小,所以當且僅當hp和wp相等時,hp+wp的值取最小。因為hp×wp和ho×wo/M相等,所以相同的輸入數(shù)據(jù)規(guī)模在PE 之間拆分時,占用總片上緩存空間大小有最小值M ×(2× C4×)。
故結論是,當輸入數(shù)據(jù)在HW方向拆分時,應盡量保證每個PE 處理的H方向的大小和W方向的大小相同。PE 的個數(shù)為M,所以當ho/wo接近M時,只在H方向拆分M份;當ho/wo接近1 時,在H方向拆分份,在W方向拆分份;當ho/wo接近1/M時,只在W方向拆分M份。
本節(jié)將詳細介紹本文實驗所使用的Benchmark和實驗平臺,并將本文設計的DCA 加速器與其他硬件平臺進行性能對比。
本文的Benchmark 選取了應用廣泛的MobileNet V1、MobileNet V2、MobileNet V3 網(wǎng)絡中具有代表性的深度卷積規(guī)模作為實驗測試用例,涵蓋了神經(jīng)網(wǎng)絡中的各種深度卷積規(guī)模,如表1 所示。
表1 深度卷積測試用例
本文在3 種不同的平臺上做了實驗,分別是CPU 平臺、SIMD 平臺和DCA 加速器平臺。
CPU 平臺。通用多核處理器,Intel Core i7-8850H,基本頻率是2.60 GHz,最大睿頻頻率可達4.30 GHz,9 MB L3 Cache,6 核,12 線程。算法的實現(xiàn)使用公開實現(xiàn)的高性能函數(shù)庫,比如Intel oneDNN[31]。
SIMD 平臺。單核SIMD 處理器。該平臺的架構類似于DCA 加速器平臺,使用0.75 MB 的SPM,用于存放輸入神經(jīng)元、輸出神經(jīng)元和權值,時鐘頻率是1 GHz,有運算器長度為64 的乘法器和加法器。在SIMD 平臺,使用高性能庫DLPlib[25],數(shù)據(jù)擺放的格式是NHWC。
DCA 加速器平臺。本文提出的單核深度卷積加速器。0.25 MB 的NBout,0.5 MB 的NBin,時鐘頻率為1 GHz。PE 個數(shù)設置為16,向量MAC 的長度為16,因為根據(jù)本文2.2 節(jié)的介紹,在實際應用的神經(jīng)網(wǎng)絡中C方向的最小值是16。DCA 加速器使用的高性能庫是在DLPlib[25]上實施本文第4 節(jié)介紹的軟件優(yōu)化的版本。為了獲得DCA 加速器的性能,首先通過DLPlib 生成指令,然后使用C ++構建了一個性能模擬器來獲取最終性能。為了與單核SIMD 平臺公平對比,DCA 加速器的訪存帶寬和單核SIMD 處理器保持一致。
軟件優(yōu)化。本文分析了軟件優(yōu)化對DCA 加速器整體性能的影響。圖11 顯示了使用軟件優(yōu)化的加速比,只使用權值單播模式,使用在此模式下最優(yōu)的數(shù)據(jù)拆分方式。從圖11 中可以看出,在使用軟件優(yōu)化的情況下,所有的測試用例都有性能提升,平均提升了1.65 倍。其中dwconv1 的性能提升最明顯,這主要是由于dwconv1的C方向比較小,使用DCA加速器的權值廣播模式可以充分利用DCA 的運算單元。
圖11 DCA 加速器使用軟件優(yōu)化的加速比
圖12 顯示了表1 的測試用例在不同的模式下的性能,其中每種模式都使用在當前模式下最優(yōu)的拆分方式。從圖12 中可以看出,dwconv1 和dwconv2 在權值單播模式下性能相對較差;dwconv3 和dwconv4 在3 種模式下性能相同;dwconv5、dwconv6和dwconv7 在權值單播模式下性能比較差。
圖12 測試用例在DCA 加速器的不同模式下的運行時間對比
在神經(jīng)網(wǎng)絡的前幾層,C方向通常比較小,如果使用權值單播模式,計算效率會非常低,最終導致計算成為整體性能的瓶頸。dwconv1 在權值廣播模式下,訪存時間大于計算時間。但是在使用權值單播模式下,它的計算效率只有1/16,這導致了計算時間大于訪存時間。在神經(jīng)網(wǎng)絡的中間幾層,比如dwconv3 和dwconv4,由于其訪存時間大于計算時間,雖然在使用權值廣播和權值單播的模式時的計算效率降低,但是仍然是訪存時間大于計算時間,所以在3 種模式下性能一樣。在神經(jīng)網(wǎng)絡的后幾層,C方向通常比較大,比如dwconv5、dwconv6 和dwconv7。如果選擇使用權值廣播模式,運算效率只有1/16,只有一個PE 在做有效工作,所以在權值廣播模式下,這幾層的計算是整體性能的瓶頸??偠灾?實驗結果符合本文之前的理論分析。
不同平臺對比。本文將DCA 加速器的性能和通用CPU、單核SIMD 處理器進行對比。使用表1的深度卷積規(guī)模作為測試用例,測試結果如圖13 所示,其中橫軸表示不同的深度卷積的規(guī)模,縱軸表示DCA 加速器相對于其他平臺的加速比。從圖13 可以看出,DCA 加速器與通用CPU 處理器對比,平均加速了7.9 倍,最大可加速9.3 倍;DCA 加速器與單核SIMD 處理器對比,平均加速了8.3 倍,最大可加速29.3 倍。
圖13 DCA 加速器相對于SIMD、CPU 平臺的加速比
DCA 處理器比通用CPU 速度快的主要原因是DCA 加速器的軟件實現(xiàn)有數(shù)據(jù)預取操作,結合DCA加速器較大的算力,可以將計算時間完全隱藏在訪存時間里。從圖13 可以看出,在dwconv3 這個深度卷積規(guī)模下,DCA 加速器相對于CPU 的加速比比其他規(guī)模的加速比小,因為dwconv3的stride大小是2,即此時計算密度相對較小,這使得解決訪存量決定性能的DCA 加速器的優(yōu)勢降低。
DCA 加速器相對于SIMD 的加速比最高是在C方向值較小的深度卷積規(guī)模。因為固定向量運算器長度的單核SIMD 處理器在這種情況下計算效率比較低,從而導致計算成為瓶頸,比如對于dwconv1 的深度卷積規(guī)模,運算器長度為64 的單核SIMD 處理器的計算效率只有25%。而DCA 加速器在設計時考慮了包括較小C的各種深度卷積規(guī)模。DCA 加速器通過軟硬件協(xié)同優(yōu)化,能夠使得計算效率達到100%,從而獲得更好的整體性能。
許多加速器主要針對傳統(tǒng)卷積算法進行優(yōu)化,沒有針對深度卷積進行深入分析和探討。本文提出了一種軟硬件結合的方法優(yōu)化深度卷積,通過設計不同的權值數(shù)據(jù)傳輸模式,結合軟件模式選擇、數(shù)據(jù)拆分等優(yōu)化方式,有效解決深度卷積中不同規(guī)模下的計算性能問題。實驗結果表明,在實現(xiàn)MobileNet系列網(wǎng)絡中的深度卷積時,與運算器長度為64 的單核SIMD 處理器相比,本文所描述的工作最高提升性能可達29.3 倍。
未來將考慮對本文的DCA 加速器做進一步擴展,以支持更多類型的卷積。DCA 加速器的多PE、多種權值傳輸模式具有良好的擴展性,如果將每個PE 的向量MAC 運算器的結果分組累加或者全部累加,可以高效地計算權值規(guī)模相對較小的傳統(tǒng)卷積,比如神經(jīng)網(wǎng)絡前幾層的卷積。當權值很大時,可以將權值駐留在NBin 上,傳輸輸入,比如神經(jīng)網(wǎng)絡中后幾層的卷積規(guī)模。