Speculative Decoding(推測解碼)
3 秒看懂
用一個”小參謀”先猜多個 token,再讓”大將軍”一次性驗貨——猜對的直接放行,猜錯的當場修正。 本質是把逐 token 序列生成變成”批次猜測 + 並行驗證”,在不改變輸出分佈的前提下加速 LLM 推論解碼階段。
3 分鐘產業解釋
為什麼需要它?
大語言模型推論(Inference)分兩個階段:
| 階段 | 計算特徵 | 瓶頸 |
|---|---|---|
| Prefill(預填充) | 一次處理全部 prompt,矩陣運算密集,計算密集型(compute-bound) | 算力 |
| Decode(自迴歸解碼) | 每步只生成 1 個 token,需要反覆載入整個模型權重,訪存密集型(memory-bandwidth-bound) | 視訊記憶體頻寬 |
Decode 階段的硬體利用率極低——數十 GB 的權重只為了產出 1 個 token。Speculative Decoding 的核心洞見是:如果你能讓大型模型一次驗證多個 token 而不只是生成 1 個,就能把 memory-bound 變成 compute-bound,大幅提升吞吐。
它怎麼賺錢?
- 降低單請求延遲(Latency):使用者體驗響應更快,Chat 類產品留存提升。
- 降低單位推論成本(Cost/Token):同等算力可服務更多請求。
- 無需改模型權重:不重新訓練大型模型,只在推論側加一層排程邏輯,工程改造成本可控。
- 據 [Google Research, Leviathan et al., 2023, arXiv:2211.17192] 及 [DeepMind, Chen et al., 2023, arXiv:2302.01318] 的原始論文,理論上可實現 2-3 倍 解碼加速(具體取決於 draft 質量與任務)。
15 分鐘專家深入
1. 工作流程拆解
┌───────────────────────────────────────────────────────────┐
│ 一個完整的推測解碼輪次 │
│ │
│ Step 1: Draft(猜測) │
│ ┌─────────┐ │
│ │ 小模型 M_q│──→ x₁, x₂, x₃, ..., x_K (K 個候選 token) │
│ └─────────┘ │
│ ↓ 將 [已有序列 + x₁...x_K] 一起送入 │
│ Step 2: Verify(驗證) │
│ ┌─────────┐ │
│ │ 大型模型 M_p│──→ 對每個位置給出完整詞表分佈 │
│ └─────────┘ p(x₁|...), p(x₂|...), ..., p(x_K|...) │
│ ↓ │
│ Step 3: Accept/Reject(驗收) │
│ - 從左到右逐位置比對: │
│ 若 draft token xᵢ 被 target 接受 → 保留 │
│ 若在位置 j 首次被拒絕 → 從 target 分佈 p(xⱼ|...) 重取樣 │
│ 本輪共輸出 (被接受數 + 1) 個有效 token │
└───────────────────────────────────────────────────────────┘
2. 保真性證明(為什麼輸出分佈不變?)
這是 Speculative Decoding 最精妙之處。驗收採用修正拒絕取樣(Modified Rejection Sampling):
對於 draft 模型 $q(x|context)$ 和 target 模型 $p(x|context)$,對候選 token $x$:
$$ text(Accept with probability ) \min!\left(1,\ frac(p(x)){q(x)}\right) $$
若被拒絕,則從修正分佈重新取樣:
$$ p’(x) = \frac{\max(0,\ p(x) - q(x))}{\sum_{x’} \max(0,\ p(x’) - q(x’))} $$
數學上可證明:由此過程取樣得到的 token 序列與直接從 target 模型自迴歸取樣完全一致。 這意味著 Speculative Decoding 是無損的——不犧牲任何生成質量。
3. 加速比分析
設:
\alpha= 每位置平均接受率(draft 與 target 的”一致度”)- $K$ = 每輪推測的 draft token 數
c_d= draft 模型單次前傳成本c_t= target 模型驗證 $K$ 個 token 的成本
每輪期望有效輸出 token 數:
$$ E[tokens/round] = (1 - alpha^K) / (1 - alpha) $$
每輪總成本 \approx c_d \cdot K + c_t
對比標準自迴歸(每輪 1 token、成本 c_t),加速比:
$$ Speedup ~= (1 - alpha^K) / ((1 - alpha) * (1 + K * c_d / c_t)) $$
接受率 \alpha | 推測數 $K$ | 理論最大加速比(c_d \approx 0) |
|---|---|---|
| 0.6 | 5 | ≈ 2.31× |
| 0.7 | 5 | ≈ 2.77× |
| 0.8 | 5 | ≈ 3.36× |
| 0.9 | 5 | ≈ 4.10× |
| 0.9 | 10 | ≈ 6.51× |
⚠ 以上假設 draft 模型推論成本可忽略。實際中
c_d不為零,且 batch 場景下驗證成本結構更復雜,實際加速比通常 1.5-3× [行業經驗估算]。
技術原理(最深一層)
核心機制:並行驗證 vs 序列生成
標準自迴歸解碼的時間複雜度為 $O(n)$ 次 target 模型前傳($n$ = 生成長度),每次前傳的關鍵瓶頸是 KV-Cache 載入 + 權重載入。
Speculative Decoding 將其中 $n$ 次 target 前傳替換為:
標準解碼: T → T → T → T → T → T → T → T (8 次 target 前傳, 8 tokens)
推測解碼 (K=3):
D → D → D → T(驗證3個) → [假設接受2個]
D → D → D → T(驗證3個) → [假設接受3個]
D → D → T(驗證1個)
共 3+3+3+3+3+1 = 16 次 draft 前傳 + 3 次 target 前傳
若 c_d << c_t,總時間 ≈ 3 次 target 前傳 → 產出 8 tokens → ~2.7× 加速
驗證的計算圖
驗證階段的本質是 一次 Prefill 式前傳:
輸入: [token_0, token_1, ..., token_n, draft_x1, draft_x2, ..., draft_xK]
↑ 已有 KV-Cache ↑ 需計算注意力
Target Model 一次性為所有 K 個位置計算隱藏狀態 → 詞表 logits
關鍵: K 個 draft token 的計算是並行的 (受 GPU compute-bound 啟發)
這比 K 次序列 decode (每次 memory-bound) 高效得多
在實現中:
- KV-Cache 管理:target 模型需要為驗證位置預先分配 KV-Cache 空間。接受後釋放未用部分,拒絕後回退。對推論架構(vLLM、TensorRT-LLM)的排程器提出要求。
- Attention Mask:驗證時 K 個 token 之間需要 causal mask,但與 draft 階段的 mask 不同。
Draft 模型的選取策略
| 策略 | 描述 | 代表工作 |
|---|---|---|
| 獨立小模型 | 與 target 同系列但引數量小(如用 LLaMA-7B draft for LLaMA-70B target) | Leviathan et al., 2023 |
| 同模型量化版 | 用 target 模型的 4-bit 量化版做 draft(天然與 target 分佈接近) | [行業實踐,未充分揭露歸屬] |
| 淺層 Early Exit | 用 target 模型的前幾層輸出直接預測 token(Self-Speculative) | [推測實現方向,待具體論文確認] |
| 檢索增強 Draft | 從語料庫中檢索 n-gram 作為 draft token(零額外引數) | REST [He et al., 2023] |
| 多頭預測 | 在 target 模型最後層加多個預測頭,每頭預測不同未來位置 | Medusa [Cai et al., 2024] |
| 特徵外推 | 用 target 模型中間特徵線性外推下一層輸出 | EAGLE [Li et al., 2024] |
技術演進史
2022.11 Leviathan et al. (Google) 發表 "Fast Inference from Transformers via
Speculative Decoding" [arXiv:2211.17192] —— 首次正式提出架構
2023.02 Chen et al. (DeepMind) 發表 "Accelerating Large Language Model Decoding
with Speculative Sampling" [arXiv:2302.01318] —— 獨立提出類似方法
(Speculative Sampling / SpecSam)
2023.04 兩篇論文同期被 ICML 2023 接收,該方向獲得學術界廣泛認可
2023 H2 工程整合階段:各大推論架構 (vLLM, TensorRT-LLM, llama.cpp)
陸續實現 Speculative Decoding 支援
2023-24 變體爆發:
- Medusa:免 draft 模型,多頭並行預測
- REST:基於檢索的 draft,零額外引數
- EAGLE:基於特徵外推,高接受率
- Lookahead Decoding:Jacobi 迭代式並行解碼
- Self-Speculative:用自身淺層做 draft (如 draft & verify 用同一模型)
2024+ 與硬體協同:推測解碼改變了 decode 階段的計算特徵
(從 memory-bound 轉向 compute-bound),影響 GPU 選型與叢集排程策略
技術路線對比
| 維度 | 經典 Speculative Decoding | Medusa | EAGLE | Self-Speculative | REST (檢索) |
|---|---|---|---|---|---|
| 是否需要額外 draft 模型 | 是 | 否(額外 head) | 否(額外外推模組) | 否(同模型淺層) | 否(檢索庫) |
| 額外引數量 | 完整小模型 | 少量 head 引數 | 少量外推網路 | 無 | 無 |
| 分佈保真性 | ✅ 嚴格保真 | ⚠ 需修正取樣 | ✅ 嚴格保真 | ✅ 嚴格保真 | ✅ 嚴格保真 |
| 典型加速比 | 2-3× | 2-3× | 2.5-3.5× [作者報告] | 1.5-2× [估算] | 1.5-2.5× [估算] |
| 工程複雜度 | 中(兩模型排程) | 低(單模型加 head) | 中(特徵快取) | 低 | 低 |
| 訓練需求 | 無(draft 現成) | 需訓練 head | 需訓練外推模組 | 無 | 無 |
| 適用場景 | draft 與 target 分佈匹配時 | 通用,尤其大型模型 | 通用,接受率高 | 受限於淺層質量 | 文本分佈有規律時 |
上下游
上游(依賴什麼)
| 層級 | 要素 | 說明 |
|---|---|---|
| 模型層 | Target 大型模型 + Draft 小模型(或等價替代) | Draft 與 target 的分佈一致性決定接受率 |
| 演算法層 | 修正拒絕取樣數學架構 | 保證輸出分佈嚴格不變 |
| 架構層 | 推論引擎的排程器支援 | 需要處理 KV-Cache 回退、動態批處理中不同請求的推測長度差異 |
| 硬體層 | GPU/加速器的平行計算能力 | 驗證步驟變為 compute-bound,對算力(而非僅頻寬)的需求上升 |
下游(影響什麼)
| 受影響領域 | 影響方式 |
|---|---|
| LLM 推論服務 | 直接降低每 token 成本,提高吞吐 |
| 使用者體感延遲 | TTFT 不變,但 TPS(tokens/sec)提升 |
| GPU 選型邏輯 | 推測解碼使 decode 階段更偏 compute-bound,高算力卡(如 H100 SXM)vs 高頻寬卡的權衡發生變化 |
| Batching 策略 | 推測長度動態變化,對 continuous batching 的排程提出新挑戰 |
| 端側推論 | 在手機/邊緣裝置上,draft 模型可用極小模型實現,可行性高 |
關鍵指標
| 指標 | 含義 | 典型範圍 |
|---|---|---|
Acceptance Rate (\alpha) | 每個 draft token 被 target 接受的機率 | 0.5 - 0.9+ |
| Speculation Length ($K$) | 每輪推測的 draft token 數 | 3 - 8(常見),理論上可更高 |
| Speedup Factor | 相對於標準解碼的加速比 | 1.5× - 3×(實踐),理論更高 |
Overhead Ratio (c_d/c_t) | draft 模型單次前傳成本 / target 模型驗證成本 | 目標 < 0.1(越小越好) |
| Wall-clock Latency | 端到端生成延遲 | 降低 30%-70%(視場景) |
| Throughput (tokens/sec/GPU) | 單卡吞吐量 | 可提升 1.5-3× |
供需與市場資料
供給側
- 開源架構支援:vLLM(從 v0.4+ 開始支援推測解碼)、TensorRT-LLM(NVIDIA 官方支援)、llama.cpp(支援 draft model 推測解碼)、SGLang 等。據 [開源社群觀察,非精確統計],主流推論架構均已將推測解碼作為標準特性。
- 閉源 API:各主要 API 提供商(OpenAI、Anthropic、Google 等)是否在服務端使用推測解碼 [未充分揭露],但技術上完全可行且有強烈動機。
需求側
- LLM 推論的全球算力需求據 [多家行業報告綜合估算] 在 2024 年約佔 AI 算力總支出的 50% 以上,且推論佔比持續上升。
- 推測解碼作為一種純推論側最佳化,不需要額外訓練成本,部署門檻低,需求側採納意願強。
市場影響估算
如果推測解碼在行業中位數實現 2× 加速,相當於在不增加 GPU 的情況下將推論吞吐翻倍。對於年推論支出數十億美元級別的公司(如 [估算] OpenAI、Google、字節跳動等),即使僅覆蓋部分場景,節省的算力成本可達數億美元量級 [粗略估算]。
代表公司與資本對映
| 公司/團隊 | 角色 | 關聯標的/邏輯 |
|---|---|---|
| Google (DeepMind) | Speculative Decoding 兩大原始論文之一齣自 Google Research | Alphabet (GOOGL) |
| DeepMind | SpecSam 論文作者團隊 | Alphabet (GOOGL) |
| NVIDIA | TensorRT-LLM 原生支援推測解碼;推測解碼使推論更 compute-bound,可能提升高階 GPU 需求 | NVDA |
| vLLM 團隊 (UC Berkeley) | 開源推論引擎,率先整合推測解碼 | 未上市 / 開源生態 |
| Meta | LLaMA 系列是推測解碼最常見的 target/draft 組合 | META |
| SambaNova / Groq / Cerebras | 定製推論晶片/架構;推測解碼改變計算特徵,影響架構設計方向 | 各有融資/上市路徑 |
| 各大雲端廠商 | 推測解碼直接降低推論服務成本,提升單位算力營收 | AMZN (AWS), MSFT (Azure), GOOGL (GCP) |
資本影響邏輯
推測解碼本身是演算法層最佳化,不直接對應獨立商業模式,但:
- 利好高階 GPU:驗證階段變為 compute-bound,高算力卡(H100/B200)的優勢更明顯。
- 利好推論架構生態:支援推測解碼成為架構競爭力分水嶺。
- 利好小模型生態:高質量小模型作為 draft 的需求上升。
投資邏輯
看多理由
- 免費午餐:不改模型、不犧牲質量、純推論側最佳化——落地阻力小。
- 複合效應:與量化(Quantization)、KV-Cache 壓縮、Flash Attention 等技術正交,可疊加使用,進一步放大加速。
- 小模型複用價值:各廠商已訓練的中等規模模型(7B/13B)天然可做 draft,資產利用率提升。
- 邊際成本遞減:一旦推論架構適配完成,全行業可共享最佳化紅利。
需關注的風險
- Draft 模型質量問題:如果 draft 與 target 分佈差距大,接受率低,加速比趨近於 1,甚至因 overhead 而變慢。
- Batch 場景複雜化:大 batch 下推測解碼的收益可能被排程開銷稀釋(不同請求推測成功長度不同,導致 GPU 空泡)。
- MoE 模型的挑戰:對於 Mixture-of-Experts 模型,推測解碼的驗證階段需要頻繁的 All-to-All 通訊,實現更復雜。
- 架構迭代風險:如果未來出現非自迴歸架構(如擴散語言模型、SSM 變體),推測解碼的基礎假設(逐 token 自迴歸)可能被繞過。
常見誤讀糾偏
❌ 誤讀 1:“推測解碼會降低生成質量”
糾正:不會。 修正拒絕取樣的數學保證了輸出分佈嚴格等價於直接從 target 模型取樣。這不是近似,是精確等價。輸出質量完全取決於 target 模型本身,draft 模型隻影響速度、不影響質量。
❌ 誤讀 2:“推測解碼需要重新訓練大型模型”
糾正:不需要。 Target 模型完全不改動。Draft 模型通常是已有的小模型(或用量化版本、淺層擷取等方法獲得),不需要針對推測解碼進行專門訓練。部分變體(如 Medusa、EAGLE)需要訓練額外的小模組,但主模型權重凍結。
❌ 誤讀 3:“推測解碼就是投機取巧地多猜幾個 token,和 beam search 類似”
糾正:完全不同。 Beam Search 是改變解碼搜尋策略(搜尋更寬的候選空間),可能改變輸出分佈;Speculative Decoding 不改變搜尋策略(仍按原取樣方式),只是改變了計算的組織方式(猜測+驗證),且數學保證輸出分佈不變。
❌ 誤讀 4:“Draft 模型越小越好,因為推論更快”
糾正:有取捨。 Draft 模型越小,c_d 越低,但與 target 的分佈差距越大 → 接受率 \alpha 越低 → 每輪有效 token 數減少。最優 draft 模型大小是使 \alpha 足夠高的最小模型,而不是絕對最小的模型。經驗值:draft 模型引數量約為 target 的 1/5 到 1/10 可能是較好的平衡點 [基於公開實驗報告的估算,非普適結論]。
學習路徑
入門(1-2 小時)
- 先理解 LLM 自迴歸解碼的基本原理(為什麼是 memory-bound)
- 閱讀 [Leviathan et al., 2023] 的 Introduction 和 Figure 1(直覺圖解)
- 看一篇英文部落格(如 Lilian Weng 或 HuggingFace Blog 對 Speculative Decoding 的介紹)
進階(3-5 小時)
- 精讀 [Leviathan et al., 2023] 的 Section 3(修正拒絕取樣的數學推導)
- 精讀 [Chen et al., 2023] 的 Speculative Sampling 演算法虛擬碼
- 對比 Medusa 和 EAGLE 論文的方案差異
動手(1-2 天)
- 用 llama.cpp 或 vLLM 跑一個 Speculative Decoding demo,對比有/無推測解碼的延遲
- 調節 $K$(推測長度)和 draft 模型大小,觀察接受率和加速比變化
- 在 TensorRT-LLM 中嘗試量化版 draft(如 4-bit draft + 16-bit target)
深入研究
- 研究推測解碼在 batch 場景下的排程策略(連續批處理 + 推測長度動態變化)
- 關注推測解碼與 KV-Cache 壓縮、PagedAttention 的互動
- 探索推測解碼在非 Transformer 架構(如 SSM/Mamba)中的適用性
一句話總結
Speculative Decoding 用一個廉價的小模型快速猜測多個 token、再用昂貴的大型模型一次性並行驗證,以修正拒絕取樣數學保證輸出分佈嚴格不變,實現 2-3× 的推論加速——本質上是把 memory-bound 的逐 token 解碼變成 compute-bound 的批次驗證,是當前最具工程落地價值的 LLM 推論加速技術之一。
延伸閱讀與來源
| 來源 | 說明 |
|---|---|
| [Leviathan et al., 2023] “Fast Inference from Transformers via Speculative Decoding”, ICML 2023, arXiv:2211.17192 | 原始論文之一(Google Research) |
| [Chen et al., 2023] “Accelerating Large Language Model Decoding with Speculative Sampling”, ICML 2023, arXiv:2302.01318 | 原始論文之二(DeepMind) |
| [Cai et al., 2024] “Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads”, arXiv:2401.10774 | Medusa 變體 |
| [Li et al., 2024] “EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty”, arXiv:2401.15077 | EAGLE 變體 |
| [He et al., 2023] “REST: Retrieval-Based Speculative Decoding”, arXiv:2311.08252 | 檢索增強 draft 方案 |
| vLLM 官方文件 — Speculative Decoding | 工程實現參考 |
| NVIDIA TensorRT-LLM 文件 — Speculative Decoding | 工程實現參考 |
| Lilian Weng Blog, “Prompt Engineering” / “Large Transformer Model Inference Optimization” | 綜合性技術部落格 |
免責與準確度說明:本文中的數學公式基於 [Leviathan et al., 2023] 和 [Chen et al., 2023] 公開論文。加速比數值、市場估算等基於公開論文報告值與行業經驗推斷,已做標註。具體加速效果因模型、硬體、任務、batch size 等因素差異顯著,請以實際測量為準。