現代 AI 推論的「快轉鍵」:Speculative Decoding(投機採樣)深度解析

在 LLM 推論中,最令人沮喪的體驗就是看著模型一個 token 一個 token 地緩慢蹦出。儘管我們有了 PagedAttention 和 Continuous Batching 來提升整體吞吐量,但對於單一使用者的首字延遲 (TTFT) 和 生成速度 (TPOT) 來說,瓶頸依然存在:LLM 的自迴歸特性決定了它

專屬插圖
現代 AI 推論的「快轉鍵」:Speculative Decoding(投機採樣)深度解析

現代 AI 推論的「快轉鍵」:Speculative Decoding(投機採樣)深度解析

在 LLM 推論中,最令人沮喪的體驗就是看著模型一個 token 一個 token 地緩慢蹦出。儘管我們有了 PagedAttention 和 Continuous Batching 來提升整體吞吐量,但對於單一使用者的首字延遲 (TTFT)生成速度 (TPOT) 來說,瓶頸依然存在:LLM 的自迴歸特性決定了它必須序列生成。

為了打破這個限制,業界引入了一種極其巧妙的方案:Speculative Decoding(投機採樣)

核心矛盾:大模型的「慢」與小模型的「快」

LLM 生成 token 的過程是記憶體受限(Memory Bound)的。無論模型是 70B 還是 7B,讀取權重到 GPU 快取的時間成本在單次推論中佔據主導。這意味著用一個巨大的模型去預測下一個極簡單的 token(比如 "of the" 之後的 "world")是非常浪費的。

投機採樣的核心思想是:用一個輕量級的「草稿模型」(Draft Model)先行試探,再由「目標模型」(Target Model)一次性驗證。

工作流程:試探 $\rightarrow$ 驗證 $\rightarrow$ 修正

  1. 投機階段 (Speculation)
    一個小規模的模型(例如 Qwen-0.5B 或 Llama-160M)快速連續生成 $K$ 個 token(例如 $K=5$)。因為小模型參數少,讀取速度極快,這步幾乎不耗時。

  2. 驗證階段 (Verification)
    將這 $K$ 個 token 以及原始 Prompt 一次性輸入給大模型(目標模型)。由於大模型在處理 Prompt 時可以平行計算所有 token 的機率分佈,它能瞬間判斷出這 $K$ 個 token 中有多少個是符合其機率分佈的。

  3. 接受與修正 (Acceptance & Correction)

  4. 如果大模型認為前 3 個 token 正確,第 4 個錯誤,那麼系統會接受前 3 個,並利用大模型在第 4 個位置生成的正確 token 進行修正。
  5. 然後重新開始下一輪投機。

為什麼這能加速?

在理想情況下,如果草稿模型的預測準確率高,大模型一次驗證就能確認多個 token。原本需要 $K+1$ 次序列推論的時間,現在被壓縮到了 $1 + \epsilon$ 次(其中 $\epsilon$ 是極小的平行驗證開銷)。

這種方案最迷人的地方在於:它在數學上保證了輸出分佈與直接使用大模型完全一致。它不是在犧牲品質換速度,而是在利用冗餘算力換時間。

工程挑戰與實踐

實現 Speculative Decoding 需要解決幾個關鍵問題:
- 模型對齊:草稿模型和目標模型的分詞器(Tokenizer)必須完全一致,否則無法對接。
- 接受率優化:如果草稿模型太弱,導致接受率極低,頻繁的修正反而會增加開銷。因此需要選擇一個在領域內表現良好且足夠輕量的小模型。
- 硬體調度:需要高效地在 GPU 上切換兩個模型的上下文。

總結

如果說 PagedAttention 是優化了「空間」,Continuous Batching 是優化了「時間」,那麼 Speculative Decoding 就是在嘗試透過「預測」來跳過時間。它將 LLM 推論從純粹的序列模式推向了「平行驗證」模式,是實現即時 AI 對話體驗的關鍵技術之一。

留言區

歡迎分享你的想法!

發表留言

0/500

載入留言中…