Self-Speculative 解碼
功能
使用同一模型在兩個不同 loop 深度 — L=2 用於快速 draft,L=8 用於品質驗證。不需要獨立的 draft 模型。
運作方式
- Draft 階段:每個 token 跑 2 次 loop block(快速)。以 greedy 生成 K 個 token。
- Verify 階段:對完整 draft 序列跑 8 次 loop block。逐位置比較 argmax。
- 接受:匹配的 token 保留。第一個不匹配被替換為 verify token。
- 獎勵:若全部 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 模型」就是主模型跑較少次。