揭開 LLM-Pruner 技術:推論速度翻倍

揭開 LLM-Pruner 技術:推論速度翻倍

大型語言模型推論中達成 100 倍加速的稀疏技術。深入探索 LLM-Pruner 技術背後的秘密,將推論速度提升一倍以獲得更快結果。

簡介

眾所周知,影響大型語言模型(LLM)在 GPU 上表現的核心因素有三個:(1) GPU 運算能力、(2) GPU 輸入/輸出(I/O)、(3) GPU 記憶體大小。值得注意的是,對於現今的 LLM 來說,因素 (2) 是推論階段的主要瓶頸。

本部落格將根據最新的研究論文與工程實務,重點探討在消費級顯示卡上透過剪枝或稀疏性加速 LLM 推論的可行性。

首先,參考 [1] 中對 LLM 推論延遲指標的分析,得到以下三個結論:

  • 在 LLM 的提示與 Token 生成階段中,Token 生成階段因載入模型參數所產生的 I/O 延遲而耗時更長。
  • 在 LLM 推論中,Attention 與 MLP 模組都是瓶頸,其中 MLP 模組約占 I/O 延遲的三分之二。
  • All Reduce(GPU 間通訊)的占比相對較低,表示主要的優化方向在 Transformer 架構本身。

詳細數據請參閱下圖:

為了提升推論效率,各種技術已被探索,包括量化、推論解碼、蒸餾與稀疏性。本部落格將專注於稀疏性,並進行深入介紹。

稀疏性簡介

模型剪枝,亦稱模型稀疏性,與模型量化不同,它不是壓縮每個權重參數,而是嘗試直接「移除」某些權重參數。模型剪枝的原理是透過消除「不重要」的權重來減少模型的參數數量和運算量,同時嘗試維持模型的準確度。

論文 [17] 首先介紹了權重剪枝的方法:所有低於某個閾值的權重都會被剪除,然後進行微調,直到準確度達到期望水準。該論文的作者在 LeNet、AlexNet 和 VGGNet 上進行了實驗,驗證了剪枝的有效性。

另一個關於 L1 和 L2 正則化的結論表明:在不進行微調的情況下,L1 正則化表現較好;而在進行微調的情況下,L2 正則化表現較好。此外,網路中較早的層對剪枝較為敏感,因此迭代剪枝的方法更為可取。根據實驗結果,作者提出了 Lottery Ticket 假說。

Lottery Ticket 假說指出:對於一個預訓練的網路,存在一個子網路,可以在不超過原始網路訓練輪數的情況下,達到與原始網路相似的準確度。這個子網路就像中了一張彩票。

為了恢復模型準確度,通常需要在剪枝後重新訓練模型。模型剪枝的典型三階段流程包括訓練、剪枝和微調步驟,剪枝前後的網路連線性會發生變化,如下圖所示。

同時,根據深度學習模型中可以被稀疏化的對象,深度神經網路的稀疏性主要包括權重稀疏性、激活值稀疏性和梯度稀疏性。

以上是對稀疏性的簡要介紹。接下來,我們將分三個部分分享「LLM 如何透過稀疏性加速推論」這個關鍵命題。第一部分將討論「大模型如何剪枝」,第二部分將涵蓋「如何利用激活值稀疏性加速推論」,第三部分將深入探討「稀疏性編譯器對 LLM 推論的影響」。

在本綜合指南中,我們將探索第一部分:「揭開 LLM-Pruner 技術:推論速度翻倍」,由 novita.ai 團隊的 Zachary 撰寫。

大語言模型如何剪枝

LLM 通常具有數千億參數的規模,使得傳統的重新訓練或迭代剪枝方法不可行。因此,迭代剪枝和 Lottery 假說 [2,3] 等方法只能應用於較小規模的模型。

剪枝可以有效應用於視覺和較小規模的語言模型及任務。然而,最佳的剪枝方法需要大量重新訓練模型,以恢復因移除剪枝元素而造成的準確度損失。因此,當處理 GPT 規模的模型時,成本也變得過高。雖然有一些一次性剪枝方法可以在無需重新訓練的情況下壓縮模型,但其運算成本太高,無法應用於數十億參數的模型。

最近,LLM 的剪枝技術取得了突破,本部落格將逐一討論。

SparseGPT

SparseGPT[12] 是 LLM 場景中第一個能夠有效應用於 1000 億到 10000 億參數規模模型的一次性精確剪枝技術。SparseGPT 的工作原理是將剪枝問題簡化為一個大規模稀疏回歸實例。它基於新穎的近似稀疏回歸求解器來解決分層壓縮問題,其效率足以在單個 GPU 上在數小時內執行最大的 GPT 模型(175B 參數)。此外,SparseGPT 無需任何微調即可達到高準確度,剪枝後的準確度損失可以忽略不計。例如,在最大的公開生成語言模型(OPT-175B 和 BLOOM-176B)上執行時,SparseGPT 在一次測試中實現了 50–60% 的稀疏性,而透過困惑度或零樣本測試準確度衡量的準確度損失極小。

工程程式碼請參考專案:https://github.com/IST-DASLab/sparsegpt

圖 1 展示了實驗結果,強調兩個關鍵點:首先,如圖 1(左)所示,SparseGPT 能夠在 OPT 系列 175B 參數變體中剪枝高達 60% 的均勻層級稀疏性,且準確度損失極小。相比之下,唯一已知能在該規模下運作的一次性基準方法——幅度剪枝(Magnitude Pruning)——僅能在 10% 稀疏性下保持準確度,超過 30% 稀疏性時則完全崩潰。

其次,如圖 2(右)所示,SparseGPT 也能準確地在更嚴格但對硬體友善的 2:4 和 4:8 半結構化稀疏模式中強制執行稀疏性。雖然這些模式相較於密集基線通常會帶來額外的準確度損失,尤其是對於較小的模型,但可以直接從這些稀疏模式推導出運算加速。此外,該技術所產生的稀疏性可以很好地與透過量化獲得的額外壓縮相結合。

LLM-Pruner

LLM-Pruner[13] 是一種結構化剪枝方法,它根據梯度資訊選擇性地移除非必要的耦合結構,在最大化稀疏性的同時保留 LLM 的大部分功能。LLM-Pruner 透過 LoRA,僅需 3 小時和 50K 資料即可有效恢復剪枝模型的性能。

LLM-Pruner 是第一個專為 LLM 結構化剪枝設計的框架,其優點總結如下:(i) 任務無關壓縮,壓縮後的語言模型保留了作為多任務求解器的能力。(ii) 減少對原始訓練語料的需求,壓縮僅需 50,000 個公開可用樣本,大幅降低了獲取訓練資料的預算。(iii) 快速壓縮,壓縮過程在三小時內完成。(iv) 自動結構化剪枝框架,所有結構依賴性自動分組,無需任何手動設計。

為了評估 LLM-Pruner 的效果,在三個大規模語言模型上進行了廣泛實驗:LLaMA-7B、Vicuna-7B 和 ChatGLM-6B。使用九個資料集對壓縮模型進行評估,以評估剪枝後的生成品質和零樣本分類性能。

參考下表,使用 LLM-Pruner 搭配 259 萬樣本對 LLaMA-7B 進行 20% 的剪枝,模型性能下降極小,但推論速度顯著提升了 18%。

使用 259 萬樣本的 LLM-Pruner 結果

Wanda

Wanda[14] 是一種基於權重和激活值的剪枝方法,是一種新穎、簡單且有效的方法,旨在為預訓練 LLM 引入稀疏性。受最近在 LLM 中觀察到顯著值特徵的啟發,Wanda 透過將每個輸出與對應的輸入激活值乘以最小的量化值來剪枝權重。值得注意的是,Wanda 不需要重新訓練或權重更新,剪枝後的 LLM 可以直接使用。在 LLaMA 和 LLaMA-2 上對 Wanda 進行評估,驗證了其優於既定的幅度剪枝基線,並顯示出與涉及密集權重更新的最新方法相比具有競爭力。

工程程式碼請參考專案:https://github.com/locuslab/wanda

剪枝後的 LLaMA 和 LLaMA-2 模型在 WikiText 上的困惑度。Wanda 在未引入任何權重更新的情況下,與先前最佳方法 SparseGPT 表現相當。

參考上圖,Wanda 和 SparseGPT 在模型剪枝方面表現出相似的性能。

傳統剪枝方法的缺點:

  • 硬體支援:由於已知的現代硬體困難,透過非結構化稀疏性實現時鐘時間加速具有挑戰性。例如,最近的進展如 SparseGPT 透過一次性剪枝實現了 60% 的非結構化稀疏性,但尚未產生任何顯著的時鐘時間加速效果。
  • 部署挑戰:在上下文學習等情境中,透過模型稀疏性滿足特定要求存在挑戰。雖然許多工作已經證明了任務特定剪枝的有效性,但為每個任務維護不同的模型與 LLM 本身的定位相衝突,帶來了部署障礙。

結論

總之,創新的剪枝方法如 SparseGPT、LLM-Pruner 和 Wanda 為在保持高效能的同時對大型模型進行剪枝提供了新的觀點和技術手段。然而,在硬體支援和實際應用方面仍需要進一步的研究和探索。在下一篇部落格文章中,我們將探討第二部分:「如何利用激活值稀疏性加速推論」。

參考論文

[1] Deja Vu: Contextual Sparsity for Efficient LLMs at Inference Time

[4] The Hardware Lottery

[6] Rethinking the Role of Scale for In-Context Learning: An Interpretability-based Case Study at 66 Billion Scale

[12] SparseGPT: Massive Language Models Can Be Accurately Pruned in One-Shot

[13] LLM-Pruner: On the Structural Pruning of Large Language Models

[14] A Simple and Effective Pruning Approach for Large Language Models

[17] Learning both Weights and Connections for Efficient Neural Networks

novita.ai 提供 Stable Diffusion API 以及數百種快速且最便宜的 AI 圖像生成 API,涵蓋 10,000 個模型。🎯 最快僅需 2 秒即可生成,按量付費,每張標準圖像最低僅需 $0.0015,您可以添加自己的模型並無需維護 GPU。免費分享開源擴展。

推薦閱讀

  1. 量化方法:大型語言模型推論 100 倍加速