姜小波 鄧晗珂 莫志杰 黎紅源
①(華南理工大學(xué)電子與信息學(xué)院 廣州 510000)
②(廣東科學(xué)技術(shù)職業(yè)學(xué)院機(jī)器人學(xué)院 珠海 519090)
自然語(yǔ)言處理(Natural Language Processing,NLP)技術(shù)在人工智能(Artificial Intelligence, AI)領(lǐng)域具有重要地位和作用,賦予機(jī)器從不同結(jié)構(gòu)的文本中獲取和處理知識(shí)與信息的能力,并且能夠與人進(jìn)行交互,被廣泛應(yīng)用于機(jī)器翻譯、情感分析和聊天機(jī)器人等場(chǎng)景。隨著深度學(xué)習(xí)的發(fā)展,各種用于NLP的模型層出不窮,近期基于自注意力機(jī)制的Transformer[1]模型及其變體在各種NLP任務(wù)上顯示了優(yōu)越的性能[2-6],遠(yuǎn)超傳統(tǒng)的基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)[7]和遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)[8]的模型。但硬件的發(fā)展遠(yuǎn)遠(yuǎn)落后于模型的發(fā)展,限制了Transformer自然語(yǔ)言處理模型的發(fā)展和應(yīng)用。
Transformer卓越的性能是由復(fù)雜的模型帶來(lái)的。模型的復(fù)雜包括數(shù)量上的復(fù)雜和結(jié)構(gòu)上的復(fù)雜。數(shù)量上的復(fù)雜性包括模型參數(shù)量與運(yùn)算量的爆炸增長(zhǎng)。參數(shù)和計(jì)算復(fù)雜度的指數(shù)級(jí)增長(zhǎng)給Transformer的硬件設(shè)計(jì)帶來(lái)了巨大的挑戰(zhàn)。對(duì)硬件設(shè)計(jì)更大的挑戰(zhàn)是模型結(jié)構(gòu)上的復(fù)雜性,表現(xiàn)為參數(shù)和計(jì)算分布上的不規(guī)則性。這種不規(guī)則性帶來(lái)了模型和硬件的不匹配,包括模型復(fù)雜運(yùn)算和規(guī)則運(yùn)算陣列的不匹配;模型分布式參數(shù)和硬件集中式存儲(chǔ)器的不匹配;復(fù)雜模型運(yùn)算過(guò)程的參數(shù)不均衡性和硬件固定的不匹配。這些不匹配降低了Transformer模型映射到加速器的性能和效率。當(dāng)前研究更多地集中在解決模型數(shù)量上的復(fù)雜性,對(duì)結(jié)構(gòu)上的復(fù)雜性,研究得比較少。
Transformer模型具有數(shù)量上的復(fù)雜性,包含海量的參數(shù)和運(yùn)算,而且具有很大的冗余性。現(xiàn)有研究通過(guò)模型壓縮減少模型規(guī)模。Voita等人[9]使用頭部剪枝,計(jì)算每個(gè)注意頭的重要性分?jǐn)?shù),然后修剪分?jǐn)?shù)較低的注意力頭。Lin等人[10]將模型中的殘差模塊懲罰到同一映射,通過(guò)閾值算子來(lái)識(shí)別和丟棄殘差連接中不重要的非線性映射。Peng等人[11]提出了一種列平衡塊權(quán)重修剪算法,在每個(gè)權(quán)重矩陣的列中進(jìn)行分塊剪枝。這些研究有效地減少了參數(shù)和運(yùn)算量。但對(duì)于模型結(jié)構(gòu)方面的復(fù)雜性,研究得比較少。而這恰恰是Transformer模型加速器設(shè)計(jì)的關(guān)鍵。
由于模型中不同權(quán)重矩陣的稀疏性和計(jì)算模式不一致導(dǎo)致映射到規(guī)則的運(yùn)算架構(gòu)和集中式存儲(chǔ)架構(gòu)時(shí)效率不高。如Peng等人[11]和Qi等人[12]使用的稀疏模型,其各行列非零元素的隨機(jī)性及剪枝率不同導(dǎo)致的計(jì)算量不一樣,映射到同一運(yùn)算陣列造成的處理單元(Processing Unit, PE)停頓降低了PE利用率。Li等人[13]使用的異構(gòu)運(yùn)算陣列由于其運(yùn)算單元的多樣化、固定的硬件資源分配及復(fù)雜性更高的傅里葉變換運(yùn)算,PE利用率不高且增加了PE單位運(yùn)算功耗和額外的控制開(kāi)銷。Zhang等人[14]使用乘加分離的運(yùn)算架構(gòu)映射外積數(shù)據(jù)流,可以減少中間結(jié)果存儲(chǔ)但是乘加運(yùn)算量不一致導(dǎo)致運(yùn)算陣列停頓。Park等人[15]使用的不規(guī)則稀疏導(dǎo)致負(fù)載不均衡,并且復(fù)雜的索引匹配導(dǎo)致過(guò)多的存儲(chǔ)開(kāi)銷和功耗。存儲(chǔ)架構(gòu)的設(shè)計(jì)同樣影響著芯片的性能,文獻(xiàn)[11-14]的運(yùn)算陣列與片上總緩存模塊直接交互,中間結(jié)果的移動(dòng)距離較大導(dǎo)致單位數(shù)據(jù)移動(dòng)功耗增加,集中式的片上緩存管理由于運(yùn)算陣列與存儲(chǔ)單元的遠(yuǎn)距離交互使得數(shù)據(jù)的單位讀寫(xiě)功耗相對(duì)較高。目前的加速器架構(gòu)一般采用集中式的存儲(chǔ)架構(gòu),而人腦中的神經(jīng)元采用完全分布式的參數(shù)存儲(chǔ)模式,獲得了很高的運(yùn)算效率和能效。
本文通過(guò)降低模型結(jié)構(gòu)上的復(fù)雜度,提高硬件的靈活性,從而降低模型和硬件上的失配,提高模型到硬件上的映射效率。本文提出一種規(guī)則的模型壓縮方法,采用規(guī)則的偏移對(duì)角矩陣的權(quán)重剪枝方案。同時(shí)提出一種靈活的脈動(dòng)運(yùn)算陣列,在獲得更高的數(shù)據(jù)復(fù)用率的同時(shí)減少普通脈動(dòng)陣列具有的陣列間數(shù)據(jù)移動(dòng)開(kāi)銷。本運(yùn)算陣列對(duì)提出的偏移對(duì)角矩陣能進(jìn)行高效的映射,極大減少索引開(kāi)銷的同時(shí)平衡了計(jì)算負(fù)載和提高了數(shù)據(jù)復(fù)用率。本文受人腦神經(jīng)元完全分布式存儲(chǔ)參數(shù)啟發(fā),提出一種準(zhǔn)分布的存儲(chǔ)架構(gòu),提高存儲(chǔ)效率的同時(shí)大幅度降低了權(quán)重?cái)?shù)據(jù)搬運(yùn)。
本文在Transformer模型壓縮領(lǐng)域首次提出基于偏移對(duì)角矩陣的權(quán)重剪枝方案,得到的權(quán)重從整體到局部都具有規(guī)則化特點(diǎn),在高壓縮率的同時(shí)保持硬件實(shí)現(xiàn)時(shí)運(yùn)算陣列層面的整體規(guī)則性以及運(yùn)算單元的局部規(guī)則性高效映射,同時(shí)便于準(zhǔn)分布存儲(chǔ)架構(gòu)的數(shù)據(jù)存取,可以實(shí)現(xiàn)高資源利用和低索引開(kāi)銷的高效部署。剪枝后的模型采用硬件友好的量化方法,簡(jiǎn)化硬件量化推理邏輯,在硬件中通過(guò)移位操作代替浮點(diǎn)乘法。為了減少精度損失,提出一種針對(duì)Transformer模型量化系數(shù)聯(lián)合調(diào)整方法。模型壓縮包括剪枝和量化兩個(gè)步驟。
偏移對(duì)角矩陣是一種非零值分布在對(duì)角線或者是偏移后的對(duì)角線上的結(jié)構(gòu)化規(guī)則稀疏矩陣,如圖1所示。根據(jù)Deng等人[16]在CNN模型中的研究中得到了偏移對(duì)角矩陣神經(jīng)網(wǎng)絡(luò)的存在性,并且證明了偏移對(duì)角矩陣神經(jīng)網(wǎng)絡(luò)具有和普通神經(jīng)網(wǎng)絡(luò)一樣的通用逼近性質(zhì),從理論上說(shuō)明了使用偏移對(duì)角矩陣進(jìn)行模型剪枝的可行性?;谝陨瞎ぷ?,本文將模型中的權(quán)重矩陣分為多個(gè)子矩陣并基于偏移對(duì)角矩陣進(jìn)行結(jié)構(gòu)化剪枝,可以得到整體和局部非零值規(guī)則分布的稀疏矩陣。鑒于Transformer模型參數(shù)的復(fù)雜性,為達(dá)成結(jié)構(gòu)化剪枝的目的和減少模型精度損失,本文的方法盡可能維持了原權(quán)重參數(shù)分布特點(diǎn),對(duì)訓(xùn)練好的模型中的參數(shù)使用偏移對(duì)角矩陣進(jìn)行剪枝,如圖2所示。
圖1 偏移對(duì)角矩陣
圖2 偏移對(duì)角剪枝
將總體的權(quán)重?cái)?shù)據(jù)分為4類,包括:多頭注意力輸入線性層權(quán)重(Q,K,V)、多頭注意力輸出線性層權(quán)重(O)、前饋神經(jīng)網(wǎng)絡(luò)第1層線性層權(quán)重(FFN1)和第2層線性層權(quán)重(FFN2)。隨后對(duì)分類的權(quán)重進(jìn)行剪枝,遵循“訓(xùn)練-剪枝-再訓(xùn)練”和分批剪枝相結(jié)合的策略。在剪枝訓(xùn)練過(guò)程中,每次分批剪枝只剪枝一類權(quán)重,并且每批權(quán)重剪枝后獲取下批權(quán)重的剪枝偏移量,這種策略可以更好地獲取最佳的偏移,避免一次性剪枝大量參數(shù)所帶來(lái)的性能大幅下降。剪枝流程如算法1所示,算法輸入為剪枝前的模型,輸出為剪枝后的模型,偽代碼第3行對(duì)模型進(jìn)行訓(xùn)練,第4行使用GetOffset算法獲取Q,K,V權(quán)重矩陣的偏移量,第5行使用Prune算法對(duì)Q,K,V權(quán)重矩陣進(jìn)行剪枝,以此類推后續(xù)代碼中按順序依次獲取模型中權(quán)重矩陣O, FFN1, FFN2的偏移量,完成模型的偏移對(duì)角結(jié)構(gòu)化稀疏剪枝。再訓(xùn)練的目的是減少精度損失,使模型進(jìn)行自適應(yīng)微調(diào)。
算法1 單位偏移對(duì)角剪枝
在剪枝步驟中,GetOffset根據(jù)權(quán)重的數(shù)據(jù)分布特點(diǎn)和偏移對(duì)角矩陣的子矩陣大小獲取用于剪枝的偏移量,將權(quán)重矩陣分為多個(gè)子矩陣,每一個(gè)子矩陣單獨(dú)計(jì)算偏移量,如式(1)所示,其中p為偏移量,xi,j為子矩陣中的元素。Prune根據(jù)偏移量以及子矩陣大小將分布在非偏移后的對(duì)角線的權(quán)重進(jìn)行屏蔽,將值設(shè)置為0且在訓(xùn)練過(guò)程中不進(jìn)行參數(shù)更新。為了避免剪枝后的多頭注意力層內(nèi)部相似度計(jì)算差異度不明顯,導(dǎo)致注意力性能下降,本文在剪枝多注意力層的訓(xùn)練微調(diào)過(guò)程中取消多頭注意力計(jì)算的縮放操作,以此擴(kuò)大注意力計(jì)算結(jié)果的差異性,在實(shí)驗(yàn)中發(fā)現(xiàn)這樣得到更高的BLEU分?jǐn)?shù)。
由于訓(xùn)練后的模型參數(shù)數(shù)據(jù)分布大致以0對(duì)稱,本文使用了均勻?qū)ΨQ量化對(duì)訓(xùn)練后的模型進(jìn)行了8 bit量化。為了減少量化和去量化操作帶來(lái)的額外的硬件資源和硬件功耗,本文將這些量化系數(shù)簡(jiǎn)化為2-n的形式,在硬件中通過(guò)移位操作代替浮點(diǎn)乘法。為了減少精度損失,提出一種針對(duì)Transformer模型量化系數(shù)聯(lián)合調(diào)整方法。以注意力層為例,注意力層的第1部分包含查詢向量的線性層計(jì)算、鍵向量的線性層計(jì)算和兩個(gè)線性層結(jié)果的點(diǎn)積計(jì)算。為了保持softmax函數(shù)的輸入數(shù)據(jù)的原始度,通過(guò)對(duì)線性層的參數(shù)進(jìn)行聯(lián)合調(diào)整
其中,q表示查詢向量,k表示鍵向量,Q和K分別表示查詢向量線性層的輸出和鍵向量線性層的輸出,Wq和Wk分別表示查詢向量線性層和鍵向量線性層的權(quán)重,bq和bk分別表示查詢向量線性層和鍵向量線性層的偏置。γ表示縮放系數(shù),γ的值取決于量化帶來(lái)的量化誤差最小。
為了計(jì)算層歸一化,在推理過(guò)程中需要計(jì)算輸入樣本數(shù)據(jù)的均值和標(biāo)準(zhǔn)差。在非通用計(jì)算平臺(tái)的實(shí)現(xiàn)這些計(jì)算是復(fù)雜的,可能會(huì)成為硬件實(shí)現(xiàn)的延遲瓶頸。Wu等人[17]提出使用更加簡(jiǎn)化的L1范數(shù)來(lái)代替批量歸一化中L2范數(shù),本文將其運(yùn)用到Transformer模型中的層歸一化計(jì)算,實(shí)驗(yàn)證明不會(huì)對(duì)模型性能產(chǎn)生影響,如式(5)所示
其中,μd對(duì)應(yīng)輸入所在詞向量維度的均值,CL1是一個(gè)歸一化常數(shù),取值√(π/2),xi是輸入所在詞向量,n在這里表示詞向量的維度,α和β是與L2范數(shù)的層歸一化相同的可訓(xùn)練參數(shù)??梢钥闯?,L1范數(shù)消除了平方和運(yùn)算和開(kāi)平方運(yùn)算,降低了計(jì)算復(fù)雜度。
本文通過(guò)模型壓縮大大減少了模型的儲(chǔ)存消耗,但是壓縮后的模型無(wú)法直接全部存儲(chǔ)在片上緩存中,所以需要與片外動(dòng)態(tài)隨機(jī)存儲(chǔ)器 (Dynamic RAM, DRAM)進(jìn)行數(shù)據(jù)交互。如圖3所示,總體硬件架構(gòu)包括控制模塊、片上緩存、運(yùn)算陣列和非線性計(jì)算模塊。片上緩存包括了輸入緩存、權(quán)重緩存和中間結(jié)果/輸出緩存,片上緩存采用乒乓操作用于支持?jǐn)?shù)據(jù)的連續(xù)處理。加速器的整體數(shù)據(jù)流如圖4所示,一個(gè)注意力子層或一層前饋神經(jīng)網(wǎng)絡(luò)的權(quán)重?cái)?shù)據(jù)為單批讀取權(quán)重大小,在計(jì)算過(guò)程中同步加載下一批權(quán)重?cái)?shù)據(jù)。通過(guò)網(wǎng)絡(luò)層順序加載權(quán)重?cái)?shù)據(jù),并且將層間計(jì)算結(jié)果存儲(chǔ)在片上用于下一子層計(jì)算,這樣可以減少與片外DRAM交互次數(shù)。本文對(duì)注意力層的計(jì)算順序進(jìn)行了優(yōu)化,讓Softmax函數(shù)計(jì)算與矩陣乘加計(jì)算同步進(jìn)行,可以減少計(jì)算等待時(shí)間。通過(guò)這種任務(wù)級(jí)調(diào)度,整個(gè)系統(tǒng)更高效地加速Transformer模型中的所有網(wǎng)絡(luò)層計(jì)算。
圖3 所提出的加速器總體硬件架構(gòu)
圖4 加速器整體數(shù)據(jù)流
為了減少運(yùn)算單元與存儲(chǔ)單元的數(shù)據(jù)傳輸成本,包括了長(zhǎng)距離傳輸導(dǎo)致的功耗和復(fù)雜的地址生成讀寫(xiě)成本,本文使用了準(zhǔn)分布式存儲(chǔ)架構(gòu)。在人腦神經(jīng)元中,每個(gè)神經(jīng)元都可以對(duì)電信號(hào)進(jìn)行處理和存儲(chǔ),并將處理結(jié)果傳遞給與之相連的神經(jīng)元,每個(gè)神經(jīng)元分別對(duì)數(shù)據(jù)進(jìn)行存和算,神經(jīng)元之間以分布式方式相連,通過(guò)這種分布式互聯(lián)完成神經(jīng)元間的數(shù)據(jù)交互,是完全分布式架構(gòu)。本文參考人腦神經(jīng)元的分布式結(jié)構(gòu),以PE和本地寄存器(RF)模擬每個(gè)神經(jīng)元的存儲(chǔ)和計(jì)算,PE之間以分布式進(jìn)行連接模擬神經(jīng)元之間的分布式連接,PE陣列外使用FIFO, BRAM, DRAM等多級(jí)存儲(chǔ)降低數(shù)據(jù)傳輸開(kāi)銷,總體架構(gòu)為準(zhǔn)分布式存儲(chǔ)架構(gòu)。
如圖5所示,整個(gè)存儲(chǔ)架構(gòu)包括了PE本地寄存器、運(yùn)算陣列內(nèi)部緩存(FIFO)、片上全局緩存(BRAM)和片外DRAM等具有不同訪問(wèn)代價(jià)的多級(jí)存儲(chǔ)層次。訪問(wèn)代價(jià)最低的PE內(nèi)部的RF作為一個(gè)基本單元點(diǎn),數(shù)據(jù)可以在各個(gè)基本單元點(diǎn)之間進(jìn)行橫向以及縱向的傳遞,從而將計(jì)算過(guò)程中數(shù)據(jù)固有的移動(dòng)次數(shù)最大比例地放在訪問(wèn)開(kāi)銷最小的RF存儲(chǔ)層級(jí),最大限度消耗由上級(jí)存儲(chǔ)寫(xiě)入的數(shù)據(jù),降低移動(dòng)功耗。從BRAM中讀入運(yùn)算數(shù)據(jù)時(shí),將整個(gè)運(yùn)算陣列看作一個(gè)整體進(jìn)行數(shù)據(jù)輸入,運(yùn)算陣列內(nèi)的基本單元點(diǎn)以分布式方式進(jìn)行數(shù)據(jù)交互,輸入數(shù)據(jù)在基本單元點(diǎn)中進(jìn)行點(diǎn)與點(diǎn)之間的傳遞,實(shí)現(xiàn)輸入、權(quán)重以及輸出3個(gè)維度的數(shù)據(jù)復(fù)用。整個(gè)存儲(chǔ)架構(gòu)以準(zhǔn)分布式的方式進(jìn)行數(shù)據(jù)交互。
圖5 準(zhǔn)分布式存儲(chǔ)架構(gòu)示意圖
相對(duì)于運(yùn)算陣列來(lái)說(shuō),本地緩存可以存儲(chǔ)矩陣計(jì)算的部分和結(jié)果,相比于將其存儲(chǔ)在全局緩存,加法單元可以更快和更近獲取部分和結(jié)果。另外,在計(jì)算非線性函數(shù)時(shí),這種準(zhǔn)分布存儲(chǔ)架構(gòu)還可以避免中間結(jié)果數(shù)據(jù)的重復(fù)讀取以及減少重復(fù)計(jì)算,有利于加快推理速度。
如圖3,運(yùn)算陣列由PE和加法單元組成,每列PE共用一個(gè)加法單元。PE用于處理矩陣乘法,加法單元用于處理PE的結(jié)果相加以及部分和累加,可以根據(jù)實(shí)際推理需求進(jìn)行拓展。剪枝后的偏移對(duì)角矩陣在整體上的規(guī)則性,即子矩陣的大小與排列都是規(guī)則的,可以100%高效映射到規(guī)則的運(yùn)算陣列中。運(yùn)算陣列內(nèi)部采用權(quán)重固定的數(shù)據(jù)流方案,如圖6所示,輸入和權(quán)重分別以行形式和稀疏塊形式送入運(yùn)算單元,這樣能夠減少由于不同輸入句子長(zhǎng)度以及編解碼器不同計(jì)算模式帶來(lái)的運(yùn)算陣列計(jì)算效率低下的問(wèn)題。輸入數(shù)據(jù)每個(gè)周期向右傳輸,實(shí)現(xiàn)輸入復(fù)用,而數(shù)據(jù)規(guī)模最大的權(quán)重?cái)?shù)據(jù)只需從運(yùn)算陣列外讀取1次。輸出每個(gè)周期在加法單元內(nèi)部進(jìn)行逐周期累加,實(shí)現(xiàn)輸出復(fù)用。
圖6 運(yùn)算單元數(shù)據(jù)流動(dòng)方案
計(jì)算單元包括PE和加法單元,每個(gè)PE包括乘法單元和RF存儲(chǔ)單元,作為規(guī)則的分布式基本點(diǎn),可以100%高效映射偏移對(duì)角矩陣的局部性,即單個(gè)子矩陣的行列維度以及非零值的規(guī)則分布。每個(gè)PE中包括16個(gè)乘法器和1個(gè)數(shù)據(jù)分配器,如圖7所示,數(shù)據(jù)分配器的作用是根據(jù)偏移量對(duì)輸入數(shù)據(jù)進(jìn)行重新排列,保證輸入數(shù)據(jù)和所對(duì)應(yīng)的非零值權(quán)重?cái)?shù)據(jù)相乘。無(wú)需在PE外進(jìn)行稀疏解碼,同時(shí)不用對(duì)部分和輸出或計(jì)算結(jié)果進(jìn)行地址索引,如圖8所示。加法單元負(fù)責(zé)將所在列PE產(chǎn)生的部分和結(jié)果或者偏置數(shù)據(jù)進(jìn)行加法運(yùn)算,如圖9所示,每個(gè)加法單元內(nèi)部配備用于緩存部分和結(jié)果的本地緩存,縮短了部分和的數(shù)據(jù)移動(dòng)距離,dense_en信號(hào)通過(guò)控制加法單元的數(shù)據(jù)源進(jìn)行密集和稀疏數(shù)據(jù)通路的切換,加法單元支持激活函數(shù)ReLU。
圖7 PE內(nèi)部結(jié)構(gòu)
圖8 運(yùn)算單元內(nèi)數(shù)據(jù)
圖9 加法單元
為了進(jìn)一步減少存儲(chǔ)成本,本文對(duì)硬件中的權(quán)重?cái)?shù)據(jù)存儲(chǔ)格式進(jìn)行了優(yōu)化。根據(jù)前文分析,運(yùn)算陣列采取權(quán)重固定的數(shù)據(jù)復(fù)用模式,所以將偏移量索引與權(quán)重?cái)?shù)據(jù)進(jìn)行同步存取,可以減少偏移量索引的讀取次數(shù)。如圖10所示,對(duì)偏移對(duì)角權(quán)重矩陣進(jìn)行向上壓縮,保留了非零數(shù)據(jù)的列索引信息,根據(jù)偏移量可以得到行索引。另外,每個(gè)子矩陣塊共用1個(gè)偏移量,可以大幅降低索引成本。這種強(qiáng)規(guī)則性的存儲(chǔ)格式在準(zhǔn)分布式存儲(chǔ)架構(gòu)上實(shí)現(xiàn)了存儲(chǔ)資源的最大化利用,避免了數(shù)據(jù)存儲(chǔ)長(zhǎng)度的不同映射到規(guī)則的存儲(chǔ)單元中帶來(lái)存儲(chǔ)資源浪費(fèi)的問(wèn)題。表1對(duì)比了現(xiàn)有稀疏矩陣存儲(chǔ)格式的存儲(chǔ)代價(jià),其中稀疏矩陣大小為[800,800],稀疏度為50%。可以看出,本文的稀疏權(quán)重?cái)?shù)據(jù)存儲(chǔ)代價(jià)最低,具有最高的存儲(chǔ)效率。因?yàn)槊總€(gè)偏移對(duì)角子矩陣中每列只有一個(gè)非零數(shù)據(jù),這樣保證了硬件加速器中的運(yùn)算單元處理相同數(shù)量的非零數(shù)據(jù),避免了稀疏剪枝可能帶來(lái)的運(yùn)算單元負(fù)載不均衡問(wèn)題。
表1 稀疏矩陣格式存儲(chǔ)代價(jià)對(duì)比
圖10 偏移對(duì)角矩陣稀疏權(quán)重存儲(chǔ)方案
4.1.1 模型壓縮實(shí)驗(yàn)結(jié)果
在本節(jié)實(shí)驗(yàn)中,使用的數(shù)據(jù)集為IWSLT-2014英語(yǔ)(En)-德語(yǔ)(De)互譯數(shù)據(jù)集,以BLEU分?jǐn)?shù)作為性能指標(biāo)。BLEU是一種用于自動(dòng)評(píng)估機(jī)器翻譯結(jié)果質(zhì)量的指標(biāo),通過(guò)比較機(jī)器翻譯結(jié)果與參考答案之間的相似度來(lái)度量翻譯質(zhì)量,是機(jī)器翻譯領(lǐng)域最常用的評(píng)估指標(biāo)之一。Transformer模型的參數(shù)設(shè)置見(jiàn)表2,剪枝實(shí)驗(yàn)基于前文中提出的偏移對(duì)角矩陣剪枝方法,對(duì)Transformer模型中的權(quán)重?cái)?shù)據(jù)分類后進(jìn)行分批剪枝。
表2 Transformer參數(shù)設(shè)置
子矩陣大小的倒數(shù)為壓縮后的參數(shù)量與壓縮前的參數(shù)量之比,如子矩陣為4時(shí)壓縮后的參數(shù)量為壓縮前的1/4,此時(shí)壓縮率為75%。在實(shí)際應(yīng)用中,模型壓縮率通常在50%以上且盡可能大,才能保證模型的輕量化以便降低實(shí)際應(yīng)用中的推理功耗和延遲,但模型壓縮率增大的同時(shí)其推理性能也在下降,需要找到一個(gè)最佳的平衡,本文從實(shí)際應(yīng)用角度以及易于硬件實(shí)現(xiàn)的角度出發(fā),使用大小分別為4和8的子矩陣進(jìn)行剪枝實(shí)驗(yàn),即壓縮率分別為75%和87.5%,子矩陣大小為2的指數(shù)便于硬件設(shè)計(jì)的規(guī)則化實(shí)現(xiàn),實(shí)驗(yàn)結(jié)果如表3-表5所示。首先對(duì)Transformer進(jìn)行訓(xùn)練獲取了基準(zhǔn)模型以及BLEU分?jǐn)?shù)(En-De為28.5,De-En為34.5)。在IWSLT-2014數(shù)據(jù)集的德英翻譯任務(wù)中,子矩陣大小為4時(shí),結(jié)合硬件友好的量化推理方法,將原始模型參數(shù)的32 bit浮點(diǎn)表示量化為8 bit整型表示,即在剪枝完成了75%的模型壓縮基礎(chǔ)上將模型再量化壓縮75%,最終的參數(shù)量壓縮率可以達(dá)到93.75%,精度損失小于1%,如表5所示。精度損失會(huì)造成翻譯質(zhì)量的下降,如語(yǔ)法語(yǔ)義等表達(dá)變差,BLEU分?jǐn)?shù)表征的是翻譯結(jié)果與參考答案的相似度,精度損失多少對(duì)翻譯任務(wù)來(lái)說(shuō)是可接受的并沒(méi)有一個(gè)具體數(shù)值定義,但原始Transformer模型的BELU分?jǐn)?shù)較優(yōu),翻譯質(zhì)量好,壓縮后的模型相比原模型損失1%以內(nèi)的精度可以認(rèn)為是對(duì)翻譯質(zhì)量沒(méi)有影響。
表3 Transformer模型(base)實(shí)驗(yàn)結(jié)果
表4 Transformer模型剪枝實(shí)驗(yàn)結(jié)果
表5 剪枝后的Transformer模型量化實(shí)驗(yàn)結(jié)果
4.1.2 分批剪枝討論
IWSLT-2014的En-De和De-En翻譯任務(wù)的分批剪枝過(guò)程如圖11所示。對(duì)于該任務(wù),采取算法1中的分批剪枝方案,可以發(fā)現(xiàn)注意力層的剪枝后的精度下降小于前饋神經(jīng)網(wǎng)絡(luò),說(shuō)明在塊大小較小情況下采用偏移對(duì)角權(quán)重矩陣不會(huì)對(duì)注意力層的性能造成較大影響。而采用塊大小為8的子矩陣會(huì)導(dǎo)致每類權(quán)重剪枝后的精度損失更明顯,尤其是前饋神經(jīng)網(wǎng)絡(luò)的第2層線性層。
圖11 分批剪枝過(guò)程的精度下降趨勢(shì)
4.1.3 與現(xiàn)有工作對(duì)比分析
本文的模型壓縮方法與現(xiàn)有研究工作的性能對(duì)比如表6所示,可以看出,在相同任務(wù)和數(shù)據(jù)集條件下,本文的壓縮率遠(yuǎn)比文獻(xiàn)[24]高;與文獻(xiàn)[13,14,23]對(duì)比,在模型壓縮率相近的情況下本文的壓縮方法性能損失較小。
表6 算法結(jié)果對(duì)比(%)
4.2.1 加速器硬件資源消耗
本實(shí)驗(yàn)的加速器設(shè)置輸入最大長(zhǎng)度為64,執(zhí)行批量大小為1的推理,在ZC706開(kāi)發(fā)版上評(píng)估所提出的加速器。時(shí)鐘頻率為200 MHz,功率為14.0 W,資源利用率報(bào)告如表7所示。
表7 資源利用報(bào)告
4.2.2 加速器單層推理效率
由于進(jìn)行翻譯任務(wù)時(shí),模型的翻譯性能以及實(shí)際翻譯的目標(biāo)語(yǔ)言的內(nèi)容影響翻譯句子長(zhǎng)度,這會(huì)改變解碼器的迭代時(shí)間。為了對(duì)比加速器的加速效果,對(duì)模型中編碼器和解碼器的子層計(jì)算延遲進(jìn)行對(duì)比,如表8所示。其中,GPU為NVIDIA V100,MHA-RL包括多頭注意層、殘差連接和層歸一化,F(xiàn)FN-RL包括前饋神經(jīng)網(wǎng)絡(luò)層、殘差連接和層歸一化。與GPU相比,本方案在計(jì)算MHA-RL和FFNRL時(shí)可以實(shí)現(xiàn)13.5倍和4.2倍的加速。與文獻(xiàn)[26]相比,本文實(shí)現(xiàn)的加速器在計(jì)算MHA-RL時(shí)的加速比例有所降低,但是在計(jì)算FFN-RL時(shí)的推理速度是文獻(xiàn)的1.24。另外,文獻(xiàn)[26]的運(yùn)算陣列使用了4 096個(gè)乘法器,而本文僅使用了1 024個(gè)乘法器,所以本文的加速器具有更高的硬件資源效率。
表8 與其他計(jì)算平臺(tái)計(jì)算時(shí)間對(duì)比
4.2.3 加速器總體硬件性能對(duì)比
本文提出的Transformer加速器與現(xiàn)有研究工作的硬件性能對(duì)比如表9所示。其中傳統(tǒng)平臺(tái)性能對(duì)比中 CPU為Intel i7-8700K, GPU為NVIDIA 1080Ti,在計(jì)算過(guò)程中執(zhí)行單批量推理,權(quán)重參數(shù)壓縮率為75%,計(jì)算性能為單批量執(zhí)行句子長(zhǎng)度為64的德英翻譯所得。與CPU相比,本文在FPGA實(shí)現(xiàn)的硬件加速器在計(jì)算性能、功耗和能效方面均有優(yōu)勢(shì),其中能效比為CPU的12.45倍。與GPU相比,計(jì)算性能略低于GPU,但是在功耗和能效方面都有優(yōu)勢(shì),其中能效比為GPU的4.17倍。
表9 加速器總體硬件性能對(duì)比
在與現(xiàn)有工作對(duì)比中,使用本文的加速器在75%壓縮率下處理了標(biāo)準(zhǔn)Transformer模型的推理,實(shí)現(xiàn)了8.4 ms的推理延遲,具體性能見(jiàn)表9。表中列出了現(xiàn)有先進(jìn)工作中FPGA加速器的性能,其中文獻(xiàn)[26]采用的模型是6層編碼器,文獻(xiàn)[13]采用的模型是1層編碼器和1層解碼器,文獻(xiàn)[14,25,23]采用的模型是標(biāo)準(zhǔn)Transformer(6層編碼器和6層解碼器)。通過(guò)吞吐量與功耗之比計(jì)算FPGA的功耗效率來(lái)進(jìn)行性能對(duì)比,以CPU的推理能效作為基準(zhǔn),由表9可以看出,本文的加速器表現(xiàn)出了較好的效率。如果文獻(xiàn)[13]采用標(biāo)準(zhǔn)Transformer進(jìn)行推理,其等效能量效率為7.43,低于本文的12.5。因此,本文加速器的功耗效率明顯高于現(xiàn)有研究工作。
針對(duì)Transformer模型在數(shù)量和結(jié)構(gòu)上的復(fù)雜性帶來(lái)的加速器設(shè)計(jì)的困難,本文研究提高模型和規(guī)則硬件匹配度,提高模型和硬件的映射效率的方法。本文研究規(guī)則模型壓縮和靈活硬件架構(gòu),設(shè)計(jì)了高性能低功耗的Transformer加速器。本文提出的規(guī)則的模型壓縮算法,采用偏移矩陣剪枝算法和簡(jiǎn)化硬件量化推理邏輯的全局量化方法,可以在精度損失小于1%的情況下將模型壓縮93.75%,并具有良好的規(guī)則性。本文提出了一個(gè)靈活的硬件架構(gòu),包括一種以塊為單元的權(quán)重固定的脈動(dòng)運(yùn)算陣列,同時(shí)參考人腦神經(jīng)元結(jié)構(gòu)提出一種準(zhǔn)分布的存儲(chǔ)架構(gòu)。獲得了100%的算法映射效率,提高了參數(shù)存儲(chǔ)效率,大幅度降低了數(shù)據(jù)移動(dòng)功耗。在FPGA上實(shí)現(xiàn)的加速器,相比于CPU和GPU能效分別提高了12.45倍和4.17倍。