現代 AI 的「計算效率」:投機取樣(Speculative Decoding)的工程真相
在 LLM 的推論過程中,最核心的瓶頸在於其「自迴歸」的本質:每生成一個 Token,都需要將整個模型權重從顯示記憶體載入到計算單元一次。這意味著無論模型是 7B 還是 70B,生成速度很大程度上受限於記憶體頻寬(Memory Bound),而非計算能力(Compute Bound)。

現代 AI 的「計算效率」:投機取樣(Speculative Decoding)的工程真相
在 LLM 的推論過程中,最核心的瓶頸在於其「自迴歸」的本質:每生成一個 Token,都需要將整個模型權重從顯示記憶體載入到計算單元一次。這意味著無論模型是 7B 還是 70B,生成速度很大程度上受限於記憶體頻寬(Memory Bound),而非計算能力(Compute Bound)。
為了打破這個瓶頸,工業界引入了 投機取樣(Speculative Decoding)。它的核心邏輯是:既然大模型太慢,能不能讓一個小模型先「猜」幾個詞,大模型再來一次性審核?
投機取樣的核心機制:草稿與驗證
投機取樣透過引入一個輕量級的草稿模型(Draft Model)來加速推論過程。其工作流程分為兩個階段:
1. 草稿階段 (Drafting)
小模型(例如 Llama-3-8B 或更小的 Distil-model)快速連續生成 $K$ 個 Token。由於小模型參數量少,載入權重的開銷極低,生成速度極快。此時,這些 Token 是一個「猜測序列」。
2. 驗證階段 (Verification)
大模型(Target Model)接收這 $K$ 個 Token 以及之前的上下文,在一次前向傳播中並行地計算這 $K$ 個位置的機率分佈。
- 如果大模型認為小模型的猜測在某個位置 $\text{Token}_i$ 出現了偏差,則丟棄 $\text{Token}_i$ 及其之後的所有內容。
- 大模型會修正這個錯誤點,並輸出正確的 $\text{Token}_i$。
為什麼這能加速?
在傳統的自迴歸生成中,生成 $K$ 個 Token 需要 $K$ 次大模型前向傳播。而在投機取樣中:
- 理想情況:如果小模型的猜測全部正確,生成 $K+1$ 個 Token 僅需 $1$ 次大模型前向傳播 + $K$ 次小模型前向傳播。由於小模型的開銷幾乎可以忽略不計,速度提升接近 $K$ 倍。
- 最差情況:如果第一個詞就猜錯了,則退化為傳統模式(1 次小模型 + 1 次大模型),僅增加微小的開銷。
工程挑戰與權衡
盡管理論完美,但在實際部署中需要解決三個關鍵問題:
- 分佈對齊 (Distribution Alignment):如果草稿模型的預測分佈與目標模型差異過大,接受率(Acceptance Rate)會極低,導致加速效果消失。因此,通常需要對草稿模型進行針對性的蒸餾訓練。
- KV Cache 同步:驗證階段需要高效地處理 KV Cache 的回滾和更新。如果驗證失敗,必須迅速將快取狀態恢復到最後一個正確 Token 的位置。
- 硬體利用率:投機取樣將推論從 Memory-bound 推向了 Compute-bound。在 GPU 計算資源極其緊張的環境下,這種方法可能無法獲得顯著收益。
總結:用冗餘計算換取時間
投機取樣揭示了現代 AI 推論的一個深刻洞察:在記憶體頻寬成為絕對瓶頸時,增加額外的、低成本的計算量(冗餘計算)反而能降低整體延遲。這種「以算代時」的策略正成為 LLM 推論框架(如 vLLM, TensorRT-LLM)的標準配置,標誌著 AI 系統優化從單純的「減法」轉向了精巧的「加法」。
留言區
歡迎分享你的想法!
載入留言中…