推論與服務

推測解碼(speculative decoding)

自回歸生成很慢,因為每個 token 都要讓一個龐大的模型跑一次完整前向傳遞,而這些傳遞是記憶體頻寬受限、不是算力受限的——GPU 大部分時間都在等權重搬進來,而不是在做乘法。推測解碼正是利用這段閒置的算力:一個便宜的草稿模型先猜出一小段未來的 token,再讓大的目標模型用一次批次化的前向傳遞同時檢查全部。那些小模型本來就猜得對的「簡單」token 幾乎免費被接受,只有真正困難的 token 才逼大模型認真做決定。

關鍵在於這個驗證是精確的、而非近似的。給定 γ 個草稿 token,目標模型跑一次平行傳遞,再用一條改良的拒絕採樣規則,以特定機率接受每個草稿 token,使最終輸出的分布與單獨從目標模型採樣完全相同。一旦出現第一次拒絕,演算法就從一個調整後的殘差分布重新採樣該位置,並丟棄草稿其餘部分。於是你是「每個被接受的區塊」付一次大前向傳遞,而非「每個 token」付一次,品質可證明不變。

加速比由接受率 α 與草稿長度 γ 決定:搭配良好的草稿可讓目標模型的呼叫次數少兩到三倍。代價是要多託管一個模型,以及一個需要調的旋鈕——接受率低時草稿太長反而浪費驗證。它現在已是多數正式服務堆疊的預設加速手段。

\mathbb{E}[\#\text{accepted}] = \frac{1-\alpha^{\gamma+1}}{1-\alpha}

在接受率 α、草稿長度 γ 下,每次驗證步驟的期望接受 token 數;α 越高,每 token 的成本越被攤平。

推測解碼只改變成本、絕不改變輸出分布——它在構造上就是無損的,這點與用準確度換速度的量化或蒸餾不同。

又稱
speculative sampling推測採樣draft-and-verify decoding