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には注意
この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/8