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