国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向稀疏卷積神經網絡的CGRA 加速器研究①

2024-03-20 08:21:58嚴明玉吳欣欣李文明吳海彬范東睿
高技術通訊 2024年2期
關鍵詞:加速器能效權值

譚 龍 嚴明玉 吳欣欣 李文明 吳海彬 范東睿

(*中國科學院計算技術研究所處理器國家重點實驗室 北京 100190)

(**中國科學院大學 北京 100049)

稀疏卷積神經網絡(convolutional neural network,CNN)在可接受的精度損失范圍內可以減少稠密卷積神經網絡對硬件計算和存儲資源的需求,因此被應用在各種應用場景中,如自然語言處理領域[1]、圖像識別[2]和無人駕駛領域[3]。不幸的是,由于稀疏卷積神經網絡本身的稀疏性和不規(guī)則性,導致稀疏卷積神經網絡在通用處理器上執(zhí)行時面臨訪存效率低、硬件利用率低等問題,這些問題嚴重阻礙了其性能和能效提升。

目前大量工作針對CNN 提出了基于應用特定集成電路(application specific integrated circuits,ASICs)設計的定制化加速器[4-9],這些加速器根據CNN 特性定制化數據通路和計算單元來高效支持稀疏CNN 運行。然而由于這些加速器是高度定制化的,一旦電路制造完成就無法改變,缺乏可重配置性和可編程性,無法適用于演進的神經網絡模型。例如DianNao[4]、NeuroMAX[5]等加速器是針對稠密神經網絡設計,無法有效地加速稀疏神經網絡。Cambricon-X[6]和SparseTen[7]等加速器針對稀疏神經網絡定制化計算單元和數據通路,但是對稀疏處理局限于某一種稀疏性上,同時由于缺乏靈活性,僅對特定模型有效,無法讓更多網絡模型均取得性能和能效提升。

本文提出了一種針對稀疏CNN 設計的高能效且靈活的架構DyCNN。為了靈活地支持不同稀疏卷積神經網絡的執(zhí)行,DyCNN 從不同的稀疏CNN的運算中抽象算子并定義精簡指令,同時設計輕量級的計算單元來支持稀疏CNN 的操作。此外,DyCNN 利用粗粒度可重構架構(coarse-grained reconfigurable architecture,CGRA)[10]中的粗粒度數據流并行性可實現(xiàn)指令的高并行性,進一步提升稀疏CNN的執(zhí)行效率。

然而稀疏卷積神經網絡中不僅存在權值的稀疏性,同時存在激活函數產生的激活值稀疏性。權值稀疏性在訓練結束后確定下來,在前向推理過程中保持不變。但由于激活值是前向推理中動態(tài)產生的,其稀疏性具有動態(tài)性。因為同時存在以上2 種稀疏性,基于CGRA 為稀疏CNN 設計高效加速器主要面臨著以下2 個挑戰(zhàn):(1)2 種不同稀疏性帶來大量不同的冗余計算和訪存指令,導致處理單元之間不能高效共享一組片上指令,使得整體的性能和能效較低;(2)當稀疏CNN 被映射在處理單元上執(zhí)行時,稀疏性不規(guī)則分布導致處理單元之間負載分布不均衡,整體硬件利用率較低從而阻礙了整體性能的提升。

為解決上述2 個挑戰(zhàn),本文在DyCNN 設計中分別提出了以下2 個解決方法:(1)設計了基于數據感知的指令動態(tài)過濾機制來消除稀疏性帶來的影響;(2)提出了基于負載感知的動靜結合負載均衡策略來實現(xiàn)處理單元之間的負載均衡。

本文的主要貢獻如下。

(1)提出了一種基于CGRA 的高能效且靈活的稀疏卷積神經網絡加速結構DyCNN,它具有輕量級流水線以支持稀疏卷積操作,同時可利用數據流執(zhí)行模型來實現(xiàn)指令的高并行性。

(2)設計了基于數據感知的指令動態(tài)過濾機制,以消除每個處理單元中由于2 種稀疏性產生的不同無效指令,從而讓各處理單元之間可高效重用同一組片上指令,避免耗時的片外指令訪存。

(3)設計了基于負載感知的動靜結合負載均衡策略,實現(xiàn)了處理單元間的負載均衡,提高了整體硬件利用率,從而提升了整體的性能和能效。

(4)基于RTL 來評估DyCNN 面積和能耗,并使用詳細微架構模擬評估DyCNN 的性能和能耗。Dy-CNN 在運行稀疏CNN 時比運行密集CNN 實現(xiàn)了平均1.69 倍的性能提升以及3.04 倍的能效提升,比先進的GPU(cuSPARSE)和Cambricon-X 上的解決方案分別實現(xiàn)了2.78 倍、1.48 倍性能提升和35.62倍、1.17 倍能效提升。

1 相關工作

1.1 針對稠密CNN 的專用加速器

目前針對稠密CNN 提出的專用加速器已經得到了較好的發(fā)展。DianNao[4]利用硬件化的神經元和突觸實現(xiàn)對CNN 中乘加法的支持,利用較小的面積和能耗實現(xiàn)了針對CNN 的高吞吐量的專用處理器。NeuroMAX[5]提出了一種基于移位器實現(xiàn)的對數計算單元,并且設計了一個二維權值廣播數據流執(zhí)行模式來減少片外訪存和提高計算單元的硬件利用率,從而提升了整體性能和吞吐量。但是以NeuroMAX 為代表的稠密卷積神經網絡加速器無法高效地支持稀疏CNN 的執(zhí)行。與此不同,本文的目標是設計一個能靈活高效支持稀疏CNN 模型執(zhí)行的加速結構。

1.2 針對稀疏CNN 的專用加速器

由于稠密CNN 加速器的局限性,現(xiàn)在出現(xiàn)了很多為稀疏CNN 設計的專用加速器[4-9]。這些專用神經網絡加速器的目標是通過去除激活值或權值中的零值數據來提升稀疏卷積神經網絡的執(zhí)行性能和能效。為了實現(xiàn)稀疏加速,Kung 等人[8]提出的將稀疏的權值矩陣轉化成單個稠密列矩陣的方法,提高了稀疏CNN 在脈沖陣列結構上執(zhí)行的硬件利用率。以上工作雖然有一定的加速效果,但要么無法對卷積層實現(xiàn)加速,要么是只考慮了單一稀疏性,仍然存在優(yōu)化空間。而本文的目標是綜合考慮權值和激活值兩者的稀疏性,對稀疏CNN 實現(xiàn)全方位加速和能效提升。

目前也有綜合考慮2 種稀疏性的優(yōu)化研究工作,如Cambricon-X[6]利用權值稀疏性在其片上緩存中僅保留非零權值,但是沒有對激活值數據進行壓縮處理,因此可以減少零值權值對應的計算和訪存時間,但激活值的稀疏性仍然會帶來計算和訪存浪費。SparseTen[7]提出使用新穎的位掩碼來表示稀疏張量,基于此來實現(xiàn)內聯(lián)接計算稀疏向量-向量乘法,提升了稀疏卷積運算的效率。雖然這些加速器都實現(xiàn)了性能和能效提升,但是由于硬件結構缺乏可重配置和硬件靈活性,無法很好地適用新的神經網絡模型。與以上加速器對比,本文基于CGRA 架構提供了更高的硬件靈活性和更廣的適用范圍。針對不同模型特點,它可以隨著稀疏CNN 模型的演進和變化增加或刪減指令,重新配置硬件結構和映射方式來支持更多的稀疏CNN 模型。

1.3 基于CGRA 的神經網絡加速器

CGRA 近年來因為其兼具高可編程性和高性能而得到了廣泛的關注,目前已有工作基于CGRA 設計神經網絡相關的加速器。Ando 等人[11]基于CGRA 為稠密CNN 提出了一個時域多線程加速器。它可以通過多個計算階段來提高輸入數據的局部性和重用性,但是該加速器無法高效支持稀疏CNN 的運行。CQNN[12]基于CGRA 提出了一個針對量化神經網絡加速框架,可以靈活地配置硬件結構來支持各種精度的神經網絡執(zhí)行。但是它同樣無法支持稀疏化CNN 的執(zhí)行。與以上工作不同的是,本文目標是基于CGRA 設計高能效且靈活的稀疏卷積神經網絡加速器以支持演變迅速的稀疏網絡模型。

2 背景

本節(jié)首先介紹稀疏卷積神經網絡,以及稀疏卷積神經網絡中的2 種數據稀疏特性,之后介紹粗粒度可重構架構(CGRA)。

2.1 稀疏卷積神經網絡

目前主流的CNN 模型通常通過構建深層網絡結構來實現(xiàn)較高的準確率。CNN 模型中計算層主要包括卷積層(CONV)、池化層(POOL)和全連接層(FC)。其中卷積層執(zhí)行時間占據了整個網絡模型處理執(zhí)行時間的80%以上[13],因此卷積層無疑是整個CNN 模型的瓶頸所在。每個卷積層由高維卷積操作組成,它通過把過濾器(Filters)應用到輸入激活(input activation,IA)上,兩者進行卷積操作來提取輸入激活的局部特征。在卷積操作完成之后,會利用激活函數來引入非線性因素生成輸出激活(output activation,OA),比如整流線性單元(rectified linear unit,ReLU)[14]是常使用的激活函數。其中Filters 的值是使用訓練算法[15]對網絡進行訓練學習得到的權值(Weights)。

圖1 展示了一個完整的卷積計算的可視化過程,表1 中列出了卷積計算中的主要參數,通常一個CNN 模型中包含多個連續(xù)的卷積層,OA 在相鄰卷積層之間傳遞,上一個卷積層生成的OA 作為下一卷積層的IA 參與卷積運算,如此迭代下去,直到所有卷積層計算完成。

表1 卷積層的參數信息

圖1 CNN 模型計算流程

由于CNN 模型越來越復雜,參數越來越多,增加了對計算和存儲硬件資源的需求。因此有研究人員提出了許多壓縮CNN 模型參數的方法(例如剪枝[16]),這些方法對結果精度損失影響較小,同時可以大量減小模型參數大小,從而減少CNN 對計算和存儲的需求。然而,上述對模型參數壓縮的方法會導致網絡模型的權值參數包含了大量的零值,因此權值參數的稀疏性較高。在Han 等人[16]研究中,Alex-Net[17]、VGG16[18]等網絡模型通過剪枝后的權值稀疏度(零值的數據量占數據總量的比率)能高達90%以上[16]。這種稀疏性是伴隨模型參數訓練完成而產生的,在使用稀疏卷積神經網絡前向推理過程中,權值稀疏性不再發(fā)生改變,因此可視為一種靜態(tài)稀疏性。

在稀疏CNN 執(zhí)行過程中,由于通常包含了激活函數,比如ReLU 函數,它將輸出激活中小于0 的數置為0,從而在輸出激活中產生了稀疏性。由于0與任何數據進行乘法操作,結果為0,與另一值進行加法操作,結果與該值相等,因此0 被視為無效值,其參與的計算操作被視為無效計算,可以去除。但與權值稀疏性不同的是,激活值稀疏性是在計算過程中激活函數確定的,無法在前向推理執(zhí)行前提前得知;同時由于隨著上一卷積層生成的OA 作為下一卷積層IA 計算并不斷迭代,所以該稀疏性在執(zhí)行中是傳遞性的,因此可視為一種動態(tài)稀疏性。

2.2 粗粒度數據流架構

CGRA 從20 世紀90 年代開始迅速發(fā)展[19]。這種架構是基于20 世紀60 年代提出的可重構計算概念的自然粗粒度實現(xiàn)[20]。它不僅像ASIC 一樣具有高能效和高性能,而且還具有出色的可編程性[21]。

CGRA 與數據流體系結構[22]關系密切,它們通常與數據流機制集成在一起,因此CGRA 的操作可以由數據流驅動。CGRA 內部通常由一個二維處理單元(processing element,PE)陣列組成,CGRA 的配置信息定義了這些PE 的功能和它們之間的互連關系。CGRA 可以通過互連網絡利用PE 之間的高效數據流執(zhí)行方式,這是傳統(tǒng)處理器結構不支持的方式。通過有效的數據流和控制流的結合,CGRA 可以避免PE 之間的過度順序化執(zhí)行,利用粗粒度并行性提升執(zhí)行效率。同時CGRA 可以進一步支持PE 之間的顯式數據通信,從而減少PE 之間數據移動的能耗。因此這種具有數據流和控制流結合的混合模式是CGRA 同時具有高性能和高能效的重要原因?;谝陨戏治?本文利用CGRA 去優(yōu)化稀疏卷積神經網絡執(zhí)行,可以在不犧牲可編程性的情況下實現(xiàn)DyCNN 的高性能和高能效。

為了充分提高指令的并行性,DyCNN 在PE 陣列層級采用經典的數據流并行執(zhí)行模型[23]。如圖2(a)所示,在該執(zhí)行模型中,CNN 應用被編譯劃分成多部分指令塊(如C1~C9 等)。每個指令塊中包含一系列硬件指令。所有的指令塊根據依賴關系將應用程序表示為數據流圖,然后將其映射到圖2(b)所示的二維PE 陣列中執(zhí)行。與PE 間的執(zhí)行模型不同,在每個PE 內部,指令塊采用順序流方式執(zhí)行。

圖2 指令在PE 上映射方式和稀疏導致PE 的指令重用差異

3 稀疏卷積神經網絡面臨的挑戰(zhàn)

本節(jié)通過分析稀疏卷積神經網絡在CGRA 上執(zhí)行的挑戰(zhàn)和先前工作的不足來闡述本文工作的設計理念和設計要素。

3.1 兩種稀疏性并存導致大量無效指令

由2.1 節(jié)可知,在稀疏卷積神經網絡中存在著權值和激活值2 種稀疏性,在稀疏卷積神經網絡前向推理過程中,會生成大量權值和激活值中零值相對應的指令。由于在矩陣乘法運算中,零值參與的計算對結果不會產生任何影響,因此這些數據對應的計算被視為無效計算。這些無效計算對應的指令訪存、數據訪存和指令執(zhí)行的時間和能耗會導致稀疏卷積神經網絡在CGRA 上執(zhí)行性能和能效大幅降低。

如圖2(c)所示,PE1、PE3 分別運行2 個通道3×3 的Filter 和3 ×3 的IA 的卷積運算(黑粗線框標示出來的部分)。若為稠密網絡,運行一個通道卷積運算的一組指令模板共包含如圖2(d)所示9 組指令,其中主要包含了讀取數據和乘加運算。其中圖2(c)中矩陣中標灰的代表有效數值,白色的代表無效值,無效值所對應的圖2(d)中指令組是無效指令,這些無效指令的執(zhí)行會占據大量的時間,嚴重阻礙了整體性能和能效的提升。

目前已有工作通過排除固定的權值稀疏性來提升性能,但仍然面臨著存在激活值稀疏性的問題[6,24]。如果在CGRA 上只是通過預先感知權值的固定稀疏性,雖然一定程度上能去除各PE 中部分無效指令的執(zhí)行,但是由于稀疏數據的分布不規(guī)則,各PE 之間執(zhí)行的指令差異較大,使得片上PE 無法重用相同的指令,每個PE 都需要從片外訪存自身的指令,從而增加耗時較長的片外指令訪存。如圖2(c)所示,由于PE 所執(zhí)行的稀疏數據分布不一致,圖2(d)中對應有效執(zhí)行的指令(黑粗線框標出)也差異很大,如對于PE1,第2、5、7、8 組指令為其有效數據對應的真正有效的指令,而對PE9,第1、2、5、6、9 組指令才是真正有效的指令。若采用此方法,會導致各PE 之間無法共用同一組相同指令模版(只需要根據配置修改數據訪存地址),需要單獨地去片外訪存自身有效數據對應的有效指令。這種高延遲的指令訪存導致PE 計算部件處于空閑等待狀態(tài),降低了整體硬件的利用率,從而降低了整體執(zhí)行性能并增加了能耗。

為了支撐這一點,本文構建了一個典型的CGRA 加速器模型,并使用工作[6]中的稀疏去除方法分別運行AlexNet 和VGG16 對應的稠密網絡和稀疏網絡,收集其指令執(zhí)行和指令訪存時間。圖3 所為AlexNet(第CONV2 層到第CONV5 層)和VGG16(第CONV3_1 層到第CONV5_3 層)對應稠密(De)和稀疏(Sp)卷積網絡中指令的訪存時間和執(zhí)行時間分解。從圖3 中可以看到,稠密卷積操作中指令的訪存時間僅占總時間的1%~2%,絕大部分的時間被指令執(zhí)行時間所占據,這意味著在片上指令的重用性很高,耗時指令的片外訪存較少,整體硬件利用率較高。與此不同的是,在執(zhí)行稀疏卷積操作時,可以看到指令訪存時間占總時間比例比較大,最高在VGG16 的CONV5_1 層能達到60%。雖然稀疏卷積操作中指令的執(zhí)行時間較稠密卷積操作有所減少,但是因為耗時較長的片外指令訪存和未去除的激活值稀疏性,導致總體的執(zhí)行時間要比稠密卷積操作甚至更長。從圖3 中還可以看出輸出激活值的稀疏度也較高,比如AlexNet 的CONV5 層能達到90%,因此如何有效去除稀疏卷積神經網絡中2種并存的稀疏性帶來的影響對于提升執(zhí)行效率和能效是一個迫在眉睫的問題。

圖3 AlexNet 和VGG16 運行時間分解(左坐標軸表示稠密(De)和稀疏(Sp)網絡指令執(zhí)行時間分解,并且將Sp 的執(zhí)行時間歸一化到De;右坐標軸表示輸出激活值稀疏度;最后一組柱線展示各層De 和Sp 的幾何平均值(GM))

在粗粒度可重構架構中,每個PE 內可配置獨立的取指和控制單元,因此本文提出了數據動態(tài)感知的指令過濾機制來使得每個PE 在指令執(zhí)行時過濾掉無效值相關的冗余指令,從而避免冗余指令和數據訪存操作,同時使得每個PE 之間仍然能像稠密網絡一樣高效共享同樣的片上指令,減少耗時的指令片外訪存,從而去除稀疏性帶來的影響。

3.2 稀疏性導致處理單元之間負載不均衡

由于稀疏卷積神經網絡在前向推理過程中存在著權值和激活數據兩方面的稀疏性,并且稀疏性分布十分不規(guī)則,因此將負載分配給CGRA 中不同PE執(zhí)行后,會導致不同PE 之間的負載分布不均衡。具體表現(xiàn)為有些PE 處于忙碌,而有些PE 處于閑置等待狀態(tài),從而導致整體硬件資源利用率較低,性能較差,能耗較高。

根據3.1 節(jié)中實驗統(tǒng)計執(zhí)行CONV5_1 層處理單元的計算部件利用率,從圖4 中可以看到不同PE之間的計算部件利用率(實際性能和理論峰值性能的比值)相差很大,其中有些PE 計算部件利用率能夠達到接近60%,但是有些PE 計算部件的利用率僅有20%。這種相差較大的計算部件利用率會導致PE 之間互相等待,運行慢的PE 拖慢了整體的執(zhí)行速度,延長了整體的執(zhí)行時間,從而降低了整體的硬件資源利用率,嚴重阻礙了整體性能的提升。在負載不均衡的情況下,稀疏CNN 的執(zhí)行效率低下,整體性能難以提升。為了充分利用稀疏網絡的計算和存儲優(yōu)勢,稀疏卷積神經網絡的負載不均衡問題亟待解決。

圖4 同一行和同一列PE 中的計算部件利用率

在初始化階段進行負載劃分時,可以先通過感知靜態(tài)的權值稀疏性和輸入激活的動態(tài)稀疏性,采用加權輪詢方式進行均衡分配。在執(zhí)行過程當中,新的輸出激活值不斷生成,結合3.1 節(jié)中提到的數據動態(tài)感知方式可以實現(xiàn)相鄰PE 之間動態(tài)負載竊取和調度,從而進一步實現(xiàn)負載均衡,提升整體硬件的利用率。

4 DyCNN 加速結構

本節(jié)介紹本文基于CGRA 提出的架構DyCNN,首先介紹整體結構和執(zhí)行方式;然后介紹為了消除由于權值和激活值的稀疏性影響設計的數據動態(tài)感知的稀疏去除機制和多階段之間的流水化執(zhí)行機制;最后闡述為了提高硬件利用率設計的動靜結合的負載均衡策略。

4.1 DyCNN 整體結構介紹

本文提出的架構如圖5(a)所示,它主要由處理單元(PE)、控制器、權值和激活值靜態(tài)隨機存取存儲器(static random access memory,SRAM)以及片上網絡組成。平鋪的PE 之間通過片上網絡互連。控制器包含了狀態(tài)寄存器和負載調度器,負責整體PE陣列的狀態(tài)收集和負載控制。權值和輸入輸出激活值存儲在相應的片上SRAM 中。如圖5(b)所示,每個PE 也由一個控制單元、指令和操作數緩存、路由器以及一個消除數據相關的輕量級計算單元組成。每個PE 中都包含翻譯器、指令選擇器,它們是實現(xiàn)數據動態(tài)感知機制的主要單元。圖5(c)展示了Dy-CNN 為支持稀疏CNN 操作而定義的指令格式,其中具有保留位,可以根據新的CNN 模型輕松進行擴展,從而能支持演變迅速的CNN 模型。

圖5 DyCNN 的結構圖概覽

同時為了提高數據在片上的重用性,DyCNN 采用了行列共享的負載劃分和映射執(zhí)行模型(row-column sharing scheme,RCS)。如圖6 所示,本文將IA按行劃分成的行分區(qū),保證每個行分區(qū)的非0 值基本相同,并且將不同的行分區(qū)映射給不同的PE 行執(zhí)行,這樣位于同一行的PE 可以共享相同的IA 行分區(qū)。與此同時將并列不同通道的Filter 映射給不同列的PE 執(zhí)行,從而使得位于同一列的PE 共享相同的Filter。通過以上的映射執(zhí)行方式,可以有效地提高片上PE 之間對IA 和Filter 的共享和重用性,減少耗時的片外訪存。

圖6 數據映射執(zhí)行模型

4.2 數據動態(tài)感知機制

由于激活值稀疏性是在計算過程中動態(tài)生成和在不同卷積層之間傳遞的,因此為了有效地感知激活值稀疏性,本文提出了基于位圖(bitmap)的數據動態(tài)感知機制。該機制主要思想是通過將權值和激活值在計算過程中動態(tài)地轉換成bitmap,然后通過感知對應的bitmap 的值來判斷數據是有效還是無效,進而通過數據的無效性和有效性來判斷指令的有效性。在bitmap 中,使用1 bit 來表示數據的有效性,其中0 表示數據無效,1 表示數據有效,可以對數據實現(xiàn)高效的壓縮存儲,減少了感知稀疏性的成本和額外開銷。

如圖7 所示,數據翻譯器的功能是動態(tài)地實現(xiàn)激活數據感知,它從存儲輸出激活值的緩存中讀出輸出激活值,然后將輸出激活值中的每個數值執(zhí)行按位或(OR)操作,生成1 bit 的數值結果來代表該數值的有效性。如果該數值的所有數值位bit 不全為0 時,通過OR 操作則會生成1 bit 為1 的數值,代表該數值為有效數值,會參與有效計算。如果輸出緩存所有數值位的全為0,則會生成1 bit 為0 的數值,代表該數值為無效數值,該數值參與的矩陣運算是無效計算。生成的輸出激活值對應的bitmap 會被存儲在bitmap 緩存中。權值數據同樣可以利用數據翻譯單元來將其轉換成bitmap 存儲在緩存中。不同的是,因為權值數據在前向推理過程中是靜態(tài)的,在稀疏卷積神經網絡前向推理過程中,只需要在初始化時執(zhí)行一次數值和bitmap 轉換即可,不需要重復轉換;而輸出激活數據在多層卷積的模型下是動態(tài)生成的,因此在每層生成一次新的輸出激活數據時,需要使用數據翻譯單元將輸出激活數據轉換成新的bitmap 存儲在緩存中,以供后續(xù)指令選擇單元使用。

圖7 數據動態(tài)感知和指令動態(tài)過濾機制

4.3 基于數據感知的指令動態(tài)過濾機制

為了通過感知數據的稀疏性,去除每個PE 上冗余無效指令,使得每個PE 能夠共享同一組指令并避免冗余指令的片外訪存,本文設計了指令選擇器來對無效數據對應的計算和訪存指令進行篩選。首先通過數據翻譯單元動態(tài)地將權值數據和輸出激活數據轉換成bitmap 存儲,接下來需要利用權值數據和輸出激活數據的bitmap 對指令進行相應的篩選。

圖7 展示了指令選擇單元對PE 中指令的篩選過程,主要包含2 個階段。第1 階段:首先指令選擇單元將IA 的bitmap 和Filters 的bitmap 從相應緩存地址中讀出;然后將IA 和Filters 參與計算的對應數據的作按位與(AND)運算,從而得出數據位對應的指令標記,并將指令標記存儲在指令標記緩存中。如果對應的指令標記為0,則代表對應的指令為無效指令,這部分指令是過濾目標。

第2 階段:在得到指令標記信息之后,指令選擇單元從指令標記緩存中取出相應的標記,根據相應的標記信息去指令緩存中取出對應有效的指令,并且將對應有效的指令送進流水化計算單元中進行執(zhí)行。指令控制單元不斷從指令標記緩存中讀取指令標記,并對指令標記信息逐條篩選,將每條指令標記為1 的指令篩選出來送進計算單元執(zhí)行;而指令標記為0 的指令則不執(zhí)行;直到所有的指令標記信息檢測結束。

4.4 指令執(zhí)行和選擇階段流水化

第4.2 和4.3 節(jié)展示了本文設計的數據動態(tài)感知和指令選擇單元主要結構和執(zhí)行流程??梢钥闯霰疚脑诿總€PE 內部指令的執(zhí)行主要劃分為以下3個執(zhí)行階段:(1)數據翻譯階段:負責將權值數據和激活數據動態(tài)轉化成存儲需求較小的bitmap 格式,從而壓縮數據存儲,并且用于之后的指令選擇階段實現(xiàn)去除稀疏性帶來的冗余指令;(2)指令選擇階段:首先利用數據翻譯階段生成的數據bitmap 來感知數據的有效性,利用數據的有效性生成指令標記信息,并且利用指令標記信息選擇出有效的指令;(3)計算階段:將指令選擇階段篩選出來的有效指令和數據讀取出來并送入計算單元執(zhí)行真正的有效計算。

如圖8 所示,為了提升每個PE 內以上3 個執(zhí)行階段的執(zhí)行效率,本文的設計將這3 個執(zhí)行階段流水化執(zhí)行。因為片上存儲以雙緩沖的形式組織,可以一部分用于存儲正在計算的數據,一部分用于存儲下一階段需要執(zhí)行的數據,因此可以有效避免不同階段流水化執(zhí)行的阻塞問題。在一個PE 內部,當一部分數據進入數據翻譯階段之后,隨著bitmap數據的慢慢生成,這部分數據可以直接進入指令選擇和計算階段,以很好地將數據翻譯、指令選擇和計算階段的時間重疊起來,從而掩蓋掉數據翻譯和指令選擇的時間開銷,最大程度地減少稀疏去除機制帶來的性能損失。

圖8 各階段流水化執(zhí)行策略

4.5 基于負載感知的動靜結合均衡策略

權值和激活數據的稀疏不規(guī)則性,導致分配給每個PE 的權值和激活值有效數據數量不均衡,每個PE 之間出現(xiàn)負載不均衡現(xiàn)象。為了充分提高DyCNN 中整體計算部件的利用率,本文提出了基于負載感知的動靜結合的負載均衡策略。前人工作[24]提出基于權值中有效值數量來進行負載的劃分和映射,它將PE 陣列按列進行分組,并使得同一組的PE共享同一組權值;對于不同的組之間基于權值中非零權值個數去進行劃分,使得不同組之間劃分得到的權值中非零值數量盡量均衡。這種負載均衡策略只考慮了權值靜態(tài)稀疏性的影響,沒有解決激活值動態(tài)稀疏性帶來的影響。因為激活數據的稀疏性是在計算過程中動態(tài)變化的,DyCNN 不能簡單采用初始化負載映射算法來保證負載均衡,所以本文為DyCNN 提出感知數據的靜態(tài)和動態(tài)相結合的負載均衡策略。

根據4.1 節(jié)中的描述,為了增加片上指令和數據的重用性,減少片外的訪存,DyCNN 采用了如圖6所示的負載映射和執(zhí)行方式。這種映射執(zhí)行方式進一步增加了IA 和Filters 的片上重用性。但是每層的IA 和Filters 都存在稀疏性,IA 和Filters 兩者都是影響不同PE 之間負載均衡的因素,因此在進行負載初始劃分時,DyCNN 需要綜合考慮IA 和Filters中的有效值數量來實現(xiàn)負載的均衡分配。

首先介紹靜態(tài)負載均衡策略。由于水平方向上的PE 復用相同的IA,所有對應IA 的有效工作負載一致;同理垂直方向上的PE 復用相同的Filters,所以它們之間的有效工作負載基本一致?;诖?在進行負載劃分時,先利用4.2 節(jié)的稀疏感知機制,對有效工作負載進行統(tǒng)計,對于每個PE 列,它們被映射新的Filters 時采用加權輪詢算法按非零權值的數量排序依次分配給具有不同權重的PE 列。含有較少負載的PE 列權重則高,優(yōu)先被分配有效值多的Filters;含有較多負載的PE 列權重則低,會被分配有效值少的Filters。如圖9 所示,假設一共有6 個具有不同非零權值數量的Filters(如F1 的權值數量是20)分配給3 列PE 執(zhí)行,采用先將F1~F6 按非零權值數量進行排序,然后按大小輪流分配給各列PE。DyCNN 將IA 按行進行分區(qū)劃分,然后分配給每個PE 行,同時保證每個行分區(qū)的非零值數量基本相等。

圖9 基于加權輪詢的靜態(tài)負載均衡策略

其次介紹動態(tài)負載均衡策略。為了在運行時解決由于動態(tài)變化的輸入激活稀疏性導致的負載不均衡問題,DyCNN 在靜態(tài)負載均衡策略基礎上進一步設計了一個動態(tài)均衡策略(dynamic balancing scheme,DBS)。它主要由2 個因素驅動:(1)不同PE 行之間是共享輸入激活的,且輸入激活是動態(tài)生成的;(2)通過使用RCS 負載映射方式,DyCNN 可以避免PE 訪問彼此不同輸入激活之間的同步操作。

對于動態(tài)均衡策略的第1 個設計是如何有效表示工作負載的,如第4.1 節(jié)所述,DyCNN 的工作負載由輸入激活的連續(xù)行分區(qū)表示。因此DyCNN 選擇在輸入激活矩陣的行分區(qū)中使用開始索引IS和結束索引IE來表示負載范圍,這2 個變量存儲在片上緩存中。

第2 個設計是工作負載竊取方案。前人工作通常在工作隊列中加入同步原語,或者為閑置單元中斷忙碌單元。這些方法都會帶來巨大的開銷。相反,本文利用DyCNN 中控制器的狀態(tài)寄存器來減少開銷。DyCNN 中的處理單元只需訪問狀態(tài)寄存器中各處理單元IS和IE的值即可實現(xiàn)在不中斷被竊取單元當前的工作情況下完成負載竊取。

算法1 展示了本文的DBS 具體實現(xiàn)。最初每個處理單元Pi都分配有具有相同數量的非零值的行分區(qū),由索引IS和IE定義負載區(qū)間。每個線程使用一個同步變量鎖來保證負載竊取的原子性。每個處理單元對卷積運算的處理從IS開始,當IS=IE時,處理單元已完成其初始工作量并進入空閑狀態(tài),然后請求選擇一個相鄰忙碌的處理單元Pv進行負載的竊取。在DyCNN 中選擇讓閑置處理單元竊取忙碌處理單元一半的工作量,因為它已在前人工作中證明效果較好[25]。

5 實驗與結果

本節(jié)將展示DyCNN 執(zhí)行稀疏化之后的AlexNet和VGG16 的卷積層相比稀疏化之前的加速效果,并將優(yōu)化效果與先進的通用架構圖形處理器(graphics processing unit,GPU)和稀疏卷積神經網絡加速器Cambiricon-X 上的方案比較從性能、能效兩方面提供詳細的結果對比和分析。

5.1 實驗平臺配置和對比基準

為了評估DyCNN 的有效性,本文用Verilog 實現(xiàn)了DyCNN 的結構,并使用Synopsys 公司的編譯器和臺積電12 nm GP 標準VT 庫工藝進行綜合來準確評估DyCNN 的功率和面積。為了對DyCNN 進行準確的性能評估,本文基于中國科學院計算技術研究所自主研發(fā)的大規(guī)模并行模擬框架SimICT[26]實現(xiàn)時鐘精確型的模擬器并使用Ramulator[27]來集成存儲子系統(tǒng)。整個加速器的面積為14.22 mm2,單個PE 面積為0.16 mm2。片上SRAM 的面積、功耗和訪問延遲使用Cacti 6.5[28]估算。

表2 展示了用于評估的系統(tǒng)配置信息。本文首先從性能和能效方面對在DyCNN 運行稀疏CNN 與運行密集CNN 進行對比,評估并驗證DyCNN 中針對稀疏優(yōu)化方法的有效性。除此之外,本文還將DyCNN 與NVIDIA Titan XP GPU(基于cuSPARSE[29]實現(xiàn))和Cambricon-X 進行性能和能效的對比。最后,本文使用計算部件利用率和指令減少數量來分析DyCNN 針對稀疏CNN 提出的優(yōu)化策略效率。

表2 參與評估結構的配置信息

為了全面地驗證DyCNN 的效果,本文選取了應用廣泛的AlexNet 和VGG16 卷積神經網絡模型中幾個典型的卷積層來評估DyCNN 的性能和能效。表3 展示了以上2 種CNN 模型中各卷積層的參數,其中Weight 的稀疏度表示AlexNet 和VGG16 的稠密網絡稀疏化成對應稀疏網絡后每層的Weight 稀疏百分比。

表3 CNN 模型的參數信息

5.2 結果分析

(1)性能

在圖10 中,本文首先比較了DyCNN 執(zhí)行稀疏CNN(DyCNN-Sp)歸一化為DyCNN 執(zhí)行稠密CNN(DyCNN-De)的性能加速比。所有卷積層性能加速比的幾何平均值(geometric mean,GM)在最后一組柱線中標記為GM??傮w來看,DyCNN 在執(zhí)行稀疏CNN 相比執(zhí)行稠密CNN 實現(xiàn)了1.69 倍的加速。一方面,DyCNN 執(zhí)行稀疏CNN 的性能提升主要來源于DyCNN 通過數據感知的指令動態(tài)過濾方式去除了2 種稀疏性帶來的無效指令和數據的計算和訪存,使得各PE 之間可以高效共享同一組指令,提升了片上指令和數據的重用效率,從而提升了整體性能。除此之外,稀疏CNN 相比稠密CNN 具有占用內存小的特征,從而可以在片上存儲更多的指令和數據,進一步減少了高延遲的片外訪存。另一方面,通過使用基于數據感知的靜態(tài)和動態(tài)負載調度策略相結合的方法,DyCNN在執(zhí)行稀疏卷積神經網絡時具有更高的硬件利用率來提升整體性能。然后詳細分析具體卷積層之間的性能提升情況。通過圖10 可以發(fā)現(xiàn),DyCNN 在AlexNet 的CONV2 層性能提升最多為2.60 倍,表明加速器對大的Filter 的卷積層加速效果更明顯。同時,由于VGG16 的CONV1_2 層激活稀疏度較低,與其他卷積層相比,加速效果只有1.28 倍。

圖10 DyCNN 運行稀疏與運行稠密網絡、GPU 和Cambricon-X 的性能加速比

為了進一步展示DyCNN 的性能優(yōu)勢,圖10 展示了使用DyCNN 與GPU、Cambircon-X 分別運行AlexNet 和VGG16 稀疏CNN 的加速比。從圖10 可以看到,DyCNN 的性能是GPU 性能2.78 倍,DyCNN性能相對于Cambricon-X 的加速比是1.48 倍。整體來說,DyCNN 可以通過高指令并行度來支持稀疏卷積神經網絡的執(zhí)行,更重要的是,DyCNN 可以通過數據感知的數據翻譯和指令選擇單元過濾掉各PE 內無效指令,使得所有PE 可以高效共享相同的片上指令,進一步避免了2 種稀疏性帶來的耗時指令片外存儲器訪問。此外,通過使用動靜結合的負載調度策略,提升了DyCNN 的硬件利用率,進一步去除了稀疏數據不規(guī)則分布帶來的性能影響,提升了稀疏卷積神經網絡的執(zhí)行性能。

(2)能效

圖11(a)展示了DyCNN 在執(zhí)行稀疏卷積神經網絡與執(zhí)行稠密卷積神經網絡時的能效比。整體上可以看到稀疏卷積神經網絡的能效平均提升了3.04倍。通過能耗分解,結果表明其中計算、數據緩存、片上數據傳輸消耗的能量分別減少了88.12%、76.80%、53.27%。

圖11 能效比

圖11(b)展示了DyCNN、Cambricon-X 分別和GPU 在運行稀疏CNN 時的能效比。從圖中可以看到,與GPU 相比,DyCNN 的能效提高了約35.62 倍,Cambricon-X 的能效僅提高了30.44 倍。該實驗結果充分展現(xiàn)了DyCNN 執(zhí)行稀疏卷積神經網絡的高能效。DyCNN 的能效收益主要來源于:(1)由于通過數據感知和指令動態(tài)過濾機制增加了高效的片上指令和數據重用,能耗較高的片外存儲器訪問次數更少;(2)通過輕量級的流水線化執(zhí)行和計算單元之間負載均衡實現(xiàn)了更高的硬件利用率和整體能效。

(3)計算部件利用率

為了驗證本文提出的負載均衡策略的有效性,圖12展示了VGG16 的CONV1_2 層同一行和同一列方向執(zhí)行時的PE 的計算部件利用率。從圖12中可以看到,即使PE 陣列在垂直方向上復用相同的Filters 和水平方向復用相同的IA,在實現(xiàn)負載均衡之前,每列PE 計算部件利用率仍然差異較大,可見Filters 和IA 的稀疏性對整體硬件利用率影響很大。

圖12 DyCNN 運行在VGG16 CONV1_2 層的計算部件利用率

與之不同,從圖12 中可看出,使用本文提出的負載均衡策略可以有效實現(xiàn)PE 之間負載均衡,使得各PE 的計算部件利用率基本保持一致,各運算單元的計算部件利用率穩(wěn)定在45%~50%之間。由此通過使用本文提出的動靜結合的負載均衡策略,可以保證DyCNN 中PE 陣列的負載均衡,提高計算部件的利用率,提升整體性能和能效。

(4)指令執(zhí)行次數減少比例

為了驗證本文稀疏去除機制的有效性,本文將密集卷積層和稀疏卷積層的指令執(zhí)行次數進行了詳細比較。

從圖13 中可以看到,由于2 種稀疏性并存,PE中存在著大量的冗余無效指令,通過數據翻譯和指令選擇單元互相配合,PE 陣列執(zhí)行時跳過了0 值相關無效指令,使得稀疏網絡的總指令執(zhí)行次數比密集網絡平均減少了69.21%。而稀疏數據相對較少的卷積層指令減少的次數較少,以VGG16 的CONV2_2 層為例,因為CONV2_2 層中無效的激活數據只有19.00%,即存在的0 值數據相對較少,對應的無效指令也較少,所以減少的指令執(zhí)行次數也相對較少。綜上所述,本文提出的基于數據感知的指令動態(tài)過濾方式可以有效減少指令執(zhí)行次數,去除稀疏性帶來的影響,從而提升DyCNN 的性能和能效。

圖13 DyCNN 運行稠密和稀疏網絡的指令執(zhí)行次數減少比例(左邊的坐標軸(柱)表示各類指令在總減少指令中所占比例;右邊的坐標軸(曲線)表示總指令減少比例)

6 結論

本文針對稀疏卷積神經網絡提出了一個高效靈活的硬件加速結構DyCNN。DyCNN 基于CGRA 設計,可以充分利用其高指令并行性來支持CNN 的操作。此外,針對稀疏卷積神經網絡中激活值和權值的2 種稀疏性并存的挑戰(zhàn),DyCNN 設計了基于數據感知的指令動態(tài)過濾機制濾除了卷積運算中大量的無效計算和訪存指令的執(zhí)行,避免了不必要的片外指令和數據訪存,減少了無效指令的執(zhí)行次數,增加了各計算單元指令的片上重用效率。同時DyCNN提出了基于負載感知的動靜結合負載均衡策略保證了PE 之間的負載均衡。實驗表明,本文提出的加速結構DyCNN 在性能和能耗方面具有優(yōu)勢,能夠為規(guī)模越來越大、演進迅速的稀疏卷積神經網絡加速提供有效的解決方案。

猜你喜歡
加速器能效權值
輪滑加速器
化學工業(yè)的“加速器”
高中數理化(2024年8期)2024-04-24 16:58:14
一種融合時間權值和用戶行為序列的電影推薦模型
全民小康路上的“加速器”
少先隊活動(2021年6期)2021-07-22 08:44:24
CONTENTS
CONTENTS
上海:穩(wěn)中有進 能效趨優(yōu)
關注能效
基于權值動量的RBM加速學習算法研究
自動化學報(2017年7期)2017-04-18 13:41:02
等待“加速器”
临夏县| 兴宁市| 新竹县| 东平县| 许昌县| 海林市| 雅安市| 射阳县| 西宁市| 周口市| 酒泉市| 四川省| 澎湖县| 定襄县| 前郭尔| 托克托县| 潮安县| 德保县| 湖南省| 冷水江市| 兴文县| 汕头市| 祁门县| 普兰店市| 阜城县| 石楼县| 平泉县| 锡林郭勒盟| 通河县| 涞水县| 广东省| 囊谦县| 宜章县| 平顺县| 胶南市| 宝山区| 东方市| 宣武区| 涿州市| 台东县| 楚雄市|