VIP 專屬 部署與推理優化 實戰

推測解碼:在不換硬體的前提下加速生成

用小模型草擬、大模型驗證,生成速度常能提升一到兩倍。

部署與推理優化教程封面

逐 token 生成的瓶頸是記憶體頻寬:每產生一個 token 都要把整個模型的權重讀一遍。推測解碼(speculative decoding)的想法是——既然讀一次權重可以驗證多個 token,那就先用便宜的方法猜幾個。

流程是:草稿模型快速產生 k 個候選 token,主模型一次性驗證這 k 個,接受正確的部分、從第一個錯的地方重來。因為驗證是平行的,所以只花一次前向傳遞的時間。

三種草稿來源

  • 小模型草稿:用同系列的小模型,接受率高但需要額外載入一個模型。
  • n-gram 草稿:從已生成的內容中找重複模式,零額外成本。對含大量重複的任務(程式碼、結構化輸出、引用原文)特別有效。
  • 自我推測:用模型自身的淺層產生草稿,不需額外模型。

效果取決於接受率

# 加速比的粗略估算
# k: 每次草擬的 token 數;a: 平均接受率
# 加速比 ≈ (1 + k*a) / (1 + k*c)   c 為草稿模型的相對成本

for k in [3, 5, 8]:
    for a in [0.5, 0.7, 0.85]:
        speedup = (1 + k*a) / (1 + k*0.15)
        print(f'k={k} 接受率={a:.0%} → 約 {speedup:.2f}x')

什麼任務接受率高

  • 結構化輸出:JSON 的欄位名、括號、引號高度可預測,接受率常常超過 0.8。
  • 程式碼生成:語法結構重複性高。
  • 引用原文的摘要:大段複製原文時幾乎全接受。
  • 創意寫作:接受率低,可能反而變慢。

n-gram 草稿的實作概念

def ngram_draft(generated, prompt, k=5, n=3):
    """在 prompt+generated 中找出與最近 n 個 token 相同的片段,
       取其後續 k 個 token 當草稿。零成本,對重複內容極有效。"""
    pattern = generated[-n:]
    hay = prompt + generated
    idx = hay.rfind(pattern, 0, len(hay) - n)
    return hay[idx + n: idx + n + k] if idx >= 0 else None

輸出必須完全一致

推測解碼的一個重要性質是:在正確實作下,輸出與不用推測解碼時完全相同。它只是加速,不改變結果。如果你發現輸出變了,那是實作有誤,不是預期行為。

什麼時候不該開

  • 批次大小已經很大時——GPU 已經被填滿,推測解碼沒有空閒算力可用,反而變慢。
  • 接受率低於 0.4 的任務。
  • 記憶體吃緊時,多載一個草稿模型可能排擠 KV 快取。
先在低併發的互動式服務上試。推測解碼對「單一請求要快」最有價值,對「大量請求要吞吐」幫助有限甚至為負。
🔒

訂閱後繼續閱讀全文

本篇為訂閱者專屬內容。訂閱後可取得下列權限:

  • 解鎖全部內容權限
  • 閱讀不限篇數
  • 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6

一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。

立即訂閱

金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策