跳至主要内容

Self-Speculative 解碼

功能

使用同一模型在兩個不同 loop 深度 — L=2 用於快速 draft,L=8 用於品質驗證。不需要獨立的 draft 模型。

運作方式

  1. Draft 階段:每個 token 跑 2 次 loop block(快速)。以 greedy 生成 K 個 token。
  2. Verify 階段:對完整 draft 序列跑 8 次 loop block。逐位置比較 argmax。
  3. 接受:匹配的 token 保留。第一個不匹配被替換為 verify token。
  4. 獎勵:若全部 K 個 token 匹配,從 verify logits 中多取樣一個 token。

量測

H100 / 407M,L_draft=2,L_verify=8:

  • 2.77× 吞吐提升
  • 零額外參數 — 兩個深度使用相同權重
  • Greedy 輸出與 generate(loops=8) bit-exact

用法

tinyloop model.tinyloop speculate \
--draft-loops 2 --verify-loops 8 --draft-ahead 4
model.generate_speculative(prompt,
draft_loops=2, verify_loops=8, draft_ahead=4)

為何僅 looped

標準推測式解碼(Leviathan et al., 2023)需要獨立的較小 draft 模型 — 獨立訓練、獨立部署、消耗額外 VRAM。TinyLoop 使用相同權重以較低深度執行。「draft 模型」就是主模型跑較少次。