齊勇軍,湯海林
(廣東白云學(xué)院大數(shù)據(jù)與計(jì)算機(jī)學(xué)院,510450,廣州)
隨著人工智能的繼續(xù)發(fā)展需要具有更強(qiáng)的系統(tǒng)觀,具備更好的抽象能力將人工智能面臨的復(fù)雜問題化繁為簡,借鑒和使用計(jì)算機(jī)程序語言、網(wǎng)絡(luò)和系統(tǒng)等多個(gè)領(lǐng)域中的經(jīng)典方法,并以合理層級(jí)框架和有效工具的形式,充分提高人工智能研究和實(shí)踐的效率和創(chuàng)新能力。人工智能系統(tǒng)涵蓋了從專用硬件加速器到新的體系結(jié)構(gòu),再到語言、框架和編譯,最后到分布式系統(tǒng)和網(wǎng)絡(luò)資源分配、調(diào)度和執(zhí)行管理等多個(gè)層次,關(guān)注包括可用性、可擴(kuò)展性、異構(gòu)性、大規(guī)??缮煺剐?、性能和能耗、可靠性、安全隱私等在內(nèi)的多個(gè)維度。用于圖像分類的VGG、GoogleNet、ResNet等神經(jīng)網(wǎng)絡(luò)算法接連在ImageNet挑戰(zhàn)賽上大放異彩[1]。同時(shí),用于目標(biāo)檢測的R-CNN、YOLOv3、Cascade R-CNN[2]等網(wǎng)絡(luò)不斷演化迭代,促進(jìn)了現(xiàn)代計(jì)算機(jī)視覺應(yīng)用飛速發(fā)展。從循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)被廣泛應(yīng)用于自然語言處理中,隨后逐漸出現(xiàn)了長短期記憶網(wǎng)絡(luò)(LSTM)、預(yù)訓(xùn)練語言模型(BERT)等優(yōu)化方法,為自然語言理解等應(yīng)用作出了突出貢獻(xiàn),共同將深度神經(jīng)網(wǎng)絡(luò)推向了繁榮發(fā)展的黃金時(shí)代。
深度神經(jīng)網(wǎng)絡(luò)持續(xù)增長的算力需求,對(duì)硬件處理的性能和能效提出了更高的要求。根據(jù)OpenAI發(fā)布的AI計(jì)算量報(bào)告,AI所需的計(jì)算量呈現(xiàn)出每年增長10倍的趨勢[3]。與之相對(duì)應(yīng)的是隨著摩爾定律放緩而下降的處理器發(fā)展速度。據(jù)《計(jì)算機(jī)體系結(jié)構(gòu):量化研究方法》中的數(shù)據(jù)顯示[4-5],當(dāng)前傳統(tǒng)處理器和工藝的算力每兩年提升約1倍。因此,通用處理器的算力無法滿足深度神經(jīng)網(wǎng)絡(luò)的計(jì)算需求已經(jīng)成為公認(rèn)的結(jié)論。根據(jù)OpenAI的估算,算力峰值為28 TFLOPS的NVIDIA V100大約需要355 a才能完成GPT-3的訓(xùn)練。為滿足深度神經(jīng)網(wǎng)絡(luò)對(duì)算力持續(xù)增長的需求,主要從軟件算法和硬件架構(gòu)2個(gè)層面開展。在算法層面,稀疏化、量化和知識(shí)蒸餾是常見的神經(jīng)網(wǎng)絡(luò)壓縮方法。其中,稀疏化方法利用稀疏編碼等方式減少網(wǎng)絡(luò)中節(jié)點(diǎn)和節(jié)點(diǎn)間連接的數(shù)量以提高計(jì)算效率,量化方法則通過將神經(jīng)網(wǎng)絡(luò)中的浮點(diǎn)運(yùn)算轉(zhuǎn)換為定點(diǎn)運(yùn)算以實(shí)現(xiàn)硬件加速。文中主要面向這2種壓縮方式介紹深度學(xué)習(xí)處理架構(gòu)優(yōu)化方法。知識(shí)蒸餾是非常有效的壓縮算法,其核心思想是將復(fù)雜模型(teacher)中的暗知識(shí)(dark knowledge)蒸餾提取并遷移到簡單模型(student)中,使后者在實(shí)現(xiàn)輕量級(jí)的同時(shí)保持精確的預(yù)測效果。隨后通過不同類型的知識(shí)和蒸餾方法對(duì)知識(shí)蒸餾算法做出了拓展和優(yōu)化,如Liu等人使用集成MT-DNN網(wǎng)絡(luò)訓(xùn)練單個(gè)MT-DNN網(wǎng)絡(luò),Tang[6]等人使用BERT網(wǎng)絡(luò)訓(xùn)練BILSTM網(wǎng)絡(luò),Yim[7]等人從ResNet32中蒸餾基于關(guān)系的知識(shí)訓(xùn)練ResNet14模型。在架構(gòu)層面,針對(duì)深度神經(jīng)網(wǎng)絡(luò)的運(yùn)算及訪存特點(diǎn),在指令集架構(gòu)、存儲(chǔ)層次和運(yùn)算單元等方面出現(xiàn)了大量定制化架構(gòu)的工作。在算法和架構(gòu)優(yōu)化方法不斷涌現(xiàn)的基礎(chǔ)上,通過大幅擴(kuò)展優(yōu)化空間,采用軟硬件協(xié)同設(shè)計(jì)的方式已成為提升深度學(xué)習(xí)處理性能和能效的重要趨勢。
本文將從算法和架構(gòu)協(xié)同的角度,介紹如何為稀疏推理和量化訓(xùn)練等神經(jīng)網(wǎng)絡(luò)壓縮方法提供相應(yīng)的硬件架構(gòu)支持,為構(gòu)建高能效深度學(xué)習(xí)處理器提供范例。
早期的稀疏化方法多用于神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程[8],如Dropout、稀疏表示、稀疏代價(jià)函數(shù)等。稀疏化的核心思想是通過賦零值等方式減少神經(jīng)網(wǎng)絡(luò)中的參數(shù)量,同時(shí)保證網(wǎng)絡(luò)精度,以減少深度學(xué)習(xí)中冗余矩陣乘法帶來的時(shí)間和能量消耗。在2016年國際表征學(xué)習(xí)大會(huì)上,由Han[9]等人提出的深度壓縮方法使用網(wǎng)絡(luò)剪枝、共享權(quán)重和霍夫曼編碼等技術(shù)對(duì)網(wǎng)絡(luò)進(jìn)行稀疏化,該方法可以在不損失精度的前提下,將神經(jīng)網(wǎng)絡(luò)的權(quán)值數(shù)量減少至原來的1/10。稀疏化也被廣泛應(yīng)用到優(yōu)化神經(jīng)網(wǎng)絡(luò)的推理過程[10]。谷歌的研究人員發(fā)現(xiàn),對(duì)一個(gè)固定容量的稠密網(wǎng)絡(luò)進(jìn)行30%的稀疏化,其性能會(huì)有適度提升,直到超過70%的稀疏度[11],其精度才會(huì)明顯下降。基于此,谷歌聯(lián)合Deep Mind開發(fā)了Tensor Flow Lite和XNNPACKML中的新功能和工具庫[12],用戶可以通過張量重排、量級(jí)剪枝等功能在模型大小、推理速度和預(yù)測質(zhì)量之間進(jìn)行調(diào)試,最終得到優(yōu)化的稀疏化網(wǎng)絡(luò)模型。
目前,通用的處理器架構(gòu)在進(jìn)行稀疏神經(jīng)網(wǎng)絡(luò)推理時(shí)仍無法使獲得的收益最大化,針對(duì)稀疏神經(jīng)網(wǎng)絡(luò)的加速器微架構(gòu)亟待優(yōu)化。傳統(tǒng)加速器只能處理規(guī)則的矩陣和向量運(yùn)算[13],對(duì)于不規(guī)則連接的稀疏神經(jīng)網(wǎng)絡(luò)只能按照全連接的矩陣或向量的方式進(jìn)行運(yùn)算。雖然CPU和GPU都有其對(duì)應(yīng)的稀疏矩陣運(yùn)算加速庫sparse BLAS和cuSPARSE,但在對(duì)AlexNet進(jìn)行稀疏化后,其在GPU和CPU上的性能提升并不顯著,表現(xiàn)差強(qiáng)人意。
因此,由于稀疏神經(jīng)網(wǎng)絡(luò)具有拓?fù)浣Y(jié)構(gòu)和計(jì)算不規(guī)則帶來的缺陷,在其加速器設(shè)計(jì)中,面積低效、訪存低效和并行低效成為目前公認(rèn)的三大難題。
針對(duì)稀疏神經(jīng)網(wǎng)絡(luò)加速器面臨的面積低效、訪存低效和并行低效三大難題,Zhang等人提出了一種新的加速器Cambricon-X,它不僅可以有效地處理原始的稠密神經(jīng)網(wǎng)絡(luò),還可以高效處理被大量剪枝的稀疏網(wǎng)絡(luò)。
Cambricon-X加速器的體系結(jié)構(gòu)如圖1所示。它包括控制處理器、緩存區(qū)控制器、神經(jīng)元緩存器(包括輸入神經(jīng)元緩存器NBin和輸出神經(jīng)元緩存器NBout)、直接內(nèi)存存取模塊和包含多個(gè)處理單元的計(jì)算單元。該架構(gòu)最大的特點(diǎn)是它的多個(gè)處理單元和緩存區(qū)控制器可以在處理過程中充分利用神經(jīng)網(wǎng)絡(luò)模型的稀疏性和不規(guī)則性。具體而言,緩存區(qū)控制器中集成了一個(gè)有T個(gè)索引單元(Indexing Module,IM)的模塊,每個(gè)索引單元對(duì)應(yīng)一個(gè)Tn處理單元,基于控制處理器解碼后的指令從神經(jīng)元緩存區(qū)的NBin中選擇所需的神經(jīng)元,然后將神經(jīng)元傳輸?shù)剿B接的處理單元中。在接收到神經(jīng)元后,處理單元可以使用本地存儲(chǔ)的壓縮突觸執(zhí)行高效的計(jì)算。系統(tǒng)在處理單元中完成計(jì)算后,將收集結(jié)果以在專用功能單元上進(jìn)行進(jìn)一步處理,或直接寫回輸出模塊NBout。此外,為了避免布線擁塞,所有處理單元都以胖樹拓?fù)溥B接。值得注意的是,加速器在處理稠密的神經(jīng)網(wǎng)絡(luò)時(shí)可以繞過索引單元,以避免影響稠密神經(jīng)網(wǎng)絡(luò)的處理速度。由于突觸的不規(guī)則分布,多個(gè)處理單元以異步方式工作來獲得更高的效率。
圖1 Cambricon-X 整體架構(gòu)
研究人員用一些有代表性的稀疏網(wǎng)絡(luò)對(duì)Cambricon-X加速器進(jìn)行了評(píng)估。結(jié)果表明,與代表性的神經(jīng)網(wǎng)絡(luò)加速器DianNao相比,Cambricon-X加速器平均可實(shí)現(xiàn)7.23倍的速度提升和6.43倍的能效提升,其功耗僅為954 mW,面積開銷為6.38 mm2。與采用稀疏庫(即cuSPARSE)的GPU相比,該加速器平均可實(shí)現(xiàn)10.6倍的速度提升和29.43倍的能效提升。與采用稀疏庫(即稀疏BLAS)的CPU相比,該加速器平均可達(dá)到144.41倍的加速。
Cambricon-X可以高效處理稀疏神經(jīng)網(wǎng)絡(luò),但由于稀疏所帶來的網(wǎng)絡(luò)不規(guī)整性,硬件無法完全利用稀疏性帶來的好處。為此,提出了一種軟硬件協(xié)同的方法來有效解決稀疏網(wǎng)絡(luò)的不規(guī)整性。
2.3.1 在軟件方面的架構(gòu) 研究人員通過觀察神經(jīng)網(wǎng)絡(luò)中的權(quán)值分布發(fā)現(xiàn)了其具有局部收斂性,即在訓(xùn)練過程中,絕對(duì)值偏大或者偏小的權(quán)值往往會(huì)聚集成簇。圖2給出了全連接層到輸出層的權(quán)重分布情況。基于此,提出了一種粗粒度修剪算法以減少稀疏突觸的非規(guī)整性。具體方法是,將權(quán)值參數(shù)矩陣進(jìn)行分塊,且從網(wǎng)絡(luò)拓?fù)渲杏谰脛h除符合某些特定條件的權(quán)值塊,同時(shí)在訓(xùn)練中迭代使用粗粒度修剪技術(shù),可以在避免精度損失的同時(shí)大大降低數(shù)據(jù)量,實(shí)現(xiàn)更好的稀疏性。結(jié)果表明,該方法使稀疏網(wǎng)絡(luò)的不規(guī)整性平均降低至原來的約1/20。若與局部量化一起,粗粒度修剪技術(shù)將顯著降低索引的大小并提高網(wǎng)絡(luò)壓縮率。例如,在AlexNet上索引大小可縮減為原來的1/102,并得到79倍的網(wǎng)絡(luò)壓縮率,且精度幾乎無損失。
圖2 權(quán)重的局部收斂性
2.3.2 在硬件方面的架構(gòu) 為了進(jìn)一步提高加速器的結(jié)構(gòu)性能,提出了一款針對(duì)粗粒度修剪技術(shù)的硬件加速器Cambricon-S,其架構(gòu)如圖3所示。
圖3 Cambricon-S 整體架構(gòu)
該加速器包含具有共享索引的神經(jīng)元選擇模塊(加速器的關(guān)鍵組件)以處理靜態(tài)稀疏性,以及具有多個(gè)處理單元的神經(jīng)功能單元以并行計(jì)算不同的輸出神經(jīng)元。其中每個(gè)處理單元都包含一個(gè)本地突觸選擇器模塊,以處理動(dòng)態(tài)稀疏性。存儲(chǔ)模塊由神經(jīng)元緩存區(qū)(包括輸入神經(jīng)元緩存器NBin和輸出神經(jīng)元緩存器NBout)和突觸索引緩存區(qū)組成;控制模塊由控制處理器和指令緩存區(qū)組成,其中控制處理器將來自指令緩存區(qū)的各種指令有效地解碼為所有其他模塊的詳細(xì)控制信號(hào)。系統(tǒng)通過多個(gè)計(jì)算單元同時(shí)處理一個(gè)權(quán)值塊相關(guān)的計(jì)算,共享輸入數(shù)據(jù)和稀疏數(shù)據(jù)索引,可降低稀疏網(wǎng)絡(luò)的非規(guī)整性,從而提高計(jì)算單元的利用率和處理效率。同時(shí),通過使用面向粗粒度稀疏的壓縮數(shù)據(jù)表示方法,可大大降低訪存總數(shù)據(jù)量。與Cambricon-X相比,Cambricon-S加速器在性能和能效方面分別提高了1.71倍和1.37倍,頻率為1 GHz時(shí),其算力達(dá)到了512 GOP/s,且面積僅為6.73 mm2,功耗僅為798.55 mW。
量化方法的核心思想是用低開銷的定點(diǎn)數(shù)代替高開銷的浮點(diǎn)數(shù)(如float32),以減少訓(xùn)練和推理過程中冗余的時(shí)間和內(nèi)存消耗。早期的量化嘗試,例如麻省理工學(xué)院在模型壓縮論文中的聚類量化和英特爾實(shí)驗(yàn)室在增量網(wǎng)絡(luò)量化中使用的移位量化,為后續(xù)的量化研究提供了基礎(chǔ)[14]。提出了IAO量化方法,針對(duì)推理過程進(jìn)行定點(diǎn)量化,并將該工作應(yīng)用到Tensor Flow Lite中。
研究表明,低位寬定點(diǎn)數(shù)可以在一定程度上準(zhǔn)確高效地執(zhí)行深度神經(jīng)網(wǎng)絡(luò)的推理,但對(duì)于訓(xùn)練過程來說,使用量化技術(shù)可能會(huì)導(dǎo)致顯著的準(zhǔn)確性損失。大多數(shù)已有的量化訓(xùn)練研究都對(duì)所有網(wǎng)絡(luò)層使用統(tǒng)一的精度(位寬),如何在每一次訓(xùn)練迭代中都能保證模型的精度成為了目前量化方法的一大挑戰(zhàn)。
基于對(duì)反向傳播中訓(xùn)練精度與計(jì)算位寬之間相關(guān)性的觀察,提出了一種有效的自適應(yīng)逐層確定位寬的定點(diǎn)訓(xùn)練方法,在不改變超參數(shù)和不降低精度的前提下,利用定點(diǎn)訓(xùn)練大規(guī)模的深度神經(jīng)網(wǎng)絡(luò)。在每一層的訓(xùn)練中,該方法會(huì)自動(dòng)找到權(quán)值、激活值和激活梯度的最佳量化分辨率,即最小的比特寬度,同時(shí)不顯著改變數(shù)據(jù)的均值。具體而言,首先在量化之前計(jì)算數(shù)據(jù)的均值,之后使用int8量化數(shù)據(jù)并計(jì)算量化誤差。如果量化誤差比超過一定閾值,就增大量化位寬。循環(huán)上述過程直至量化誤差比低于閾值為止。
實(shí)驗(yàn)結(jié)果表明:該自適應(yīng)定點(diǎn)訓(xùn)練方法可以達(dá)到與float32相當(dāng)?shù)木?,而平均精度損失僅為0.02%(精度損失范圍為-1.4%~1.3%)。在Intel Xeon Gold 6154上運(yùn)行的結(jié)果表明,該方法可以在AlexNet的訓(xùn)練中達(dá)到高于float 32方法2.52倍的加速效果。
使用自適應(yīng)定點(diǎn)訓(xùn)練方法,深度學(xué)習(xí)處理器將不再需要大量昂貴的浮點(diǎn)硬件單元來支持深度學(xué)習(xí)訓(xùn)練任務(wù),取而代之的是對(duì)芯片面積和功耗要求更低的輕量級(jí)定點(diǎn)硬件單元。這樣一來,在相同的芯片面積或功耗約束下,可以大大提高深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練性能,這對(duì)芯片設(shè)計(jì)者和用戶來說無疑是一個(gè)好消息。
為了將以自適應(yīng)定點(diǎn)訓(xùn)練方法為代表的量化訓(xùn)練方法有效地部署到現(xiàn)有的深度神經(jīng)網(wǎng)絡(luò)加速器上,需要在硬件層面對(duì)大量數(shù)據(jù)(例如神經(jīng)元和權(quán)重)進(jìn)行實(shí)時(shí)統(tǒng)計(jì)量化和高精度的權(quán)重更新,為此提出了首款高效量化訓(xùn)練架構(gòu)Cambricon-Q。Cambricon-Q是一個(gè)由ASIC加速核心和近數(shù)據(jù)處理(Near-Data-Processing,NDP)引擎組成的混合架構(gòu),其結(jié)構(gòu)如圖4所示。
圖4 Cambricon-Q 整體架構(gòu)
ASIC加速核心用于對(duì)切片數(shù)據(jù)執(zhí)行基于統(tǒng)計(jì)的局部量化,在提高計(jì)算效率的同時(shí)顯著減少數(shù)據(jù)訪問量。它由用于矩陣/矢量計(jì)算的PE陣列,用于標(biāo)量運(yùn)算的標(biāo)量功能單元和3個(gè)片上緩存區(qū)(分別用于輸入神經(jīng)元(NBin),輸出神經(jīng)元(NBout)和突觸緩存)等組成。此外,它還包括3個(gè)專門設(shè)計(jì)的量化單元以有效支持對(duì)硬件友好的量化技術(shù):一個(gè)用于執(zhí)行實(shí)時(shí)統(tǒng)計(jì)和局部動(dòng)態(tài)量化的統(tǒng)計(jì)量化單元,2個(gè)與NBin和突觸緩存耦合的量化緩存控制器,以管理以不同方式量化的數(shù)據(jù)的量化緩存控制器參數(shù)(例如縮放比例和偏移)。與傳統(tǒng)基于統(tǒng)計(jì)的量化不同,加速核心可連續(xù)地對(duì)整個(gè)數(shù)據(jù)的每個(gè)分區(qū)切片并進(jìn)行統(tǒng)計(jì)分析和重構(gòu)。
數(shù)據(jù)處理引擎用于高精度權(quán)重更新,它將一個(gè)可配置的優(yōu)化器集成到DRAM中,以減少權(quán)重更新中數(shù)據(jù)傳輸帶來的消耗。引擎由2個(gè)專用模塊組成:SQU優(yōu)化器和NDP優(yōu)化器,可以通過將可配置的優(yōu)化器集成到DRAM中來實(shí)現(xiàn)權(quán)重的原位更新。
在各種網(wǎng)絡(luò)模型上進(jìn)行了實(shí)驗(yàn),并將實(shí)驗(yàn)結(jié)果與邊緣GPU和TPU進(jìn)行了比較。結(jié)果表明,與邊緣GPU(如JetsonTX2)相比,Cambricon-Q加速器訓(xùn)練的能效提高了6.41倍,性能提高了4.2倍。與TPU相比,Cambricon-Q深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練的能效提高了1.62倍,性能提高了1.7倍。此外,與GPU上的全精度訓(xùn)練相比,其精度損失小于0.4%。
隨著深度學(xué)習(xí)已經(jīng)蓬勃發(fā)展,現(xiàn)如今已滲透到各行各業(yè)并取得了良好的效果,未來10年,深度學(xué)習(xí)將進(jìn)一步覆蓋自動(dòng)駕駛、智能醫(yī)療、智慧制造等更廣泛的應(yīng)用領(lǐng)域。以深度學(xué)習(xí)框架為核心的開源深度學(xué)習(xí)平臺(tái)大大降低了人工智能技術(shù)的開發(fā)門檻,有效提高了人工智能應(yīng)用的質(zhì)量和效率。深度學(xué)習(xí)能力的持續(xù)提升也不斷增強(qiáng)了對(duì)高性能和高能效深度學(xué)習(xí)處理架構(gòu)的需求,面向稀疏化和量化這兩類典型的神經(jīng)網(wǎng)絡(luò)壓縮方法,本文從軟硬件協(xié)同的角度介紹了如何從硬件架構(gòu)為其提供專門的支持和優(yōu)化,旨在為實(shí)現(xiàn)更深入的跨層次軟硬件協(xié)同優(yōu)化,從而為進(jìn)一步提升深度學(xué)習(xí)處理能效的相關(guān)研究提供參考。