寒武紀(jì)是國內(nèi)最早一批研究AI芯片公司,其AI芯片NPU (Neural network Processing Unit)的設(shè)計源于其早期一系列的AI芯片架構(gòu)研究,主要包括DianNao、DaDianNao、PuDianNao、ShiDianNao、Cambricon-X等一系列研究成果。
DianNao
DianNao是AI芯片設(shè)計中開創(chuàng)性研究,是為了實現(xiàn)處理大規(guī)模深度學(xué)習(xí)網(wǎng)絡(luò)運算而設(shè)計的專用芯片。如圖所示,芯片采用彼此分離的模塊化設(shè)計,主要包含控制模塊(Control Processor, CP)、計算模塊(Neural Functional Unit, NFU)和片上存儲模塊三部分。其中,片上存儲模塊又分為用于存儲輸入數(shù)據(jù)的NBin、用于存儲輸出數(shù)據(jù)的NBout以及用于存儲神經(jīng)網(wǎng)絡(luò)模型權(quán)重參數(shù)的SB,這三塊存儲均為片上存儲,以實現(xiàn)低延時和低功耗。
目前深度學(xué)習(xí)網(wǎng)絡(luò)參數(shù)量都非常的大,片上緩存區(qū)容量大小一般都遠(yuǎn)小于參數(shù)量,無法將整個網(wǎng)絡(luò)的參數(shù)全部放入片上存儲。所以DianNao架構(gòu)設(shè)計采用了分時復(fù)用方法,每次只加載和執(zhí)行網(wǎng)絡(luò)一部分,模型參數(shù)會分批次的加載到SB中,每個網(wǎng)絡(luò)層的輸入數(shù)據(jù)也會分批次的加載到NBin中,每層計算結(jié)果則寫入到NBout中。NFU (Neural Functional Unit)是由三級流水線組成計算單元,主要負(fù)責(zé)完成神經(jīng)網(wǎng)絡(luò)的核心計算邏輯,比如乘法操作、加法操作和非線性函數(shù)變換等。
Diannao布局(65nm)
拆分成不同的模塊的設(shè)計可以在功耗和性能上找到更佳的設(shè)計平衡點,其中,輸入存儲(NBin),權(quán)值存儲(SB),輸出存儲(NBout)各自單獨實現(xiàn),一方面可以根據(jù)不同數(shù)據(jù)訪問特性設(shè)置不同傳輸帶寬,另一方面還可以實現(xiàn)類似Cache的功能,即處理器在對當(dāng)前一組數(shù)據(jù)進(jìn)行計算的同時,可以通過DMA啟動下一組數(shù)據(jù)或參數(shù)的加載。如圖所示,每個存儲單元配備有一個DMA和一個指令緩存FIFO,通過將計算過程和數(shù)據(jù)傳輸過程解耦實現(xiàn)數(shù)據(jù)高效預(yù)取,只要前一條指令使用完了數(shù)據(jù),后一條指令就可以開始數(shù)據(jù)傳輸,而不需要等待前一條指令的計算完成。
計算單元NFU包括三個階段并以流水線形式執(zhí)行,是神經(jīng)網(wǎng)絡(luò)的核心計算模塊。NFU-1是一個16x16的并行乘法單元,即一個周期可以同時執(zhí)行256個乘法操作,NFU-2包含16個加法樹,每個加法數(shù)包含15個加法器,加法器按照8-4-2-1的結(jié)構(gòu)排列,NFU-3包含16個激活函數(shù)單元。從整體看,NFU的所有資源被劃分成16份,NFU-1中每一份包含16個乘法器,同時執(zhí)行得到16個乘法結(jié)果,然后送入NFU-2中加法樹,每個加法樹中先由8個加法器對16個數(shù)執(zhí)行加法操作得到8個結(jié)果,再依此由4-2-1個加法器對前面的結(jié)果進(jìn)行加法操作,最終得到一個累加的結(jié)果之后再送入NFU-3的激活單元進(jìn)行計算。
Diannao架構(gòu)
DaDianNao
DaDianNao針對主流神經(jīng)網(wǎng)絡(luò)模型提出了一種可以承載較大尺寸模型的芯片架構(gòu),主要針對服務(wù)器端的AI高性能訓(xùn)練和推理計算任務(wù)。DianNao架構(gòu)雖然在性能和功耗上相比CPU取得了比較明顯的改善,但其也存在一些問題和限制。DianNao主要通過三個片上buffer (NBin, SB, NBout)進(jìn)行數(shù)據(jù)進(jìn)行分塊處理,將不同類型的數(shù)據(jù)塊存放在不同的片上存儲中,其可以根據(jù)不同類型數(shù)據(jù)特性和復(fù)用進(jìn)行針對性優(yōu)化,使芯片與主存之間的數(shù)據(jù)搬運次數(shù)和效率達(dá)到最優(yōu),進(jìn)而實現(xiàn)提高芯片整體性能和降低功耗的目的。DaDianNao則是為了處理大規(guī)模神經(jīng)網(wǎng)絡(luò)模型而設(shè)計的AI芯片架構(gòu),其采用了基于tile和node的多芯片組設(shè)計來解決大模型的參數(shù)在芯片和內(nèi)存通訊而帶來帶寬和功耗的問題。
如圖所示,每個tile包含一個NFU,四個eDRAM Bank和一個與中央eDRAM相連接的I/O接口,模型參數(shù)存放在離NFU更近的eDRAM存儲區(qū)域中,輸入輸出數(shù)據(jù)則需要通過訪存操作完成數(shù)據(jù)加載。tile使用eDRAM代替SRAM存儲模型參數(shù),使其在存儲密度、訪存延遲和功耗之間針對大模型的資源需求上得到了更好的平衡。
tile架構(gòu)
當(dāng)模型的參數(shù)遠(yuǎn)遠(yuǎn)大于輸入/輸出數(shù)據(jù)時,將大尺寸模型參數(shù)布署在離計算部件更近的eDRAM中,以減少計算過程中的訪存延時,而將尺寸較小的輸入/輸出通過訪存操作進(jìn)行加載、可以減少有效訪存開銷,將SB拆分放置以減少數(shù)據(jù)訪問沖突,進(jìn)一步減少訪存延遲。
DaDianNao的NFU相比于DianNao更復(fù)雜,并增加了針對模型訓(xùn)練而設(shè)計的功能模塊。改進(jìn)后的NFU計算單元如圖所示,在每個tile中計算的中間值會放在tile的本地eDRAM中,計算完畢后再將其輸出。
DaDianNao NFU架構(gòu)
在多芯片組中一個芯片為一個node,如圖所示,一個node包含16個tile和兩個中央的eDRAM Bank,他們之間通過Fat-tree相互連接。這兩個中央eDRAM存儲區(qū)一個用于將輸入數(shù)據(jù)廣播到每個tile,一個用于收集所有tile的輸出結(jié)果。
node結(jié)構(gòu)
在多芯片系統(tǒng)中,每個芯片的四周集成了四組HyperTransport 2.0的通信通道,用于芯片與四周的芯片相連組成一個多芯片系統(tǒng)。相比與DianNao,在實現(xiàn)相同算力的條件下,其芯片面積減少了28.5%,將參數(shù)儲存在片上的eDRAM中降低了片外訪存的帶寬需求,參數(shù)存儲單元放在離NFU更近區(qū)域,并進(jìn)行分塊存放,不僅減少了數(shù)據(jù)訪問的沖突也提高了數(shù)據(jù)傳輸速度。
ShiDianNao
ShiDianNao是基于CNN模型實時采集圖像進(jìn)行計算處理的專用AI處理器,芯片與圖像傳感器直接相連接,圖像數(shù)據(jù)不需要經(jīng)過DRAM存儲器就可直接輸入到芯片的處理單元進(jìn)行處理。如圖所示,ShiDianNao中的存儲部件與DianNao類似,分為NBin、NBout和SB,分別用于存儲神經(jīng)網(wǎng)絡(luò)的輸入數(shù)據(jù)、輸出數(shù)據(jù)和權(quán)重參數(shù)。運算單元包括神經(jīng)網(wǎng)絡(luò)專用計算單元NFU和通用邏輯運算單元ALU。ShiDianNao在存儲單元和計算單元中間引入了一個緩存區(qū)域Buffer Controller,用于緩存輸入數(shù)據(jù)和匯總NFU的計算結(jié)果以提高處理器的并行度。
ShiDianNao架構(gòu)
ShiDianNao中的NFU由Px*Py的二維PE (Processing Elements)陣列組成,支持?jǐn)?shù)據(jù)在PE之間流動,NFU讀取參數(shù)和輸入數(shù)據(jù)后分發(fā)給不同PE處理,之后NFU會收集匯總處理后的結(jié)果,計算結(jié)果會輸出給一個ALU單元,ALU里包含了一些非線性激活函數(shù)的硬件實現(xiàn),ALU的計算結(jié)果再通過Buffer Controller最終寫入到NBout里。
每個PE單元還有內(nèi)部的存儲結(jié)構(gòu),以支持PE之間的數(shù)據(jù)傳輸。如圖所示,每個PE內(nèi)部由一個乘法器、一個加法器、若干個寄存器、兩組用于數(shù)據(jù)交互的FIFO等部件組成,其中FIFO-H用于存儲水平方向數(shù)據(jù),F(xiàn)IFO-V用于存儲豎直方向數(shù)據(jù)。每個PE有三個輸入接口,一個是用于接收控制信號operand,一個用于接收權(quán)重參數(shù)Kernel,還有一個用于接收輸入數(shù)據(jù),其來源可能是右邊PE的輸出、下邊PE的輸出或者NBin。每個PE有兩個輸出,一個用于將計算結(jié)果寫到NBout,另一個則用于傳輸給鄰居PE以實現(xiàn)不同PE之間的數(shù)據(jù)傳輸。由于卷積運算的相鄰滑動窗口之間有著大量的重復(fù)數(shù)據(jù),通過FIFO-H和FIFO-V兩個模塊接收相鄰PE的數(shù)據(jù),實現(xiàn)PE間數(shù)據(jù)傳輸和復(fù)用,可以極大的減少存儲帶寬的需求,Kernel數(shù)據(jù)以廣播的形式發(fā)送到每個PE參與計算。
ShiDianNao PE架構(gòu)
PuDianNao
PuDianNao在分析了各類機(jī)器學(xué)習(xí)算法在訪存行為、計算模式上的差異后從更細(xì)粒度的數(shù)據(jù)重用和計算操作上進(jìn)行了重新設(shè)計,使其能能夠支持包括KNN、DNN、SVM、Classification Tree等七種經(jīng)典機(jī)器學(xué)習(xí)算法的AI處理器。
PuDianNao的架構(gòu)由若干個FUs (Function Unit)單元,三個不同用途的數(shù)據(jù)緩存模塊 (Hot Buffer, Cold Buffer, Output Buffer),一個指令緩存模塊(Inst Buffer)和一個控制模塊(Control Module)等組成。 整體來看,在分析和總結(jié)了不同機(jī)器學(xué)習(xí)特性的基礎(chǔ)上,PuDianNao通過定義專用硬件來提升整體計算性能,通過設(shè)計特定的緩存模塊來提升訪存性能。
PuDianNao架構(gòu)
Cambricon-X
Cambricon-X主要是針對于神經(jīng)網(wǎng)絡(luò)中的稀疏性的特點,進(jìn)行設(shè)計的芯片架構(gòu)。神經(jīng)網(wǎng)絡(luò)中的稀疏性主要分為兩種,一種是權(quán)重參數(shù)的稀疏化,另一種是特征向量的稀疏化。Cambricon-X實現(xiàn)的是權(quán)重的稀疏化在硬件實現(xiàn)上的支持,特征向量稀疏化由于隨輸入數(shù)據(jù)動態(tài)變化,使得其管理和控制的邏輯更為復(fù)雜,所以Cambricon-X在硬件上沒有這一方面進(jìn)行支持。
神經(jīng)網(wǎng)絡(luò)中的稀疏性一方面可以通過稀疏化訓(xùn)練(比如在訓(xùn)練過程中增加正則化和門控函數(shù)等)增加模型參數(shù)的稀疏性,另一方面還可以通過剪枝算法進(jìn)一步提升模型的稀疏性。韓松等人的研究證明,通過剪枝技術(shù)可以在基本不影響模型計算精度的情況下將深度學(xué)習(xí)網(wǎng)絡(luò)模型權(quán)重系數(shù)去掉90%以上。雖然算法上可以實現(xiàn)模型的高度稀疏化,但這種稀疏化常常是不規(guī)則的稀疏,目前的主流的CPU和GPU等硬件平臺都無法對不規(guī)則的稀疏進(jìn)行有效的運算加速,所以性能上仍然受到比較大的限制。
Cambricon-X提出了一種針對稀疏神經(jīng)網(wǎng)絡(luò)高效運算的硬件實現(xiàn)方案。如圖所示,Cambricon-X的架構(gòu)設(shè)計與DianNao系列的設(shè)計由很多相似之處,主要包括控制處理器CP,緩沖區(qū)控制器Buffer Controller,兩個數(shù)據(jù)緩沖區(qū)NBin和NBout,內(nèi)存訪問模塊DMA和計算單元Computation Unit,其中計算單元由多個處理元素(Processing Elements, PE)組成。其主要的區(qū)別在于中間Buffer Controller模塊,這個模塊是針對稀疏加速器特別引入的模塊,也實現(xiàn)稀疏訪存和計算的核心。
Cambricon-X架構(gòu)
為了實現(xiàn)網(wǎng)絡(luò)參數(shù)的稀疏化計算,需要將數(shù)值為0的數(shù)從權(quán)重參數(shù)中剔除,并記錄參數(shù)中非0數(shù)據(jù)的位置,在計算時先從輸入數(shù)據(jù)中挑選出非0權(quán)重對應(yīng)位置的數(shù)據(jù),重新排列后的數(shù)據(jù)與非0參數(shù)一并傳給對應(yīng)的PE執(zhí)行計算操作。在Buffer Controller主要由Indexing Module (IM)和一個專用功能單元BCFU組成,稀疏數(shù)據(jù)的篩選主要是由IM來完成的,BCFU主要用于存儲待IM篩選的數(shù)據(jù)。
Buffer Controller架構(gòu)
IM模塊的引入實現(xiàn)了僅將索引后的數(shù)據(jù)傳給PE完成后續(xù)的計算操作,一方面索引后的數(shù)據(jù)量在稀疏網(wǎng)絡(luò)中占比很小,可以極大的減少BC區(qū)與PE之間的帶寬需求,另一方面索引后的數(shù)據(jù)在BC區(qū)域完成了數(shù)據(jù)的重排,在PE上也僅需要執(zhí)行較少的并行計算操作。
PE是神經(jīng)網(wǎng)絡(luò)計算單元,如圖所示,SB為參數(shù)緩沖區(qū),用于緩存網(wǎng)絡(luò)的權(quán)重參數(shù),雖然片上存儲空間有限無法將所有權(quán)重參數(shù)加載進(jìn)來,但是權(quán)重有更強(qiáng)的重復(fù)訪問特性,所以SB設(shè)計依然可以極大的減少數(shù)據(jù)訪存帶來的開銷。PEFU是計算邏輯的硬件實現(xiàn),其本質(zhì)是神經(jīng)網(wǎng)絡(luò)計算所需的一組乘加器的組合連接。
Cambricon-X PE架構(gòu)
總結(jié)
綜上所述,從Diannao系列和Cambricon-X來看,針對AI計算同時具有數(shù)據(jù)密集型和計算密集型的特性,NPU主要通過增加更多的并行計算單元來實現(xiàn)更高效率的計算,同時將計算靠近存儲的方式來解決數(shù)據(jù)高效訪存的問題。根據(jù)不用的應(yīng)用場景和算法特性通過軟硬件協(xié)同設(shè)計的思路來設(shè)計特定領(lǐng)域的AI芯片,并在性能、功耗、面積等指標(biāo)之間找到最佳的平衡點。
鄭重聲明:文中僅代表作者觀點,不代表本公司觀點,本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或者刪除,感謝您的關(guān)注!