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