AI・機械学習
中級
ドラフトモデル(ドラフトモデル)
投機的デコーディングで使用する小型の補助モデル。大型ターゲットモデルの検証前に複数トークンを高速に仮生成する役割を持つ。
0 回閲覧
0 いいね
2026/6/8 更新
関連タグ
投機的デコーディング
ドラフトモデル
推論高速化
LLM推論
スペキュラティブデコーディング
ドラフトモデル(Draft Model)
ドラフトモデルは、投機的デコーディング(Speculative Decoding)の中核コンポーネント。大型のターゲットモデルと並行して動作し、複数トークンを高速に「仮生成」する小型モデル。
投機的デコーディングの動作原理
1. ドラフトモデルが k トークンを生成(高速)
Draft: [t1_d, t2_d, t3_d, t4_d, t5_d]
2. ターゲットモデルが k+1 位置を1回のフォワードパスで並列評価
Target: [P(t1), P(t2), P(t3), P(t4), P(t5), P(t_{k+1})]
3. ドラフトとターゲットの確率比で採択/棄却判定
採択率α_i = min(1, P_target(t_i) / P_draft(t_i))
4. 最初に棄却された位置まで確定、その後は通常生成
採択率の重要性
ドラフトモデルの品質はターゲットとの分布一致度で測られる。採択率αが高いほどパスあたりの確定トークン数が増加:
期待確定トークン数 = (1 - α^k) / (1 - α)
α=0.8, k=5: 期待値 ≈ 3.36 トークン/パス
α=0.9, k=5: 期待値 ≈ 4.10 トークン/パス
α=0.5, k=5: 期待値 ≈ 1.94 トークン/パス
モデルペア設計
同ファミリー方式(最も一般的):
Meta Llama-3.1-70B(ターゲット)+ Llama-3.2-1B(ドラフト)
Google Gemma-9B(ターゲット)+ Gemma-2B(ドラフト)
Mistral-7B(ターゲット)+ Mistral-100M(ドラフト)
同ファミリーはトークナイザーが一致し、語彙分布が近いため採択率が高い。
蒸留ドラフト(Medusa):
class MedusaModel(nn.Module):
def __init__(self, base_model, num_heads=5):
self.base = base_model
self.medusa_heads = nn.ModuleList([
nn.Linear(hidden_size, vocab_size)
for _ in range(num_heads)
])
EAGLE(2024年)
ドラフトモデルの最新改良版。ターゲットモデルの特徴量(hidden states)をドラフトモデルに入力することで採択率を大幅向上:
- 採択率: 従来投機的デコーディングより 20-30% 高い
- Vicuna-7B で 3.05倍 高速化(GPU/精度変化なし)
def eagle_draft(target_hidden_states, draft_lm_head, input_ids):
draft_logits = draft_lm_head(target_hidden_states)
return draft_logits
vLLMでのドラフトモデル設定
vllm serve meta-llama/Llama-3.1-70B-Instruct \
--speculative-model meta-llama/Llama-3.2-1B-Instruct \
--num-speculative-tokens 5 \
--speculative-draft-tensor-parallel-size 1
GPU メモリ要件
Llama-3.1-70B(BF16): ~140 GB
Llama-3.2-1B(BF16): ~2 GB(追加コスト)
→ 2 GBの追加コストで最大3-4倍のスループット向上
適用シナリオ
- コード生成: 構文パターンが予測しやすく採択率が高い
- RAG/定型応答: テンプレート的な出力で効果大
- 数学推論: 不規則な出力で効果小、Chain-of-Thoughtには注意