iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0
生成式 AI

生成式AI的奇妙旅程:從ChatGPT到個人化應用系列 第 26

Day26 | 大規模語言模型的「開源節流」戰略:高效推論的記憶體與速度瓶頸突破

  • 分享至 

  • xImage
  •  

1. 引言:當 LLM 走向 AGI,硬體資源卻拉起警報

各位技術夥伴大家好!自從 ChatGPT 橫空出世以來,大規模語言模型(Large Language Models, LLMs)無疑成為了科技領域最熱門的關鍵詞。LLMs 在自然語言理解(NLU)、生成(NLG)、推理、程式碼生成 等多個領域展現出驚人的性能,甚至有專家相信,LLMs 的成就標誌著人類朝向**通用人工智慧(AGI)**邁出了重要一步。

然而,這種卓越的能力並非沒有代價。隨著模型規模膨脹至數十億、甚至數兆參數(例如 GPT-3 擁有 1750 億參數,LLaMA-70B 擁有 700 億參數),LLMs 對於計算資源和記憶體的需求也呈指數級增長。

想像一下,一個 1750 億參數的模型,若採用半精度(FP16)儲存,至少需要 350GB 記憶體,進行高效推論至少需要 5 個配備 80GB VRAM 的 NVIDIA A100 GPU。更關鍵的是,LLMs 不僅模型大,它們所能支援的**上下文區間(Context Window)**也從最初的數千個 Token 暴漲到百萬甚至千萬個 Token。

在這種需求暴漲的壓力下,傳統 GPU 記憶體容量的增長速度(約每代增加 30% 到 50%) 已經遠遠落後,形成了**「記憶體容量瓶頸」**。

我們今天就來深入探討:如何在 LLM 爆炸性增長的時代,透過「開源節流」的策略,有效地克服 LLM 推論的效能瓶頸,實現高效、低成本的部署。

2. LLM 推論效能的核心概念與挑戰

為了理解如何優化,我們必須先掌握 LLM 推論過程中的核心問題所在。

2.1 LLM 的運作原理:Transformer 與自迴歸解碼

目前主流的 LLMs 都是基於 Transformer 架構。一個典型的 Transformer 區塊包含多頭自注意力機制(Multi-Head Self-Attention, MHSA)和前饋網路(Feed Forward Network, FFN)。

核心組件 功能概述 效率影響
MHSA (多頭自注意力) 允許模型識別輸入中不同部分的關聯性,捕捉遠距離的依賴關係。 在預填充(Prefilling)階段,計算複雜度與輸入長度呈二次方關係
FFN (前饋網路) 透過線性變換層和非線性激活函數處理特徵。 佔用大量模型參數,尤其在解碼階段造成記憶體存取成本和使用量顯著增加(例如在 LLaMA-7B 中佔 63.01%)。

推論過程(Inference Process):最流行的解碼器專用 LLM(Decoder-only LLMs)採用自迴歸(auto-regressive)方法,逐一生成 Token。這個過程分為兩個主要階段:

  1. 預填充階段(Prefilling Stage):LLM 計算並儲存初始輸入 Token 的 KV 快取(Key-Value Cache),並生成第一個輸出 Token。
  2. 解碼階段(Decoding Stage):LLM 利用 KV 快取,逐一生成後續的輸出 Token,並用新生成的 Token 的 Key (K) 和 Value (V) 對更新快取。

2.2 LLM 推論效能瓶頸的根源

LLM 推論效率低下的根本原因可歸結為三個主要因素:

  1. 巨大的模型規模(Model Size):主流 LLM 擁有數十億甚至數兆的參數。這直接導致更高的計算成本、記憶體存取成本和記憶體使用量
  2. 注意力操作的複雜性(Attention Operation):在預填充階段,自注意力操作的計算複雜度與輸入長度呈**二次方(Quadratic Complexity)**關係。當輸入長度增加時,計算和記憶體成本迅速膨脹。
  3. 自迴歸解碼機制(Auto-regressive Decoding):由於採逐一生成的方式,在每個解碼步驟中,所有模型權重必須從 HBM(高頻寬記憶體)載入到 GPU 晶片,產生巨大的記憶體存取成本。此外,KV 快取的體積會隨著輸入長度增長而線性增加,這可能導致記憶體碎片化和不規則的記憶體存取模式。KV 快取大小會隨著對話長度線性增長,成為 GPU 記憶體的瓶頸。

3. 「節流」篇:減少記憶體與計算開銷的技術

「節流」策略旨在從根本上縮小模型的體積、減少不必要的計算和記憶體消耗。這些技術主要集中在模型層(Model-level)和資料層(Data-level)優化。

3.1 模型層優化:壓縮 LLM 的體積 (Model Compression)

模型壓縮是透過改變數據表示(如量化)或改變模型結構(如稀疏化)來提高預訓練模型的推論效率。

3.1.1 量化技術 (Quantization):用位元換取空間

量化是指在保持推論性能損失最小的情況下,減少模型參數的位元數(精度)。

量化類型 說明 優點與挑戰 實例
權重專屬量化 (Weight-Only) 僅將權重(Weights)量化至低精度(例如 INT4, INT8),通常在訓練後量化 (PTQ) 完成。 優點:顯著加速解碼階段,因其大幅減少權重從 HBM 載入的記憶體存取開銷。挑戰:可能增加預填充階段的延遲,因為需要額外的反量化(de-quantization)運算。 GPTQ, AWQ, SpQR
權重與激活量化 (Weight-Activation) 同時量化權重和激活值(Activations)。 優點:可以利用特定硬體(如 GPU Tensor Core)加速低位元操作。挑戰:激活值的量化比權重更敏感,需處理異常值(Outliers)問題。 LLM.int8(), SmoothQuant, ZeroQuant

案例洞察 (Insight):實驗顯示,權重專屬量化(例如 W4A16)對於解碼階段的加速效果非常顯著,對較大模型尤其有利,因為模型規模越大,記憶體存取開銷越重。然而,在預填充階段,它甚至可能增加延遲。

3.1.2 稀疏化技術 (Sparsification):剪除冗餘

稀疏化透過剪除模型中不重要或冗餘的權重來壓縮模型。

  • 非結構化剪枝 (Unstructured Pruning):以細粒度剪除單個權重值。
    • 優點:在對模型性能影響最小的情況下實現更高的稀疏度。
    • 挑戰:缺乏規律性,導致不規則的記憶體存取和計算模式,難以在現代硬體上實現有效的加速。
  • 結構化剪枝 (Structured Pruning):以更高粒度(如通道、組、層)移除冗餘結構。
    • 優點:與硬體無關,可在傳統硬體上加速推論。
    • 挑戰:移除較大的組件可能導致性能下降,通常需要參數微調(Fine-tuning)來恢復性能。

量化 vs. 剪枝 (Pruning vs. Quantization):在追求相似壓縮比時,量化在準確度上通常優於非結構化剪枝。此外,由於硬體和計算優化的複雜性,剪枝技術的普及性不如量化。

3.2 KV 快取優化:從源頭解決記憶體膨脹問題

KV 快取是推論階段的第二大記憶體消耗來源,隨著上下文長度(Context Length)的增加而線性膨脹。優化 KV 快取是「節流」的關鍵一環。

3.2.1 結構層面的設計:MQA 與 GQA

為了減少 KV 快取尺寸,研究人員從 Transformer 的注意力機制入手,進行架構調整:

  • 多查詢注意力 (Multi-Query Attention, MQA):共享不同注意力頭(Attention Heads)的 Key (K) 和 Value (V) 快取。
    • 效果:將 KV 快取的空間佔用優化至原來的 $1/n_h$($n_h$ 為注意力頭數)。
  • 分組查詢注意力 (Grouped Query Attention, GQA):在 MQA 和 MHA(多頭注意力)之間取得平衡。將 Query 頭分成 $n_g$ 組,每組共享一個 K/V 頭。
    • 效果:KV 快取空間佔用縮減為 $n_g / n_h$。例如,LLaMA2-70B 採用 GQA ( $n_g=8$ ),Mistral 7B 也採用 GQA ( $n_g=8$ )。這也額外節省了 Attention 模組中可觀的參數數量。

3.2.2 壓縮與剔除策略

  • KV 快取量化 (KV Cache Quantization):將 KV 快取本身量化為低位元(例如 INT4, INT2)。這是應對超長上下文(如千萬級 Token)推論的最新趨勢。例如,KIVI 提出了免調優的 2 位元 KV 快取量化算法。
  • 動態 Token 剔除 (Dynamic Token Pruning):基於重要性指標,在推論時動態移除不重要的 Token 的 KV 快取。
    • H2O (Heavy-Hitter Oracle):結合靜態本地注意力與動態識別的「重擊者」(heavy-hitters)Key Tokens,並動態調整剔除最不重要的 Key。
    • Token Omission Via Attention (TOVA):在每個解碼步驟中,剔除在層級上注意力權重最小的 Token。
    • 保留初始 Token:研究發現,通常保留初始 Token最近 Token 的 KV 快取,能有效維持長上下文模型的性能。

4. 「開源」篇:擴展記憶體資源與提升系統效率

「開源」策略專注於繞過單一 GPU 的記憶體限制,並從系統層面優化運算流程,確保 GPU 始終保持高效運行。

4.1 系統層優化:推理引擎與服務系統

系統級優化不涉及昂貴的模型訓練,而是透過軟體或硬體層面的巧思來提升整體效率。

4.1.1 推測解碼 (Speculative Decoding)

自迴歸解碼的固有缺陷是速度慢。推測解碼(或稱推測採樣)是一種**無損加速(Lossless Acceleration)**方法,它保持輸出結果與標準自迴歸解碼的等效性。

  • 原理:使用一個小型、快速的草稿模型(Draft Model)來平行生成多個後續 Token(即草稿 Token),然後再使用大型、準確的目標模型(Target Model)一個推論步驟中同時驗證這些草稿 Token 的條件概率。
  • 優勢:如果草稿 Token 被接受,則可以大幅跳過解碼步驟,顯著提高吞吐量和速度。例如,Medusa 和 Eagle 等方法在推論速度上可達到 2.04x 到 3.74x 的加速。
  • 實例:Medusa 通過微調 LLM 的多個頭來生成後續的草稿 Token。Eagle 使用輕量級 Transformer 層來生成草稿 Token。

4.1.2 圖與運算子優化 (Graph and Operator Optimization)

底層運算子的優化對於處理注意力操作的二次方複雜性至關重要。

  • FlashAttention:透過將整個注意力操作融合為單一、記憶體高效的運算子,顯著減輕記憶體存取開銷。它將輸入矩陣和注意力矩陣分成多個區塊處理,無需完整載入數據。
  • FlashDecoding++:在 FlashAttention 基礎上,專注於最大化解碼過程中的計算平行性,特別是對小批次(Batch Size)和長序列的優化。

4.1.3 服務系統優化與記憶體管理

在 LLM 服務系統中,記憶體管理和排程是關鍵。

  • PagedAttention (分頁式注意力):這項技術(由 vLLM 採用) 允許 KV 快取儲存在非連續的記憶體空間中,類似於作業系統中的虛擬記憶體分頁。這有效地減少了記憶體碎片化,並提高了記憶體使用效率。
  • 優先級 KV 快取剔除:NVIDIA TensorRT-LLM 導入了基於優先級的 KV 快取剔除機制,允許使用者為不同的 Token 範圍指定優先級和持續時間,以提高快取命中率約 20%。
  • 高效服務系統:DeepSpeed、vLLM、LightLLM 等框架提供了優化的排程、批次處理和記憶體管理功能,以提高 Token 吞吐量和請求吞吐量。

4.2 資料層優化:長上下文與指令壓縮

資料層優化旨在不改變模型的情況下,優化輸入提示(Prompt)或輸出結構,從而提高效率。

4.2.1 指令壓縮 (Prompt Compression)

隨著 LLMs 應用情境複雜化,如思維鏈(CoT)或上下文學習(ICL),輸入的指令(Prompt)變得越來越長。指令壓縮的目標是在保持語義完整性的同時,縮短提示的長度。

  • 硬指令方法 (Hard Prompt Methods):透過過濾(Filtering)意譯(Paraphrasing),移除不必要或資訊量低的內容,保留自然語言 Token。
    • LLMLingua:一種從粗到細的壓縮方法,利用小型語言模型 (SLM) 計算困惑度(Perplexity, PPL)來判斷 Token 的重要性,進行 Token 級別的迭代壓縮。效果:LLMLingua 能夠在性能損失極小的情況下,實現高達 20x 的壓縮比。即使在 GSM8K 等推理任務上,經 5x 壓縮後的性能甚至可能略優於未壓縮版本。
  • 軟指令方法 (Soft Prompt Methods):將原始文本資訊壓縮成少量連續的提示向量(Continuous Prompt Vectors),這些向量通常是不可讀的特殊 Token。
    • GIST (Gist Tokens):將原始 Prompt 壓縮成少量的「要點 Token」(Gist Tokens),新生成的 Token 只會關注這些要點 Token,實現高效編碼和解碼。
    • ICAE (In-Context Autoencoder):將長上下文壓縮成少量連續的提示向量,並使用凍結的 LLM 作為解碼器。

4.2.2 記憶體增強架構 (Memory-Augmented Architectures)

為了解決 LLMs 在處理超長對話或知識密集型任務時,難以維持**長期上下文連貫性(Long-Term Contextual Coherence)**的問題,一種將 LLM 與外部記憶體結合的架構應運而生。

  • RAG (檢索增強生成):RAG 是一種提升 LLM 回答品質的技術,它透過僅將相關的檢索資訊添加到原始提示中,而不是使用一個過長的提示,從而提升處理大量資料時的推論效率
  • 記憶體管理機制:在記憶體增強模型中,使用相關性剪枝(Relevance-Based Pruning)最近最少使用(LRU)剔除策略,來確保記憶體儲存中只保留最相關的歷史互動資訊,從而保持系統的可擴展性。相關性剪枝基於查詢(Query)與記憶體項目的餘弦相似度來決定剔除哪個最不相關的記憶體。

5. 模型限制與潛在風險探討

儘管上述優化技術為 LLM 部署帶來了巨大的效率提升,但在實際應用中,我們仍需面對一些模型固有的限制和潛在的風險或權衡。

5.1 性能與效率的權衡

所有「節流」手段本質上都是一種折衷與妥協,通常是以犧牲部分精度、運算時間或模型能力為代價,來換取記憶體或速度的提升。

  • 性能損失 (Lossy Performance):模型層次的優化(如量化、剪枝)通常是有損的(lossy),可能導致模型性能輕微下降。即使是像 LLMLingua 這樣的指令壓縮方法,在高壓縮比(例如 14x 或 20x)下,雖然性能仍令人滿意,但相較於完全提示(Full-shot)仍會出現輕微的準確度下降。
  • 硬件兼容性挑戰:非結構化剪枝產生的稀疏模式不規則,難以利用針對密集數據優化的現代硬體加速。要實現真正的效率提升,往往需要專門為低精度運算設計的硬體支持。

5.2 MOE 架構的記憶體悖論

混合專家模型(Mixture of Expert model, MOE)架構,如 GPT-4 或 Mixtral 8x7B,透過只激活部分專家單元來處理每個 Token,從而顯著減少了計算量

然而,MOE 架構卻面臨記憶體使用量的悖論:為了確保推論順暢(避免因路由到未載入參數的專家而導致延遲),MOE LLM 仍必須將所有專家單元的參數全部載入記憶體。這意味著,與同等總參數量的密集模型相比,MOE 架構在記憶體占用上並沒有節省多少空間,記憶體需求仍隨著總參數量的增加而膨脹。

5.3 壓縮模型的維護成本與數據洩漏風險

  • 模型鎖定 (Model Locking):軟指令壓縮方法(如 ICAE)雖然能保持 LLM 解碼器不變,但其訓練出的壓縮編碼器是特定於目標 LLM 的。一旦底層的 LLM 更新(例如從 LLaMA-2 升級到 LLaMA-3),壓縮編碼器可能需要重新訓練
  • 數據洩漏 (Data Leakage):某些模型(如 ICAE)在訓練和測試時使用了 Pile 數據集,這可能與原始 LLM 的訓練語料庫重疊,引發潛在的數據洩漏擔憂

6. 結論與未來展望

LLMs 的發展是一場充滿挑戰的長征。隨著 LLM 規模和上下文長度的持續突破(Llama 4 的 Scout 版本已能支援高達 1,000 萬個 Token),LLM 推論效率的「開源節流」策略將變得更加關鍵。

我們看到,在 「節流」 方面,從底層的模型壓縮(量化、稀疏化),到精妙的 KV 快取設計(MQA/GQA)與淘汰策略,都在不斷地榨取硬體極限。而在 「開源」 方面,系統級加速器(推測解碼、FlashAttention)和先進的記憶體管理(PagedAttention、記憶體增強架構)則在繞過傳統 GPU 記憶體的瓶頸。

未來的研究方向將更加多元:

  • 架構創新:非 Transformer 架構(Non-Transformer Alternates),例如 State Space Model (SSM),因為其具備線性計算和記憶體複雜度的特性,正獲得廣泛關注,有望從根本上解決長序列的效率問題。
  • 多模態啟發:軟指令壓縮可以視為將自然語言編碼成一種新的「壓縮語言」。從多模態模型(Multimodal Models)中汲取靈感,例如探索**交叉注意力(Cross-Attention)**機制來傳輸壓縮資訊,或許能帶來新的突破。
  • 軟硬體協同:未來的高效部署需要軟體、演算法和硬體加速器設計之間更緊密的協同優化。

總而言之,LLM 的高效推論是一場跨越資料、模型、系統層次的全方位戰爭。我們正處於一個 LLM 能力突飛猛進,但硬體資源瓶頸日益緊張的時代。只有持續在效率優化上深耕,才能真正實現 LLM 的大規模、低成本、無處不在的部署。


上一篇
Day25 | 大型語言模型(LLM)的產業應用與前瞻挑戰
下一篇
Day27 | RAG 與知識圖譜的完美結合:GraphRAG 如何實現更精準、可解釋的生成式 AI
系列文
生成式AI的奇妙旅程:從ChatGPT到個人化應用27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言