單GPU就能壓縮模型,性能不變參數(shù)少25%!微軟提出模型稀疏化新方法
眾所周知,對(duì)于大語(yǔ)言模型來(lái)說(shuō),規(guī)模越大,所需的算力越大,自然占用的資源也就越多。
研究人員于是乎把目光轉(zhuǎn)到了這片領(lǐng)域,即模型的稀疏化(Sparsification)。
今天要介紹的SliceGPT,則可以實(shí)現(xiàn)模型的事后稀疏。也就是說(shuō),在一個(gè)模型訓(xùn)練完了以后再進(jìn)行稀疏化操作。
該模型由微軟研究院和蘇黎世聯(lián)邦理工學(xué)院聯(lián)合發(fā)表在了arXiv上。
目前主流的稀疏化技術(shù)面臨著挺多挑戰(zhàn)和困難。比方說(shuō),需要額外的數(shù)據(jù)結(jié)構(gòu),而且在當(dāng)下的硬件條件下,速度有限。
SliceGPT就能很好的解決這些問(wèn)題——它能用一個(gè)較小的矩陣來(lái)替換每個(gè)權(quán)重矩陣,從而降低網(wǎng)絡(luò)的嵌入維度。
而實(shí)際結(jié)果也是非常不錯(cuò)的,在LLAMA-2 70B、OPT 66B和Phi-2模型上,SliceGPT去除了多達(dá)25%的模型參數(shù),還保證了模型本身99%、99%以及90%的零樣本任務(wù)的性能。
此外,SliceGPT還可以在更少的GPU上運(yùn)行,無(wú)需額外的代碼優(yōu)化。
在24GB的消費(fèi)級(jí)GPU上,SliceGPT可以將LLAMA-2 70B總的推理計(jì)算量減少到密集模型的64%。
而在40GB的A100 GPU上,這個(gè)數(shù)字達(dá)到了66%。
而在SliceGPT背后的,則是Transformer網(wǎng)絡(luò)中的計(jì)算不變性。
下面,就讓我們走進(jìn)論文來(lái)一探究竟。
優(yōu)勢(shì)所在
大語(yǔ)言模型(LLM)是擁有數(shù)十億個(gè)參數(shù)的神經(jīng)網(wǎng)絡(luò),以數(shù)萬(wàn)億詞庫(kù)為基礎(chǔ)進(jìn)行訓(xùn)練。
這種過(guò)高的成本就導(dǎo)致人們會(huì)轉(zhuǎn)向在多個(gè)任務(wù)中重復(fù)使用預(yù)先訓(xùn)練好的模型,我們稱(chēng)為基礎(chǔ)模型范式。
LLM的規(guī)模越來(lái)越大,這使得部署預(yù)訓(xùn)練模型成為一項(xiàng)昂貴的工作。許多模型需要多個(gè)GPU才能計(jì)算出預(yù)測(cè)結(jié)果,而且由于模型是自回歸的,因此需要神經(jīng)網(wǎng)絡(luò)的多次前向傳遞才能生成文本響應(yīng)。
因此,降低這些模型的計(jì)算要求就大有市場(chǎng)了。
目前,大多數(shù)主流的模型壓縮技術(shù)分為四類(lèi):蒸餾(distillation)、張量分解(tensor decomposition,包括低階因式分解)、剪枝(pruning)和量化(quantization)。
研究人員表示,雖然剪枝方法已經(jīng)存在了一段時(shí)間,但許多方法需要在剪枝后進(jìn)行恢復(fù)微調(diào)(RFT)以保持性能,這使得整個(gè)過(guò)程成本十分高昂,且難以進(jìn)行擴(kuò)展。
有了SliceGPT,開(kāi)發(fā)人員現(xiàn)在只需幾個(gè)小時(shí)就能使用單個(gè)GPU來(lái)壓縮大型模型,即使沒(méi)有RFT的幫助,也能在生成和下游任務(wù)中繼續(xù)保持有競(jìng)爭(zhēng)力的性能。
剪枝方法的工作原理是將LLM中權(quán)重矩陣的某些元素設(shè)置為零,并更新矩陣的周?chē)匾赃M(jìn)行補(bǔ)償。
結(jié)果就是,形成了稀疏模式,意味著在神經(jīng)網(wǎng)絡(luò)前向傳遞所需的矩陣乘法中,可以跳過(guò)一些浮點(diǎn)運(yùn)算。運(yùn)算速度的相對(duì)提升取決于稀疏程度和稀疏模式。
與其他剪枝方法不同,SliceGPT會(huì)徹底剪掉(slice的由來(lái))權(quán)重矩陣的整行或整列。在切分之前,研究人員會(huì)對(duì)網(wǎng)絡(luò)進(jìn)行一次轉(zhuǎn)換,使預(yù)測(cè)結(jié)果保持不變,因此切分只會(huì)產(chǎn)生很小的影響。
結(jié)果就是權(quán)重矩陣變小了,神經(jīng)網(wǎng)絡(luò)塊之間傳遞的信號(hào)也變小了,成功降低神經(jīng)網(wǎng)絡(luò)的嵌入維度。
下圖比較了SliceGPT和現(xiàn)有的稀疏性方法之間的優(yōu)勢(shì),主要體現(xiàn)在以下四個(gè)方面:
1. 引入了計(jì)算不變性的概念:證明了可以對(duì)Transformer中的每個(gè)權(quán)重矩陣進(jìn)行正交矩陣變換,而無(wú)需改變模型。
2. 利用這一點(diǎn)來(lái)編輯Transformer架構(gòu)中的每個(gè)區(qū)塊,從而將區(qū)塊間的信號(hào)矩陣1投影到其自身上,之后移除變換后權(quán)重矩陣的列或行,以減小模型的大小。
3. 研究人員在OPT和LLAMA-2等模型上進(jìn)行了多次實(shí)驗(yàn),最終結(jié)果表明,SliceGPT能夠?qū)⑦@些模型壓縮到高達(dá)30%。此外,在下游任務(wù)中,研究人員還對(duì)Phi-2模型進(jìn)行了實(shí)驗(yàn),結(jié)果表明所有模型的壓縮率最高可達(dá)30%,同時(shí)還能保持 90%以上的密集性能。
計(jì)算不變性
SliceGPT依賴(lài)Transformer架構(gòu)中所固有的計(jì)算不變性(computational invariance)。
意思就是,研究人員可以對(duì)一個(gè)組件的輸出進(jìn)行正交變換,只要在下一個(gè)組件中撤銷(xiāo)即可。
在網(wǎng)絡(luò)區(qū)塊之間執(zhí)行的 RMSNorm操作不會(huì)影響變換,原因在于這些操作是相通的。
首先,研究人員介紹了在RMSNorm連接的Transformer網(wǎng)絡(luò)中,是如何實(shí)現(xiàn)不變性的。然后說(shuō)明如何將使用 LayerNorm連接訓(xùn)練的網(wǎng)絡(luò)轉(zhuǎn)換為RMSNorm。
研究人員引入了主成分分析法(PCA)計(jì)算各層變換的方法,從而將區(qū)塊間的信號(hào)投射到其主成分上。
最后,再講講刪除次要主成分和剪掉修改后網(wǎng)絡(luò)的行或列是如何對(duì)應(yīng)上的。
第一,假設(shè)Q是一個(gè)正交矩陣,那么有:
而用向量x乘以Q并不會(huì)改變向量的常模,因?yàn)椋?/span>
這里,Q的尺寸總是與Transformer D的嵌入尺寸相匹配。
現(xiàn)在假設(shè)X?是Transformer一個(gè)區(qū)塊的輸出,經(jīng)過(guò)RMSNorm的處理后,以RMSNorm(X?)的形式輸入到下一個(gè)區(qū)塊。
如果在RMSNorm之前插入具有正交矩陣Q的線性層,并在RMSNorm之后插入Q?,網(wǎng)絡(luò)將保持不變,因?yàn)樾盘?hào)矩陣的每一行都要乘以Q,然后進(jìn)行歸一化處理,再乘以Q?。就有:
現(xiàn)在,由于網(wǎng)絡(luò)中的每個(gè)注意力(attention)或FFN模塊都對(duì)輸入和輸出進(jìn)行了線性運(yùn)算,我們可以將額外的運(yùn)算 Q吸收到模塊的線性層中。
由于網(wǎng)絡(luò)包含殘差連接,此時(shí)還必須將Q應(yīng)用于所有前層(一直到嵌入)和所有后續(xù)層(一直到LM Head)的輸出。
不變函數(shù)是指輸入變換不會(huì)導(dǎo)致輸出改變的函數(shù)。
在舉例中,研究人員可以對(duì)transformer的權(quán)重應(yīng)用任何正交變換Q而不改變其結(jié)果,因此計(jì)算可以在任何變換狀態(tài)下進(jìn)行。
這就是所謂的計(jì)算不變性,如下圖定理所示。
接下來(lái),由于transformer網(wǎng)絡(luò)的計(jì)算不變性?xún)H適用于RMSNorm連接的網(wǎng)絡(luò),因此在處理LayerNorm網(wǎng)絡(luò)之前,研究人員先將LayerNorm的線性塊吸收到相鄰塊中,從而將網(wǎng)絡(luò)轉(zhuǎn)換為RMSNorm。
下圖表示了transformer網(wǎng)絡(luò)的這種轉(zhuǎn)換。
在每個(gè)區(qū)塊中,研究人員將輸出矩陣W(out)與均值減法矩陣M相乘,后者考慮了后續(xù)LayerNorm中的均值減法。
輸入矩陣W(in)被前一個(gè)LayerNorm塊的比例預(yù)乘。嵌入矩陣W(embd)必須進(jìn)行均值減法,而W(head)必須按最后一個(gè)LayerNorm的比例重新縮放。
這里只是操作順序的簡(jiǎn)單改變,不會(huì)影響輸出。
現(xiàn)在transformer中的每個(gè)LayerNorm都轉(zhuǎn)換為了RMSNorm,研究人員就可以選擇任意的Q來(lái)修改模型。
他們需要在每個(gè)區(qū)塊應(yīng)用不同的正交矩陣Q?。
此外,殘差連接和區(qū)塊的輸出必須具有相同的旋轉(zhuǎn)(rotation)。為了解決這個(gè)問(wèn)題,研究人員通過(guò)對(duì)殘差進(jìn)行線性變換Q? ?-1Q?來(lái)修改殘差連接。
下圖顯示了如何通過(guò)對(duì)殘差連接進(jìn)行額外的線性運(yùn)算,對(duì)不同的區(qū)塊進(jìn)行不同的旋轉(zhuǎn)。
與權(quán)重矩陣的修改不同,這些附加運(yùn)算無(wú)法預(yù)先計(jì)算。
盡管如此,研究人員還是需要這些操作來(lái)對(duì)模型進(jìn)行切分,而且可以看到整體速度確實(shí)加快了。
為了計(jì)算矩陣Q?,研究人員使用了PCA。首先從訓(xùn)練集中選擇一個(gè)校準(zhǔn)數(shù)據(jù)集,通過(guò)模型運(yùn)行該數(shù)據(jù)集(在將LayerNorm運(yùn)算轉(zhuǎn)換為RMSNorm 之后),并提取層的正交矩陣。
研究人員使用轉(zhuǎn)換后的網(wǎng)絡(luò)輸出來(lái)計(jì)算下一層的正交矩陣。
舉例來(lái)說(shuō),如果X?,i是校準(zhǔn)數(shù)據(jù)集中第i個(gè)序列的第?個(gè)RMSNorm塊的輸出,那么:
然后再將Q?設(shè)為C?的特征向量,按特征值遞減排序。
主成分分析的目標(biāo)通常是獲取數(shù)據(jù)矩陣X,并計(jì)算其低維表示Z和X的近似重構(gòu)。
其中第二個(gè)等式的左半部分,即代表X的近似重構(gòu)。
其中Q是X?X的特征向量,D是一個(gè)D×D(small)的刪除矩陣,用于刪除矩陣左邊的一些列。
下圖算式的最小化的線性映射是QD。
從這個(gè)意義上說(shuō),重構(gòu)L(2)是最佳的。
而當(dāng)對(duì)區(qū)塊間的信號(hào)矩陣X應(yīng)用PCA時(shí),研究人員從未將N×D信號(hào)矩陣具體化,而是將刪除矩陣D,應(yīng)用于構(gòu)建該矩陣之前和之后的運(yùn)算。
這些運(yùn)算在上述運(yùn)算中已乘以Q。
之后研究人員刪除W(in)的行以及W(out)和 W(embd)的列,同時(shí)還刪除了插入到剩余連接中的矩陣的行和列,矩陣如下所示: