AI計(jì)算特性
設(shè)計(jì)和部署一款專用芯片需要平衡各種指標(biāo),不同的場景下關(guān)注的指標(biāo)不一樣,其芯片設(shè)計(jì)的思路也會(huì)存在差異,常見的芯片設(shè)計(jì)指標(biāo)包括:
功耗:芯片電路在工作時(shí)所消耗的能量。
峰值性能:芯片每秒計(jì)算操作數(shù)的總和。
吞吐量:單位時(shí)間芯片能夠處理的數(shù)據(jù)量。
面積:晶體管數(shù)量越多,芯片尺寸越大,工藝越精密,芯片尺寸越小。
靈活性:靈活性和可編程能力越高,適應(yīng)的場景越多。
成本:包括芯片設(shè)計(jì)費(fèi)用和單個(gè)芯片生成加工費(fèi)用。
從計(jì)算能力上看,芯片中參與計(jì)算的內(nèi)核數(shù)量越多對數(shù)據(jù)傳輸?shù)膸捯笤礁撸訥PU為例,其中包含幾百到幾千個(gè)計(jì)算Core,當(dāng)這些Core同時(shí)讀寫數(shù)據(jù)時(shí)對數(shù)據(jù)帶寬的占用是相當(dāng)高的。其次,從計(jì)算粒度上看,只有當(dāng)峰值計(jì)算能力小于等于最大帶寬時(shí),才能達(dá)到最佳的計(jì)算效率,雖然片上存儲(chǔ)能提供極高的帶寬和讀寫性能,但其會(huì)占用有限的芯片面積,所以需要在性能和帶寬上進(jìn)行平衡。再次,從通用性上看,可編程能力越強(qiáng),能使用的應(yīng)用場景越多,但為了兼容更多的應(yīng)用,則在架構(gòu)設(shè)計(jì)上會(huì)存在一定的平衡和冗余,這往往會(huì)導(dǎo)致其在單一任務(wù)中的性能存在一定程度的下降,所以需要在定制化實(shí)現(xiàn)極致產(chǎn)品性能和軟件可編程擴(kuò)大場景范圍上進(jìn)行平衡。
訪存
深度神經(jīng)網(wǎng)絡(luò)包含大量的網(wǎng)絡(luò)層,每一層的又包含大量的參數(shù)以及中間特征數(shù)據(jù),數(shù)據(jù)訪問量和計(jì)算量都很大。例如,卷積層包含大量多維卷積核,在計(jì)算上滑窗式的卷積運(yùn)算使得卷積核參數(shù)需要多次重復(fù)參與運(yùn)算,由于卷積核參數(shù)量一般要遠(yuǎn)大于緩存的容量,所以大多時(shí)候參數(shù)需要反復(fù)從主存中訪問。比如,早期AlexNet擁有6000萬參數(shù)量,最新的基于Transformer架構(gòu)的ChatGPT則達(dá)到了1750億參數(shù)量,如此巨大的參數(shù)量不僅需要占用巨大的存儲(chǔ)空間,如何進(jìn)行高效運(yùn)算對訪存帶寬、內(nèi)存管理以及計(jì)算都有很高要求。
通常在芯片設(shè)計(jì)中可以通過增加計(jì)算核心的數(shù)量來提高系統(tǒng)的并行度,當(dāng)并行度提高后,數(shù)據(jù)的讀寫就會(huì)成為瓶頸,即遇到“內(nèi)存墻”。內(nèi)存訪問可以通過以下幾個(gè)方面來解決:
1.通過增加片上緩存大小和寄存器數(shù)量,或提高訪存總線帶寬等來提升訪存效率,進(jìn)而減少數(shù)據(jù)等待的時(shí)間;
2.讓數(shù)據(jù)盡可能在片上多停留,避免重復(fù)訪問主存次以減少計(jì)算單元的等待時(shí)間;
3.通過數(shù)據(jù)流的模式讓數(shù)據(jù)不必經(jīng)過主存就可以在不同計(jì)算單元之間進(jìn)行通信和流動(dòng)。
由于深度學(xué)習(xí)前一層計(jì)算結(jié)果在下一層計(jì)算會(huì)被接著用上,模型參數(shù)在不同時(shí)鐘周期中也反復(fù)使用。第一種方案通過增加片上存儲(chǔ)減少了數(shù)據(jù)被重復(fù)寫回和加載的開銷。第二種方案直接把復(fù)用的數(shù)據(jù)放在片上Buffer實(shí)現(xiàn)數(shù)據(jù)復(fù)用,復(fù)用方式和粒度更加精細(xì)可控。第三種方案則是讓前一周期計(jì)算的結(jié)果流動(dòng)到其他計(jì)算核心上,在下一周期不用發(fā)生訪存操作的情況下就可以直接參與計(jì)算,Google TPU采用的脈動(dòng)陣列和流行的DataFlow數(shù)據(jù)流架構(gòu),都是采用的這一思路設(shè)計(jì)的。
功耗
深度學(xué)習(xí)由于參數(shù)量過于龐大,而片上存儲(chǔ)空間有限無法全部存儲(chǔ),絕大部分?jǐn)?shù)據(jù)被存放在主存中,這必然會(huì)造成頻繁的存儲(chǔ)器訪問,大多數(shù)深度學(xué)習(xí)任務(wù)中數(shù)據(jù)訪存造成的功耗要高于計(jì)算造成的功耗,其中,最靠近計(jì)算單元的寄存器功耗最小,而最遠(yuǎn)的片外DRAM的功耗則其的200倍。所以如何讓數(shù)據(jù)盡可能多地在片上存儲(chǔ)中停留和復(fù)用可以有效減少數(shù)據(jù)訪存的功耗,但片上存儲(chǔ)又受到成本和面積的約束,不可能無限的增大,如何解決大規(guī)模數(shù)據(jù)訪存帶來的功耗問題是低功耗AI芯片需要重點(diǎn)解決難點(diǎn)。
稀疏性
稀疏性(Sparsity),是指深度學(xué)習(xí)網(wǎng)絡(luò)模型具有非常大的參數(shù)和特征容量,在計(jì)算中包含大量對0的乘法和加法的操作。在計(jì)算中0乘上任何數(shù)都是0,0加上任何數(shù)都是原來的數(shù),對0參與的乘加過程如果可以不使用計(jì)算單元直接輸出結(jié)果0,這樣可以節(jié)省運(yùn)算產(chǎn)生的功耗,如果可以不需要到內(nèi)存讀寫數(shù)據(jù),則可以減少了數(shù)據(jù)搬移的開銷。
在深度學(xué)習(xí)中稀疏化主要包括兩種:模型稀疏和短暫稀疏。模型稀疏與模型參數(shù)有關(guān),一方面模型參數(shù)中本身包含大量0或者非常小的值,另一方面在訓(xùn)練的過程中增加一些正則化和門控函數(shù)(gating functions)增加模型參數(shù)的稀疏化。短暫稀疏與模型的運(yùn)算過程有關(guān),它與輸入數(shù)據(jù)和模型參數(shù)都有關(guān),比如Dropout和ReLU等算子的輸出數(shù)據(jù)就是高度稀疏的數(shù)據(jù)。統(tǒng)計(jì)表明,AlexNet、VGG、ResNet等經(jīng)典網(wǎng)絡(luò)的稀疏性可以達(dá)到 90%左右,如果能有效利用網(wǎng)絡(luò)的稀疏性可以顯著提高網(wǎng)絡(luò)的運(yùn)算效率。
混合精度
由于神經(jīng)網(wǎng)絡(luò)本身具有一定的冗余性,在經(jīng)過精心的設(shè)計(jì)和調(diào)優(yōu)后,低精度的神經(jīng)網(wǎng)絡(luò)也可以實(shí)現(xiàn)整體準(zhǔn)確率不變或者只有很小的準(zhǔn)確率損失,而使用低精度計(jì)算則可以極大地減少計(jì)算和存儲(chǔ)負(fù)擔(dān)并降低功耗。實(shí)驗(yàn)表明,使用16位浮點(diǎn)乘法和32位浮點(diǎn)加法在AlexNet、VGG、ResNet等網(wǎng)絡(luò)上進(jìn)行訓(xùn)練的精度損失可以忽略不計(jì),使用8位定點(diǎn)乘法和16位定點(diǎn)加法進(jìn)行推理,精度損失幾乎沒有。
低精度計(jì)算已經(jīng)成為AI芯片的一個(gè)趨勢,尤其在推理芯片中更加明顯。低精度計(jì)算不僅需要在算法上能夠?qū)崿F(xiàn)低精度訓(xùn)練和模型量化,還需要在指令架構(gòu)設(shè)計(jì)和硬件計(jì)算單元上能夠支持低精度運(yùn)算,它是一個(gè)軟硬件結(jié)合的整體解決方案。隨著AI對低功耗和高性能需求不斷提高,神經(jīng)網(wǎng)絡(luò)也從32bit浮點(diǎn)運(yùn)算逐步向16bit、8bit、4bit 甚至二值化網(wǎng)絡(luò)等多種低精度運(yùn)算擴(kuò)展。
通用性
當(dāng)前深度學(xué)習(xí)網(wǎng)絡(luò)層數(shù)越來越深、網(wǎng)絡(luò)層更加豐富、拓?fù)浣Y(jié)構(gòu)也更加復(fù)雜。神經(jīng)網(wǎng)絡(luò)深度已經(jīng)從早前的VGG十幾層網(wǎng)絡(luò)發(fā)展到ResNet的幾百層,甚至上千層的網(wǎng)絡(luò),不僅包含卷積層、深度可分離卷積、全連接層、循環(huán)層、上下采樣、尺度變換以及激活函數(shù)層等大量不同功能的網(wǎng)絡(luò)層,還包括殘差連接、長短記憶網(wǎng)絡(luò)、Transformer等復(fù)雜的多層連接拓?fù)浣Y(jié)構(gòu)。由于不同網(wǎng)絡(luò)層的計(jì)算和訪存特性都存在較大的差異,因而與之匹配的最佳硬件架構(gòu)也存在較大的不同,例如,針對卷積網(wǎng)絡(luò)特性設(shè)計(jì)的硬件在運(yùn)行長短記憶網(wǎng)絡(luò)(Long Short-Term Memory, LSTM)時(shí)只能發(fā)揮其不到20%的性能。
AI專用芯片的性能跟通用性是一個(gè)相互平衡的過程,一個(gè)芯片在某些特定網(wǎng)絡(luò)結(jié)構(gòu)上的性能越強(qiáng)、功耗越低,那么它往往就越不靈活、通用性越差。例如,Google TPU可以輕松做到遠(yuǎn)高于GPU的性能和能效比,但這是以犧牲芯片的可編程性和通用性為代價(jià)的。目前在語音、文字、圖像、視頻等不同應(yīng)用場景下使用的網(wǎng)絡(luò)架構(gòu)還無法做到完全統(tǒng)一,在同一領(lǐng)域下的不用場景和任務(wù)上深度學(xué)習(xí)的網(wǎng)絡(luò)也存在一定的差異,新的深度學(xué)習(xí)算法和網(wǎng)絡(luò)結(jié)構(gòu)還在不斷的演變中,可能AI芯片還未投產(chǎn)上市,當(dāng)前的網(wǎng)絡(luò)架構(gòu)已經(jīng)淘汰,被其他更優(yōu)的網(wǎng)絡(luò)架構(gòu)替代了。
目前AI芯片企業(yè)采用的技術(shù)方案和策略各不相同,一類最激進(jìn)的企業(yè),采用算法固化方案,這一做法芯片研發(fā)周期最短、單一算法的性能與功耗比可以做到極致,但其限制了芯片的通用性和靈活性,比如第一代Google TPU;一類是升級(jí)現(xiàn)有可編程處理器,使其在性能與芯片通用性上達(dá)到較好的平衡,成本也相對可控,目前這一類中GPU依然是主流。還有一類是設(shè)計(jì)全新的芯片架構(gòu),這一做法能夠在性能與通用性上達(dá)到更好的平衡,但芯片研發(fā)投入成本大且需要較長的研發(fā)周期,比如寒武紀(jì)NPU和Google TPU。
當(dāng)前AI芯片的發(fā)展還處于初級(jí)階段,市場上主要以定制化的專用AI芯片和具備一定的靈活性的弱編程AI芯片為主,隨著算法和芯片制造工藝的不斷發(fā)展和完善,支持潛在的新網(wǎng)絡(luò)架構(gòu)特性且具備足夠彈性和拓展性的AI高性能芯片會(huì)逐漸到來。參考GPU的發(fā)展歷史,早期的GPU是專門用來做圖形加速計(jì)算的,由于生產(chǎn)工藝和制程的限制,必須采用定制化的專用硬件設(shè)計(jì)方案才能滿足圖形渲染對性能和功耗的要求。隨著圖像加速行業(yè)的發(fā)展和算法的快速迭代更新,以及芯片生成工藝的提升,逐漸出現(xiàn)了具有弱編程特性的GPGPU,再到后來的CUDA使得GPU具備了更強(qiáng)的可編程能力并極大的拓展其應(yīng)用領(lǐng)域,使GPU不僅能加速視頻渲染、還能做科學(xué)分析、天文計(jì)算和AI加速等更通用的并行計(jì)算任務(wù)。
鄭重聲明:文中僅代表作者觀點(diǎn),不代表本公司觀點(diǎn),本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或者刪除,感謝您的關(guān)注!