大模型的模型壓縮與有效推理綜述
共 13790字,需瀏覽 28分鐘
·
2024-07-08 21:31
1 介紹
本文對(duì)大型語言模型的壓縮和效率推理進(jìn)行了綜述。大型語言模型基于Transformer架構(gòu),具有強(qiáng)大的性能,但也帶來了巨大的內(nèi)存和計(jì)算成本。本文從算法角度對(duì)大型語言模型的壓縮和效率推理方法進(jìn)行了分類,包括量化、剪枝、知識(shí)蒸餾、緊湊架構(gòu)設(shè)計(jì)和動(dòng)態(tài)網(wǎng)絡(luò)。大型語言模型有兩個(gè)顯著特點(diǎn):
(1)大多數(shù)壓縮算法需要在壓縮后對(duì)模型進(jìn)行微調(diào)和甚至重新訓(xùn)練,而大型模型的微調(diào)和訓(xùn)練成本非常高。因此,許多算法,如量化和剪枝,開始探索免調(diào)優(yōu)算法。(2)大型模型強(qiáng)調(diào)通用性和泛化能力,而非單一任務(wù)的性能。因此,許多算法,如知識(shí)蒸餾,關(guān)注如何在壓縮后保留其通用性和泛化能力。
2 基本知識(shí)
2.1 Transformer
Transformer 是一種用于機(jī)器翻譯的模型,其基本結(jié)構(gòu)如圖1所示。Transformer 的輸入(一個(gè)句子)通常通過嵌入層投影為一系列向量(稱為標(biāo)記)作為 Transformer 的輸入。
每個(gè) Transformer 塊由一個(gè)注意力模塊和一個(gè)多層感知器(MLP)模塊組成。注意力模塊將查詢和一組鍵-值對(duì)映射到輸出,輸出是值的加權(quán)和,權(quán)重由兼容性函數(shù)計(jì)算得出。注意力模塊可以描述為將查詢和鍵-值對(duì)映射到輸出的函數(shù)。兼容性函數(shù)通常是點(diǎn)積函數(shù),其中權(quán)重是查詢與相應(yīng)的鍵的點(diǎn)積,√d是縮放因子。多頭注意力將輸入標(biāo)記映射到h個(gè)不同的查詢、鍵和值({Qi,Ki,Vli∈[1,h]}),然后使用不同的線性層。最終輸出是:多頭注意力=連接(head1,…,headn)W。head;=注意力(Qi,Ki,Vi),其中Wo是線性投影矩陣。
Transformer 的編碼器和解碼器結(jié)構(gòu)有所不同。編碼器首先獨(dú)立地處理輸入序列(例如,用源語言編寫),解碼器將編碼器的輸出作為輸入并預(yù)測(cè)最終輸出(例如,目標(biāo)語言)。編碼器和解碼器的注意力模塊有兩個(gè)核心區(qū)別:(1)編碼器使用全注意力,其中輸入序列中的任何兩個(gè)標(biāo)記都是可見的,輸出標(biāo)記只能看到之前的輸出標(biāo)記;(2)編碼器使用自注意力模塊,即 Q、K、V 都來自輸入標(biāo)記的注意力,其中 K、V 來自編碼器的輸出,而 Q 是解碼器的最后一個(gè)輸出標(biāo)記。
2.2 中/大型語言模型
本文將語言模型分為中等規(guī)模和大規(guī)模兩類。中等規(guī)模的語言模型參數(shù)規(guī)模在1億以下,大規(guī)模的語言模型參數(shù)規(guī)模在1億以上。大規(guī)模的語言模型相較于中等規(guī)模的語言模型,具有更強(qiáng)的泛化能力和通用性,能夠處理更復(fù)雜的任務(wù)。然而,大規(guī)模的語言模型在壓縮和加速方面也面臨著更大的挑戰(zhàn)。
2.3 參數(shù)高效的微調(diào)(PEFT)
參數(shù)高效的微調(diào)(PEFT)是指在微調(diào)過程中盡量減少需要調(diào)整的參數(shù)數(shù)量或微調(diào)的輪數(shù),以降低微調(diào)成本。對(duì)于中等或大型模型,全參數(shù)微調(diào)和訓(xùn)練成本非常高。因此,許多參數(shù)高效的微調(diào)算法被提出,旨在盡可能減少需要調(diào)整的參數(shù)或微調(diào)的輪數(shù)。
3 量化
量化是指將輸入值從一個(gè)較大的連續(xù)集合映射到一個(gè)較小的有限集合的過程。它是降低大型語言模型內(nèi)存成本和加速推理的最直接方法,特別是在支持低比特?cái)?shù)據(jù)類型快速操作的硬件上。量化方法有許多優(yōu)點(diǎn),例如減少內(nèi)存占用、提高推理速度等。
3.1 基本概念
-
均勻量化:將實(shí)數(shù)范圍內(nèi)的連續(xù)值映射到有限數(shù)量的離散值,以減少表示數(shù)據(jù)的位數(shù)。均勻量化中,相鄰離散值之間的距離相等,且離散值是均勻分布的。 -
非均勻量化:非均勻量化是均勻量化的對(duì)立面,其中量化值不一定是均勻分布的,且量化間隔的長(zhǎng)度不一定相同。非均勻量化可以更好地適應(yīng)數(shù)據(jù)的分布,從而在保持相同精度的情況下,減少量化誤差。 -
剪切范圍和校準(zhǔn):剪切范圍是指將實(shí)數(shù)范圍內(nèi)的連續(xù)值映射到有限數(shù)量的離散值時(shí),相鄰離散值之間的距離。校準(zhǔn)是指選擇合適的剪切范圍,以最小化量化誤差,通常使用最小/最大值(即-α=rmin,β=Tmax)或使用絕對(duì)最大值化損失(即KL散度)來選擇剪切范圍。 -
對(duì)稱/非對(duì)稱量化:對(duì)稱量化和非對(duì)稱量化是量化方法的兩種類型。對(duì)稱量化是指量化范圍關(guān)于0對(duì)稱,即a=-β,此時(shí)對(duì)應(yīng)的量化方法稱為對(duì)稱量化;否則稱為非對(duì)稱量化。 -
量化粒度:量化粒度是指在量化過程中,將權(quán)重或激活值劃分為多少個(gè)組進(jìn)行量化。常見的量化粒度包括層粒度、通道粒度、組粒度等。 -
訓(xùn)練后的量化PTQ/量化感知訓(xùn)練QAT:PTQ是一種在訓(xùn)練后對(duì)模型進(jìn)行量化的方法,不需要重新訓(xùn)練模型,通常將權(quán)重和激活值量化為較低的精度,以減少模型大小和計(jì)算成本。QAT是一種在訓(xùn)練過程中對(duì)模型進(jìn)行量化的方法,旨在最小化量化引起的性能損失,通過在訓(xùn)練過程中引入量化誤差來調(diào)整模型權(quán)重,以最小化量化誤差。 -
靜態(tài)/動(dòng)態(tài)量化:靜態(tài)量化在推理過程中使用固定的量化參數(shù),而動(dòng)態(tài)量化在推理過程中根據(jù)輸入數(shù)據(jù)動(dòng)態(tài)調(diào)整量化參數(shù)。 -
模擬/僅整數(shù)量化:模擬量化在運(yùn)行時(shí)動(dòng)態(tài)調(diào)整量化參數(shù),可以減少神經(jīng)網(wǎng)絡(luò)的內(nèi)存成本和數(shù)據(jù)傳輸時(shí)間,通常比靜態(tài)量化更準(zhǔn)確,但計(jì)算開銷較高。僅整數(shù)量化可以進(jìn)一步享受特定硬件支持的高效低比特操作。 僅權(quán)重/權(quán)重+激活量化:僅權(quán)重量化只量化權(quán)重,可以進(jìn)一步享受特定硬件支持的高效低比特操作,但可能會(huì)損失一些精度。而權(quán)重+激活量化同時(shí)量化權(quán)重和激活,可以更好地適應(yīng)輸入數(shù)據(jù)的分布,但計(jì)算速度較慢。
3.2 中型語言模型的量化方法
本節(jié)主要討論了中型語言模型的量化方法,小于或接近1B大小的模型被稱為中型語言模型,如BERT、GPT-2和BART。
量化方法主要采用QAT框架而不是PTQ,因?yàn)橹匦掠?xùn)練中型語言模型的代價(jià)相對(duì)可以接受。重新訓(xùn)練帶來的評(píng)估指標(biāo)(例如精度)的改進(jìn)是顯著的,特別是在極端低比特設(shè)置(例如1比特或2比特量化)下。
中等規(guī)模語言模型中的QAT。QAT是一種在訓(xùn)練過程中引入量化誤差的方法,可以在不損失模型性能的情況下實(shí)現(xiàn)模型壓縮。QAT技術(shù)在中等規(guī)模語言模型中的應(yīng)用主要體現(xiàn)在將BERT類模型中的權(quán)重向量化到INT8,例如Q8BERT將BERT模型中的權(quán)重和激活都量化為8位,而沒有顯著降低模型性能。有些工作使用更復(fù)雜的方法實(shí)現(xiàn)了低于8位的量化寬度,例如Q-BERT將激活保持在8位,并將混合精度權(quán)重降低到2/3位。TernaryBERT將權(quán)重限制在-1,0和+1之間,僅使用2位,并使用8位的激活。BinaryBERT將BERT的量化限制為權(quán)重二值化,即權(quán)重限制在{-α,+α}中。BiBERT是BERT的全二進(jìn)制化(即1位權(quán)重、嵌入和激活)。一些工作在模型性能退化和量化位寬之間實(shí)現(xiàn)了自動(dòng)平衡,例如趙等人利用可微神經(jīng)架構(gòu)搜索方法來自動(dòng)分配參數(shù)的精度。
中等規(guī)模語言模型中的PTQ。PTQ(Post-Training Quantization)是一種在訓(xùn)練后對(duì)模型進(jìn)行量化的方法。PTQ不需要重新訓(xùn)練整個(gè)模型,而是通過在訓(xùn)練后引入量化誤差來實(shí)現(xiàn)模型壓縮。GOBO將大多數(shù)權(quán)重進(jìn)行3位量化,少數(shù)異常權(quán)重單獨(dú)保存為FP32。I-BERT為特定的非線性函數(shù)設(shè)計(jì)了僅整數(shù)近似的方法,無需任何浮點(diǎn)運(yùn)算即可實(shí)現(xiàn)端到端僅整數(shù)BERT推斷。Dai等使用更精細(xì)的粒度來減少量化誤差,將權(quán)重和激活量化為4位,并使用校準(zhǔn)集來確定每個(gè)組的縮放因子。此外,精心定制的PTQ方法所得到的量化參數(shù),可以作為QAT方法重新訓(xùn)練的一個(gè)良好的初始化點(diǎn)。
量化生成的中型語言模型。盡管對(duì)BERT類模型進(jìn)行量化的方法取得了成功,但在生成語言模型(如GPT、BART)出現(xiàn)之前,對(duì)生成式LLM進(jìn)行量化的嘗試卻很少見。量化誤差在token-by-token生成過程中逐個(gè)累積,因此量化生成式語言模型通常是一個(gè)更復(fù)雜的問題。Tao等人的研究發(fā)現(xiàn),直接將專為BERT類模型設(shè)計(jì)的量化方法應(yīng)用于生成語言模型會(huì)受到同質(zhì)詞嵌入和權(quán)重分布差異的阻礙。為了解決這些挑戰(zhàn),作者提出了兩個(gè)解決方案:token級(jí)別的對(duì)比性引導(dǎo)和模塊依賴的動(dòng)態(tài)縮放。DQ-BART使用QAT框架和一種序列到序列模型的量化和去噪訓(xùn)練目標(biāo),即BART,進(jìn)行去噪訓(xùn)練。DQ-BART采用標(biāo)準(zhǔn)對(duì)稱均勻量化,并設(shè)定訓(xùn)練目標(biāo)為最小化量化后的低精度學(xué)生模型和全精度教師模型之間的輸出logits、注意力以及隱藏狀態(tài)之間的差異。
3.3 LLM的PTQ
針對(duì)LLM的PTQ工作分為兩類:僅權(quán)重量化和權(quán)重+激活量化
僅權(quán)重量化(Weight-Only Quantization)只對(duì)模型的權(quán)重進(jìn)行量化,以減小模型大小,降低內(nèi)存占用和計(jì)算成本。權(quán)重量化方法可分為有符號(hào)量化和無符號(hào)量化,通常采用量化誤差最小化的方法。基于訓(xùn)練后量化的方法在訓(xùn)練完成后對(duì)權(quán)重進(jìn)行量化,而基于量化感知訓(xùn)練的方法在訓(xùn)練過程中對(duì)權(quán)重進(jìn)行量化。權(quán)重量化方法可以實(shí)現(xiàn)不同程度的模型壓縮,例如,GPTQ和QulP等方法可以將權(quán)重量化為2位或更低的精度,從而顯著降低內(nèi)存占用和計(jì)算成本。
權(quán)重+激活量化是一種深度學(xué)習(xí)模型壓縮方法,通過將權(quán)重和激活值轉(zhuǎn)換為較低精度表示,減少模型大小和計(jì)算復(fù)雜度。這種方法在移動(dòng)端推理、邊緣計(jì)算、嵌入式系統(tǒng)等領(lǐng)域具有廣泛應(yīng)用,可以顯著提高推理速度、降低存儲(chǔ)空間需求和減小計(jì)算復(fù)雜度。具體實(shí)現(xiàn)方法包括二值化量化、8位量化、自適應(yīng)量化等。
3.4 對(duì)LLM的量化感知訓(xùn)練(QAT)
量化感知訓(xùn)練是一種重新訓(xùn)練量化模型的方法,用于從量化引起的性能下降中恢復(fù)。這種方法通常涉及整個(gè)模型的全部參數(shù)重新訓(xùn)練,但對(duì)于LLM來說成本太高。因此,一些嘗試將量化與參數(shù)高效的訓(xùn)練方法相結(jié)合,以顯著降低LLM上QAT的成本。當(dāng)前針對(duì)LLM的QAT方法分為兩類:全參數(shù)重新訓(xùn)練和參數(shù)-高效再訓(xùn)練。其中,參數(shù)-高效再訓(xùn)練是一種更有效的LLM QAT方法。
全參數(shù)重新訓(xùn)練是指在量化 LLM 時(shí),對(duì) LLM 進(jìn)行完整的參數(shù)重新訓(xùn)練。這種方法的主要挑戰(zhàn)是如何在不損害 LLM 的涌現(xiàn)能力的情況下,在較小的數(shù)據(jù)集上重新訓(xùn)練 LLM。當(dāng)前的方法通常結(jié)合 QAT 和蒸餾來保留原始模型的這些能力。LLM-QAT 直接應(yīng)用基本的 QAT 框架到 LLM,并使用數(shù)據(jù)生成方法生成數(shù)據(jù),然后使用原始 LLM 對(duì)生成的數(shù)據(jù)進(jìn)行訓(xùn)練,以匹配量化 LLM 的輸出分布。這種方法還允許量化和 QAT 鍵值緩存,這在長(zhǎng)句生成過程中占用大量?jī)?nèi)存。為了減輕重新訓(xùn)練完整 LLM 的成本,可以使用邊緣蒸餾方法。
參數(shù)-高效再訓(xùn)練是指采用參數(shù)高效的方法重新訓(xùn)練LLM。本節(jié)討論了使用LoRA、適配器、提示調(diào)整等方法對(duì)LLM進(jìn)行微調(diào)的一系列工作。其中,LoFTQ和LACos-BLOOM等提出了改進(jìn)的量化方法,而INT2.1則將額外的可訓(xùn)練參數(shù)用于LoRA矩陣的優(yōu)化。其他工作則結(jié)合了量化和適配器以及提示調(diào)整等方法。這些工作有助于提高LLM的性能和效率。
3.5 關(guān)于LLM量化的其他主題
量化相關(guān)工作還包括與量化的算法共同設(shè)計(jì)高效的內(nèi)核,設(shè)計(jì)對(duì)硬件友好的量化方法,并將量化方法集成到實(shí)際應(yīng)用中。例如,LUT-GEMM是為擴(kuò)展版本的BCQ方法設(shè)計(jì)的有效內(nèi)核,可以表示均勻和非均勻量化。其他有意義的作品研究LLM量化的內(nèi)在特性,例如,Dettmers和Zettlemoyer在BLOOM、OPT、NeoX/Pythia和GPT-2等LLM家族中進(jìn)行了大規(guī)模實(shí)驗(yàn),使用16位激活和k位權(quán)重的組合(3≤k≤8),規(guī)模為19M到176B參數(shù)。一些工作還專注于研究LLMs中出現(xiàn)系統(tǒng)性異常值的原因,并尋找從源頭抑制異常值的方法。例如,可量化變壓器認(rèn)為激活中的異常值是由于注意力頭部的行為,注意力頭部試圖避免更新殘差。
4 剪枝
神經(jīng)網(wǎng)絡(luò)剪枝是一種用于壓縮和加速的技術(shù),通過消除非必要的權(quán)重或結(jié)構(gòu)來保持網(wǎng)絡(luò)性能水平。盡管剪枝在CNN中顯示出顯著效果,但在LLMs中效果不太穩(wěn)定。剪枝效果不那么有效的原因在于微調(diào)成本高昂,但剪枝對(duì)于模型壓縮至關(guān)重要,需要進(jìn)一步探索以增強(qiáng)和改進(jìn)其效果。剪枝技術(shù)對(duì)于LLMs的優(yōu)化和性能提升具有重要意義。
4.1 基本概念
-
剪枝單元:剪枝單元在剪枝過程中起到關(guān)鍵作用,包括權(quán)重、神經(jīng)元、注意力頭、層等。非結(jié)構(gòu)化剪枝關(guān)注單個(gè)權(quán)重,可以獲得更高的稀疏度比并保持更好的性能,但計(jì)算效率較低。結(jié)構(gòu)化剪枝可以輕松實(shí)現(xiàn)推理速度提升,但稀疏度比低于非結(jié)構(gòu)化剪枝模型。在結(jié)構(gòu)化剪枝中,需要避免集成結(jié)構(gòu)刪除導(dǎo)致模型性能下降。 -
剪枝度量:剪枝度量是決定元素是否被剪枝的準(zhǔn)則,主要分為三類:基于幅度、基于損失和基于正則化。基于幅度的剪枝方法通過比較權(quán)重的絕對(duì)值確定重要性;基于損失的方法通過比較權(quán)重的梯度或梯度加權(quán)和確定重要性;基于正則化的方法通過比較權(quán)重的L1或L2范數(shù)確定重要性。這些方法可單獨(dú)或組合使用,如GBLM-Pruner結(jié)合了基于幅度和基于正則化的方法以獲得更好的剪枝效果。 -
動(dòng)態(tài)/靜態(tài)剪枝:動(dòng)態(tài)/靜態(tài)剪枝是指在訓(xùn)練過程中對(duì)模型進(jìn)行剪枝的方法。動(dòng)態(tài)剪枝在訓(xùn)練過程中實(shí)時(shí)調(diào)整模型結(jié)構(gòu),適應(yīng)數(shù)據(jù)分布的變化,但計(jì)算復(fù)雜度較高;靜態(tài)剪枝在訓(xùn)練結(jié)束后一次性剪枝,計(jì)算復(fù)雜度較低,但可能無法充分利用數(shù)據(jù)分布的信息。 -
迭代/一次性剪枝:迭代式方法通過多次迭代訓(xùn)練、剪枝和微調(diào),保持模型性能,但計(jì)算時(shí)間長(zhǎng)。一次性方法只進(jìn)行一次剪枝,不迭代和微調(diào),計(jì)算時(shí)間短,但可能影響模型性能。迭代式方法常用于較小模型,一次性方法常用于較大模型。 -
全局/局部剪枝:全局剪枝將比較所有剪枝單元,以識(shí)別并消除不重要的單元,可能導(dǎo)致特定區(qū)域過度剪枝。局部剪枝則對(duì)每個(gè)區(qū)域的稀疏性施加約束,確保每個(gè)區(qū)域內(nèi)的稀疏度比率不會(huì)過低,從而降低模型崩潰的風(fēng)險(xiǎn)。 -
數(shù)據(jù)驅(qū)動(dòng)和免數(shù)據(jù)裁剪:數(shù)據(jù)驅(qū)動(dòng)和免數(shù)據(jù)裁剪是兩種不同的網(wǎng)絡(luò)裁剪方法,數(shù)據(jù)驅(qū)動(dòng)依賴于可用數(shù)據(jù),表現(xiàn)更優(yōu),而免數(shù)據(jù)裁剪獨(dú)立于數(shù)據(jù)輸入執(zhí)行網(wǎng)絡(luò)裁剪。Magnitude Pruning是最廣泛采用的裁剪方法,簡(jiǎn)單易實(shí)現(xiàn)且在許多復(fù)雜方法中取得了具有競(jìng)爭(zhēng)力的結(jié)果,同時(shí)解決了在某些場(chǎng)景下數(shù)據(jù)集可能不可用的挑戰(zhàn)。 上/下游剪枝:語言模型訓(xùn)練包括預(yù)訓(xùn)練和微調(diào)兩個(gè)階段。上游修剪在微調(diào)前對(duì)模型進(jìn)行修剪,保留模型對(duì)多種任務(wù)的適應(yīng)性,確保其多功能性;下游修剪在微調(diào)過程中進(jìn)行修剪,指導(dǎo)模型專注于一個(gè)明確的任務(wù)。兩者各有特點(diǎn),根據(jù)實(shí)際需求選擇合適的方法。
4.2 中型語言模型的剪枝方法
針對(duì)語言模型的專業(yè)設(shè)計(jì)剪枝方法具有獨(dú)特性,不同于傳統(tǒng)的剪枝方法。它專門針對(duì)基于轉(zhuǎn)換器的模型和適用于多種不同架構(gòu)模型的通用方法。這些剪枝方法可分為無結(jié)構(gòu)方法和結(jié)構(gòu)化方法。
4.2.1 針對(duì)中型語言模型的非結(jié)構(gòu)化剪枝
非結(jié)構(gòu)剪枝方法在不考慮約束的情況下,將非必要權(quán)重置為零。接下來介紹了三種修剪方法:基于規(guī)模的剪枝、基于損失的剪枝和正則化。這些技術(shù)有助于減少模型參數(shù)數(shù)量,提高模型性能和效率。
基于規(guī)模的剪枝是指根據(jù)模型的大小來選擇合適的剪枝方法。基于規(guī)模的剪枝方法,將權(quán)重的規(guī)模和激活值的規(guī)模納入到剪枝度量中,其中幅度修剪是最常用的方法,在研究中被應(yīng)用于中型語言模型。Gordon等人通過幅度修剪壓縮BERT,結(jié)果表明約30-40%的權(quán)重是不必要的,丟棄不會(huì)影響B(tài)ERT的性能。漸變幅度修剪和GMP?等方法引入了稀疏度比例計(jì)劃,在整個(gè)修剪過程中逐漸降低稀疏度比例,這種方法允許在隨后的修剪步驟中更多的恢復(fù)時(shí)間,最終導(dǎo)致性能改善。
基于損失的剪枝是一種通過分析權(quán)重對(duì)損失函數(shù)的貢獻(xiàn)來確定哪些權(quán)重可以被剪枝的方法。它通常比基于權(quán)重大小的剪枝方法更準(zhǔn)確,因?yàn)樗紤]了權(quán)重在特定任務(wù)中的重要性。基于損失的剪枝主要有兩種方法:基于梯度的剪枝和基于Hessian矩陣的剪枝。基于梯度的剪枝包括OBD和OBS等,基于Hessian矩陣的剪枝包括L-OBS和L-OBD等。這些方法在語言模型剪枝中取得了很好的效果,例如SparseGPT和LLM Surgeon方法。
正則化方法包括L1、L2和Lo正則化,其中Lo正則化在模型壓縮中更常用。Lo正則化將權(quán)重的Lo范數(shù)納入損失函數(shù),實(shí)現(xiàn)非零權(quán)重的稀疏化。然而,離散的Lo范數(shù)在梯度下降優(yōu)化中存在挑戰(zhàn),因此使用硬混凝土分布作為二進(jìn)制掩碼的近似,如圖4。
其他。非結(jié)構(gòu)剪枝方法與N:M稀疏性集成,可以解決稀疏矩陣的非規(guī)則性質(zhì)帶來的挑戰(zhàn),提供純非結(jié)構(gòu)化方法可能缺乏的推理速度提升。N:M稀疏性原則要求在神經(jīng)網(wǎng)絡(luò)中連續(xù)的M組權(quán)重中,不超過N個(gè)權(quán)重具有非零值,底層硬件可以壓縮經(jīng)常出現(xiàn)的零值,實(shí)現(xiàn)推理加速。這種方法在保持模型性能的同時(shí),顯著提高了計(jì)算速度。
4.2.2 針對(duì)中型語言模型的結(jié)構(gòu)化剪枝
無結(jié)構(gòu)剪枝方法雖然能實(shí)現(xiàn)高稀疏度并保持性能,但不一定能在普通硬件上實(shí)現(xiàn)推理加速。在應(yīng)用于中型語言模型的有序剪枝方法中,選擇適當(dāng)?shù)募糁挝慌c度量同樣重要。使用與模型架構(gòu)相關(guān)的結(jié)構(gòu)作為剪枝單元往往能產(chǎn)生更理想的結(jié)果。接下來將深入探討結(jié)構(gòu)化剪枝的領(lǐng)域,包括基于權(quán)重的剪枝、基于損失的剪枝和正則化技術(shù)。
基于權(quán)重的剪枝。修剪單元權(quán)重的加權(quán)和可以作為有意義的表示,廣泛應(yīng)用于CNN中的卷積核。該方法也可擴(kuò)展到中型語言模型,例如通過將權(quán)重大小與L2范數(shù)加權(quán)和,表示注意力頭、FFN神經(jīng)元和權(quán)重塊的重要性。然后,根據(jù)重要性得分排序,去除不重要的結(jié)構(gòu)。
基于損失的剪枝。在基于損失的剪枝方法中,對(duì)注意力頭部的探索和分析得到了相當(dāng)?shù)年P(guān)注。頭部剪枝方法可以顯著提高模型性能和推理速度,同時(shí)保持測(cè)試準(zhǔn)確性。此外,塊移動(dòng)修剪方法通過考慮任意大小的塊并集成到運(yùn)動(dòng)修剪中來擴(kuò)展結(jié)構(gòu)方法,同時(shí)與FFN中神經(jīng)元修剪的組合可以獲得最佳的整體性能。此外,一些結(jié)構(gòu)化剪枝方法可以泛化,因?yàn)槠渲械募糁卧巧窠?jīng)元。
正則化。正則化方法包括L0和L1正則化。其中,L0正則化因其廣泛的應(yīng)用而脫穎而出,而L1正則化也得到了相關(guān)研究。這些方法主要應(yīng)用于注意力頭的剪枝,包括因子化低秩剪枝、粗粒度和細(xì)粒度剪枝等。這些方法通過結(jié)合稀疏性誘導(dǎo)的目標(biāo)學(xué)習(xí)得到不同大小的剪枝模型,并可以通過微調(diào)提高性能。這些方法在實(shí)驗(yàn)中實(shí)現(xiàn)了超過10倍的速度提升,同時(shí)精度只略有下降。
其他。結(jié)構(gòu)化修剪還有層修剪、令牌修剪等方法。層修剪涉及在推理過程中刪除不重要的令牌以減少計(jì)算需求。學(xué)習(xí)令牌剪枝是一種直接有效的方法,根據(jù)輸入序列穿過轉(zhuǎn)換器層的情況來適當(dāng)?shù)貏h除不重要令牌。每個(gè)令牌的剪枝度量由Transformer塊中歸一化注意力概率的總和確定。此外,還有譜歸一化身份先驗(yàn)(SNIP)等單元,它采取策略來剪枝注意力層和FFN子層。這些方法有助于減少計(jì)算需求并提高模型性能。
4.3 LLM的修剪方法
本節(jié)介紹了針對(duì)LLM的剪枝方法,包括其順序和特點(diǎn),并進(jìn)行了全面的比較。這些方法采用與中等規(guī)模語言模型所使用的并行方法相同的方法,但省略了微調(diào)過程。表3總結(jié)了LLM的各種修剪方法,這些方法在LLM領(lǐng)域具有廣泛的應(yīng)用前景。
4.3.2 LLM的非結(jié)構(gòu)化剪枝
非結(jié)構(gòu)剪枝方法在保持模型性能方面具有優(yōu)勢(shì),能夠?qū)崿F(xiàn)50%的稀疏度比率,被廣泛用作后續(xù)方法的基準(zhǔn)。后續(xù)方法在NLP任務(wù)中超越了這些方法,取得了優(yōu)越的結(jié)果。雖然這些方法難以提高推理速度,但它們可以與N:M稀疏性結(jié)合以加速推理速度。這些方法需要最少的校準(zhǔn)數(shù)據(jù),即對(duì)模型的一次前向傳遞專門獲取激活值或梯度以計(jì)算權(quán)重的重要性。LLM的非結(jié)構(gòu)化剪枝可分為基于規(guī)模的剪枝方法和基于損失的剪枝方法。
基于規(guī)模的剪枝方法將權(quán)重幅度和激活值結(jié)合作為剪枝度量。例如,Wanda和RIA使用權(quán)重幅度和激活度量,E-Sparse還引入信息熵到度量中。Wanda引入一種新穎的修剪度量,同時(shí)考慮了權(quán)重和激活值的幅度,認(rèn)為權(quán)重的意義不應(yīng)該孤立地評(píng)估,而應(yīng)該考慮它與相應(yīng)激活值的產(chǎn)品。RIA也同時(shí)考慮權(quán)重和激活,主要區(qū)別在于其緩解通道腐敗的方法,用相對(duì)重要性取代了權(quán)重的幅度。E-Sparse引入了隱藏狀態(tài)特征的信息熵到剪枝度量中,熵作為信息豐富度的度量,數(shù)值越高表示信息越豐富。
基于損失的剪枝方法包括二階和一階方法。其中,SparseGPT是一種高效的二階剪枝方法,將OBS技術(shù)融入GPT家族模型中,并使用稀疏性比率分配給每個(gè)權(quán)重矩陣。此外,還介紹了基于OBS和OBD的概念,以及一種新型剪枝度量ISC。一階方法中,GBLM-Pruner是一種基于梯度的語言模型剪枝方法,通過與權(quán)重的幅度以及不同樣本的相應(yīng)梯度的歸一化相乘來定義權(quán)重。
4.3.3 LLM的結(jié)構(gòu)化剪枝
LLM的結(jié)構(gòu)剪枝方法不依賴硬件,能加速推理,但需微調(diào)以恢復(fù)性能。LLM-Pruner作為基準(zhǔn),促進(jìn)比較。微調(diào)雖在非結(jié)構(gòu)剪枝中不再使用,但LLM中仍廣泛采納。LLM的結(jié)構(gòu)化剪枝涵蓋基于規(guī)模的剪枝、基于損失的剪枝和正則化。
基于規(guī)模的剪枝方法考慮行或列作為剪枝單位。例如,基于波動(dòng)自適應(yīng)結(jié)構(gòu)化剪枝(FLAP)的剪枝單位是列。權(quán)重矩陣中每個(gè)列的重要性得分通過“波動(dòng)度量”來測(cè)量,該度量是輸入特征的樣本方差,其中權(quán)重與權(quán)重矩陣相應(yīng)列的平方范數(shù)相關(guān)聯(lián)。此外,F(xiàn)LAP還納入了旨在減輕組件刪除所產(chǎn)生的負(fù)面影響偏差補(bǔ)償機(jī)制,以消除微調(diào)的必要性。
基于損失的剪枝方法中,梯度信息至關(guān)重要。一些方法利用梯度信息來定義剪枝結(jié)構(gòu)、選擇剪枝目標(biāo)等。其中一些方法可以動(dòng)態(tài)地識(shí)別和指定剪枝單元,如LLM-Pruner和LoRAShear。此外,Ji等人提出了一種新穎的方法,使用非神經(jīng)模型作為精度預(yù)測(cè)器來自動(dòng)識(shí)別最佳修剪模型。這種方法通過評(píng)估和預(yù)測(cè)不同修剪配置對(duì)神經(jīng)網(wǎng)絡(luò)精度的沖擊,促進(jìn)更有效和自動(dòng)化的最佳修剪模型選擇。這些方法在保持模型性能的同時(shí)實(shí)現(xiàn)高稀疏比率具有挑戰(zhàn)性。
正則化方法包括剪枝LLaMA和Compresso。剪枝LLaMA通過聯(lián)合修剪粗粒度和細(xì)粒度模塊,引入了目標(biāo)結(jié)構(gòu)剪枝和動(dòng)態(tài)批量加載兩個(gè)新穎組件,實(shí)現(xiàn)了緊湊替代方案并優(yōu)于從頭開始訓(xùn)練的模型。Compresso將LoRA集成到L0正則化中,通過協(xié)作剪枝范式提高LLM在剪枝過程中的理解和合作,從而提高性能并適應(yīng)修改后的模型結(jié)構(gòu)。
4.4 關(guān)于LLM剪枝的其他主題
提高LLM的剪枝效率。為了增強(qiáng)針對(duì)LLMs的定制修剪方法的有效性,開發(fā)出了幾種輔助技術(shù),包括針對(duì)子區(qū)域定制的稀疏性比率、后修剪微調(diào)方法和硬件優(yōu)化。其中一種定制稀疏比率的方法是“離群加權(quán)分層稀疏”(OWL),它引入了一套定制的非均勻分層稀疏比率。另一種后修剪微調(diào)方法是“動(dòng)態(tài)稀疏無訓(xùn)練”,它無需完整的微調(diào)過程即可進(jìn)一步細(xì)化稀疏LLM。這些技術(shù)可以提高現(xiàn)有剪枝方法(如Wanda和SparseGPT)的性能,表明剪枝性能的潛在提升可以通過各種與剪枝方法核心無關(guān)的手段實(shí)現(xiàn)。
LLM剪枝的未來工作。LLM剪枝領(lǐng)域面臨兩個(gè)重要挑戰(zhàn),一是將剪枝與其他方法結(jié)合以提高性能,二是微調(diào)成本高。科研人員和從業(yè)人員需應(yīng)對(duì)無法執(zhí)行完整微調(diào)的挑戰(zhàn),特別是當(dāng)處理旨在增強(qiáng)剪枝性能的LLM時(shí)。解決這些挑戰(zhàn)對(duì)于提高剪枝技術(shù)的有效性和實(shí)用性至關(guān)重要。
5 知識(shí)蒸餾(KD)
知識(shí)蒸餾是一種將教師模型的知識(shí)轉(zhuǎn)移給學(xué)生模型的技術(shù),用于壓縮和加速模型,以更簡(jiǎn)潔和更有效的方式表示教師模型的知識(shí)。
5.1 基本概念
-
Logit-based KD 是一種基于輸出概率的知識(shí)蒸餾方法,它通過最小化學(xué)生模型和教師模型之間的輸出概率差異來實(shí)現(xiàn)知識(shí)傳遞。這種方法通常使用 KL 散度作為損失函數(shù),將教師模型的輸出概率作為目標(biāo),引導(dǎo)學(xué)生模型學(xué)習(xí)教師模型的輸出分布。這種方法的優(yōu)點(diǎn)是可以直接優(yōu)化模型輸出,避免引入額外的中間表示。 -
Feature-based KD 是一種基于特征的知識(shí)蒸餾方法,它通過匹配教師模型和學(xué)生模型的輸出特征來傳遞知識(shí)。這種方法要求學(xué)生模型不僅要知道結(jié)果,還要理解底層過程。 -
Relation-based KD 是一種基于關(guān)系的知識(shí)蒸餾方法,它旨在讓學(xué)生模型學(xué)習(xí)教師模型如何處理關(guān)系型知識(shí)。這種關(guān)系主要體現(xiàn)在兩個(gè)方面:同一樣本在不同層的輸出關(guān)系和不同樣本的輸出關(guān)系。 Black-box KD 是一種黑盒知識(shí)蒸餾方法,它不需要訪問教師模型的內(nèi)部信息,而是通過教師模型的預(yù)測(cè)結(jié)果來傳遞知識(shí)。這種方法適用于大型模型的知識(shí)蒸餾,因?yàn)榇笮湍P偷膬?nèi)部信息通常是不可訪問的。黑盒知識(shí)蒸餾的損失函數(shù)通常包括預(yù)測(cè)損失和關(guān)系損失兩部分,其中預(yù)測(cè)損失用于衡量學(xué)生模型和教師模型預(yù)測(cè)結(jié)果的差異,關(guān)系損失用于衡量學(xué)生模型和教師模型在處理關(guān)系型知識(shí)時(shí)的差異。黑盒知識(shí)蒸餾的主要優(yōu)點(diǎn)是可以更好地模擬教師模型的行為,但缺點(diǎn)是需要更多的計(jì)算資源。
5.2 中等規(guī)模語言模型的知識(shí)蒸餾方法
中等規(guī)模的語言模型基于transformer結(jié)構(gòu),通過預(yù)訓(xùn)練和微調(diào)兩個(gè)階段進(jìn)行訓(xùn)練。預(yù)訓(xùn)練階段使用大規(guī)模的無標(biāo)簽數(shù)據(jù)集,學(xué)習(xí)語言的通用特征和結(jié)構(gòu);微調(diào)階段使用帶標(biāo)簽的數(shù)據(jù),使其適應(yīng)特定任務(wù)。模型蒸餾可分為微調(diào)蒸餾和預(yù)訓(xùn)練蒸餾兩類。表4展示了各種中等規(guī)模模型蒸餾方法的訓(xùn)練階段、知識(shí)來源和損失函數(shù)。
微調(diào)蒸餾計(jì)算成本高,因此提出了許多微調(diào)知識(shí)蒸餾方法來減少成本。預(yù)訓(xùn)練蒸餾可以減少針對(duì)特定任務(wù)的計(jì)算成本,但帶來新的挑戰(zhàn)。教師模型比學(xué)生模型具有更大的容量和更強(qiáng)的表示能力,學(xué)生模型在大量開放域訓(xùn)練數(shù)據(jù)上產(chǎn)生與教師模型匹配的預(yù)測(cè)是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。因此,選擇預(yù)訓(xùn)練蒸餾和微調(diào)蒸餾之間的通用方法取決于如何在模型大小和性能之間進(jìn)行權(quán)衡。
5.3 大語言模型的知識(shí)蒸餾方法
大型語言模型數(shù)量不斷增加,但許多模型是閉源的,這限制了學(xué)生模型的知識(shí)獲取。通過利用教師模型的響應(yīng),即知識(shí)剩余來源,我們可以將信息傳遞給學(xué)生模型,實(shí)現(xiàn)知識(shí)蒸餾。根據(jù)學(xué)生模型的知識(shí)來源是否僅限于教師模型提供的答案,可以將大型語言模型的知識(shí)蒸餾分為黑盒蒸餾和白盒蒸餾。黑盒蒸餾適用于學(xué)生模型可以從教師模型響應(yīng)之外的其他來源獲取知識(shí)的場(chǎng)景,而白盒蒸餾適用于學(xué)生模型只能從教師模型響應(yīng)中獲取知識(shí)的場(chǎng)景。
黑盒知識(shí)蒸餾。研究人員發(fā)現(xiàn),當(dāng)模型的參數(shù)足夠大時(shí),LLMs表現(xiàn)出涌現(xiàn)能力,能夠處理復(fù)雜的任務(wù)。黑箱蒸餾方法利用這種能力,通常使用三種常見的方法:指令跟隨、思想鏈和上下文學(xué)習(xí)。此外還有還有其他方法生成特定的強(qiáng)化數(shù)據(jù)集,例如使用符號(hào)知識(shí)折衷為常識(shí)模型獲得高質(zhì)量的常識(shí)知識(shí)圖譜,DISCO使用LLM獲取反事實(shí)數(shù)據(jù)并過濾以獲得高質(zhì)量數(shù)據(jù)集以提高學(xué)生在NLI任務(wù)中的能力,PubMedBERT提出了一種全新框架處理不良事件實(shí)體和ADE關(guān)系提取,以及Promptmix使用LLM根據(jù)比例混合和重新標(biāo)記文本數(shù)據(jù)用于分類問題以獲得更強(qiáng)大的訓(xùn)練數(shù)據(jù)集。
白盒知識(shí)蒸餾。白盒蒸餾的研究工作相對(duì)較少,但仍有一些探索。MINILLM和GKD等模型專注于損失函數(shù),并使用反向KL散度來幫助學(xué)生從教師分布中學(xué)習(xí)。此外,Padmanabhan等人通過提示語言模型生成轉(zhuǎn)移集,使學(xué)生的分布與轉(zhuǎn)移集上的教師分布相匹配。TSLD利用判別概率表征進(jìn)行標(biāo)記化,以減少在應(yīng)用QAT時(shí)引入的錯(cuò)誤。MiniMA發(fā)現(xiàn)當(dāng)學(xué)生模型的大小約為教師模型參數(shù)數(shù)量的40%時(shí),最佳的蒸餾效果會(huì)出現(xiàn)。這些方法都旨在幫助學(xué)生訓(xùn)練,并利用教師提供的信息來增強(qiáng)學(xué)生的表達(dá)能力。
6 緊湊架構(gòu)設(shè)計(jì)
緊湊架構(gòu)設(shè)計(jì)是一種提高效率和精簡(jiǎn)的理念,通過優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)和算法,顯著提高模型效率,同時(shí)減少計(jì)算資源和內(nèi)存的使用。它可分為微觀和宏觀兩個(gè)層次進(jìn)行研究,重點(diǎn)優(yōu)化注意力計(jì)算和Transformer架構(gòu)設(shè)計(jì)。
6.1 高效注意力
Transformer中的標(biāo)準(zhǔn)自注意力機(jī)制時(shí)空復(fù)雜度為O(N2),阻礙了處理長(zhǎng)序列問題的能力。為了解決這個(gè)問題,出現(xiàn)了高效注意力工作,包括稀疏注意力、線性近似注意力和閃存注意力等。
稀疏注意力方法允許每個(gè)標(biāo)記只關(guān)注局部或主要相關(guān)的項(xiàng),從而實(shí)現(xiàn)稀疏注意力模式,從而降低計(jì)算和內(nèi)存需求。稀疏注意力方法可以分為基于全局、基于窗口和基于數(shù)據(jù)三種方法。基于全局的方法包括全局注意力、基于窗口的方法包括局部注意力和固定注意力模式,基于數(shù)據(jù)的方法包括隨機(jī)注意力和數(shù)據(jù)驅(qū)動(dòng)的稀疏注意力。
線性近似注意力方法以解決標(biāo)準(zhǔn)注意力計(jì)算中存在的二次時(shí)間復(fù)雜度問題。線性近似注意力計(jì)算方法可以分為基于關(guān)聯(lián)性和低秩的方法。基于關(guān)聯(lián)性的方法通過計(jì)算 KTV 并利用軟最大化實(shí)現(xiàn)線性注意力,而低秩方法則通過將 QKT 分解為低秩矩陣實(shí)現(xiàn)線性注意力。
6.2 神經(jīng)架構(gòu)搜索(NAS)
NAS是一種通過搜索算法自動(dòng)尋找最優(yōu)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的方法。這種方法可以避免手動(dòng)設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的繁瑣過程,并且能夠找到在特定任務(wù)上表現(xiàn)更好的模型結(jié)構(gòu)。HAT 是一種神經(jīng)架構(gòu)搜索方法,它通過構(gòu)建一個(gè) Super Transformer 來近似包含搜索空間中的所有 Sub Transformer 模型,并通過延遲預(yù)測(cè)器預(yù)測(cè)延遲,從而加速搜索過程。這種方法可以避免昂貴的重新訓(xùn)練,并且可以觀察到一些重要的性質(zhì)。
7 動(dòng)態(tài)網(wǎng)絡(luò)(DyNN)
動(dòng)態(tài)網(wǎng)絡(luò)(DyNN)是一種在資源受限環(huán)境下處理大型語言模型(LLM)的方法,它只使用網(wǎng)絡(luò)的一部分來處理每個(gè)輸入,從而降低計(jì)算和內(nèi)存需求。在自然語言處理(NLP)和LLM領(lǐng)域,當(dāng)前的DyNN研究主要包括三種方法:早期退出、級(jí)聯(lián)推理和混合專家(MoE)。早期退出旨在在深度神經(jīng)網(wǎng)絡(luò)的早期層動(dòng)態(tài)終止推理過程,以減少響應(yīng)時(shí)間。級(jí)聯(lián)推理將模型分解為多個(gè)子模型,每個(gè)子模型處理輸入序列的不同部分。混合專家將模型分解為多個(gè)專家,每個(gè)專家處理輸入序列的不同部分。這些方法可以結(jié)合其他壓縮加速方法來提高LLMs的效率。表5中總結(jié)了一些具有代表性的MoE方法。
7.1 將MoE與其他高效技術(shù)結(jié)合使用
MoE 與其他高效技術(shù)結(jié)合的研究包括剪枝、知識(shí)蒸餾和參數(shù)高效微調(diào)(PEFT)。在稀疏 MoE 模型中,大多數(shù)現(xiàn)有工作都關(guān)注如何在保留大部分表示能力的同時(shí)減少內(nèi)存占用。MoEBERT 將預(yù)訓(xùn)練 BERT 中的前饋網(wǎng)絡(luò)(FFN)轉(zhuǎn)換為多個(gè)專家,并在推理時(shí)只激活一個(gè)專家,以提高速度。MoEfication 旨在將 FFN 轉(zhuǎn)換為 MoE 層的轉(zhuǎn)換推廣到各種 Transformer 模型。σ-MoE 和 SwitchHead 引入了額外的稀疏性到 FFN 和注意力組件,以減少標(biāo)準(zhǔn) Transformer 的計(jì)算和內(nèi)存需求。Sparse Mixers 和 SMLP 替換了大部分自注意力子層和 FFN,并使用 MoE 子層和路由機(jī)制確保來自同一句子的標(biāo)記被發(fā)送到同一專家。AdaMix 提出了一種混合適配器或低秩分解矩陣的混合方法,以增強(qiáng)下游性能。MixDA 使用一組領(lǐng)域適配器注入領(lǐng)域特定知識(shí),并訓(xùn)練一個(gè)混合適配器門動(dòng)態(tài)融合多個(gè)領(lǐng)域任務(wù)。EcoAssistant 和 FrugalGPT 利用查詢緩存和 LLM 層次結(jié)構(gòu)處理不同復(fù)雜度的請(qǐng)求。MoE 的研究歷史較長(zhǎng),廣泛應(yīng)用于今天的 LLM,包括模型壓縮和加速技術(shù)。
8 加速框架
本章主要介紹了一些用于加速大型語言模型(LLM)推理的框架。這些框架旨在提高 LLM 在不同場(chǎng)景下的效率,包括延遲、吞吐量和內(nèi)存等。這些框架可以分為通用框架和特定框架。通用框架包括 DNNFusion 和 DeepSpeed Inference,它們可以應(yīng)用于各種場(chǎng)景,而特定框架則針對(duì)特定場(chǎng)景進(jìn)行優(yōu)化,如 TurboTransformer 和 ByteTransformer。表6為各種加速框架的總結(jié)。這些框架通過操作融合、張量并行、推理管道和卸載系統(tǒng)等技術(shù)來提高 LLM 的推理效率。
