AI・機械学習
上級

ツリー投機的デコーディング(ツリートウキテキデコーディング)

投機的デコーディングを木構造に拡張した手法。ドラフトモデルが1つの線形シーケンスではなく複数の分岐候補を木構造で生成し、ターゲットモデルがTree Attention(木構造注意機構)で全分岐を同時検証する。SequoiaやMedusa v2が代表的な実装で、線形方式と比べて受理トークン数の期待値を40〜80%向上させる。

0 回閲覧
0 いいね

ツリー投機的デコーディングとは

ツリー投機的デコーディング(Tree Speculative Decoding)は、投機的デコーディングの発展形で、ドラフトモデルの出力を1本の線形シーケンスではなく木構造(ツリー)で管理する手法である。通常の投機的デコーディングでは、ドラフトモデルがK個のトークンを1本のパスで生成し、最初の却下位置以降はすべて破棄される。ツリー方式では各位置で複数の候補トークンを分岐させることで、却下時にも別の分岐パスが受理される可能性を維持し、1ステップあたりの受理トークン数を増加させる。

線形方式との比較

項目線形投機的デコーディングツリー投機的デコーディング
ドラフト構造1本のシーケンス(K個)木構造(B分岐 × D深さ)
検証トークン数K個B^1 + B^2 + ... + B^D 個
受理パス数1本最大B^D本(最良パスを選択)
受理トークン期待値Σ(i=1→K) α^i線形方式の1.4〜1.8倍
検証コストK個のフォワードパス相当ツリーサイズ分のフォワードパス相当
メモリ使用量K × d × Lツリーサイズ × d × L
注意機構標準の因果マスクTree Attention(専用マスク)

具体例

受理率α=0.7、投機トークン数K=5の場合。

線形方式: 受理トークン期待値 = 0.7 + 0.7² + 0.7³ + 0.7⁴ + 0.7⁵ ≈ 2.17

ツリー方式(2分岐×3深さ、ノード数14): 最良パスの受理トークン期待値 ≈ 3.5(線形の約1.6倍)

Tree Attention(木構造注意機構)

注意マスクの設計

通常の因果的注意(Causal Attention)は下三角行列のマスクを使用し、各トークンが自身より前の全トークンに注意を向ける。ツリー投機的デコーディングでは、木構造のパス関係に基づく注意マスクを使用する。

あるノードが注意を向けるのは、ルートから自身までのパス上にある祖先ノードのみ。兄弟ノードや他のパスのノードには注意を向けない。

マスクの構築例

3分岐×2深さのツリー(ノード数: ルート1 + 子3 + 孫9 = 13)の場合。

ノード配置: [root, c1, c2, c3, c1-1, c1-2, c1-3, c2-1, c2-2, c2-3, c3-1, c3-2, c3-3]

注意マスク(1=注意可能、0=マスク):
root:  [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
c1:    [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
c2:    [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
c3:    [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
c1-1:  [1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
...

GPU実装の最適化

Tree Attentionの注意マスクは疎(sparse)であるため、FlashAttention v2の変形カーネルや専用のCUDAカーネルが必要。主要な最適化手法は以下の通り。

  • Sorted Tree Linearization: ツリーノードをDFS(深さ優先探索)順に並べ替え、注意マスクをブロック対角行列に近づける
  • Shared Prefix Caching: 共通の祖先パスのKVキャッシュを全分岐で共有し、メモリ使用量を削減
  • Dynamic Tree Pruning: 受理確率が低い分岐を検証前に枝刈りし、計算コストを削減

主要な実装

Sequoia(2024年)

Carnegie Mellon大学が発表。動的にツリー構造を最適化する手法。

  • ドラフトモデルの出力確率に基づいて、各位置の分岐数を動的に決定
  • 高確率のトークンが多い位置では分岐を増やし、不確実な位置では分岐を減らす
  • ハードウェア特性(メモリ帯域幅、演算能力)も考慮してツリーサイズを自動チューニング
  • 線形方式と比べて1.3〜1.6倍の追加高速化を達成

Medusa v2(2024年)

Meta Researchが発表。Medusa v1の複数ヘッド予測をツリー構造に拡張。

  • 各Medusaヘッドがtop-k個の候補トークンを出力
  • 全ヘッドの候補の直積(Cartesian Product)からツリーを構築
  • Tree Attentionで全候補を同時検証
  • ヘッド数3、top-k=3の場合、ツリーサイズは最大27ノード
  • 線形Medusa v1と比べて1.4〜1.8倍の高速化

EAGLE-2(2024年)

Microsoft Researchが発表。EAGLE v1の自己回帰ドラフトヘッドをツリー化。

  • ドラフトヘッドの出力から信頼度の高い分岐を選択的に展開
  • Confidence-based pruning: 確率が閾値以下の分岐を早期に枝刈り
  • 動的な分岐数(1〜5)で計算コストとリターンのバランスを最適化
  • Llama 2 70B + Chat でベンチマーク、線形EAGLE v1比で25〜40%の追加高速化

ツリー構造の設計パターン

固定ツリー(Static Tree)

事前に定義した固定のツリー構造を全ステップで使用する。

ツリー形状ノード数検証コスト用途
2分岐×3深さ14低メモリ制約のある環境
3分岐×2深さ12低浅い探索で十分なタスク
4分岐×3深さ84高受理率が低いタスク
2分岐×5深さ62中コード生成(深い推測が有効)

動的ツリー(Dynamic/Adaptive Tree)

ドラフトモデルの出力確率に基づいてステップごとにツリー構造を動的に変更する。

  • 高エントロピー位置(文の先頭、選択肢が多い箇所): 分岐を多くして候補を広く探索
  • 低エントロピー位置(助詞、閉じ括弧、明確な続き): 分岐を1つに絞り深く探索
  • 全体のノード数はハードウェアの計算能力に合わせた上限(通常16〜64)内で配分

トークン予算の配分

GPUの処理能力に応じて、1ステップで検証可能なトークン数には実用的な上限がある。

  • NVIDIA A100 80GB: 最大64ノード(性能低下なし)
  • NVIDIA H100 80GB: 最大128ノード
  • Apple M2 Ultra 192GB: 最大32ノード

この予算をツリーの幅(分岐数)と深さに配分するのが設計のポイント。

検証後のパス選択

ツリー内の複数パスが(部分的に)受理された場合、最終出力として1つのパスを選択する必要がある。

選択基準

  1. 最長受理パス: 受理されたトークン数が最も多いパスを選択(最も一般的)
  2. 最高確率パス: 受理されたトークンの累積確率が最も高いパスを選択
  3. ハイブリッド: 長さが同じ場合に確率でタイブレーク

よくある質問(FAQ)

Q1: ツリー投機的デコーディングは常に線形方式より速いですか? A: 受理率が非常に高い場合(α>0.9)は線形方式でもほぼ全トークンが受理されるため、ツリー方式の追加コスト(メモリ、Tree Attention計算)が相対的に大きくなり、線形方式が有利。受理率0.5〜0.8の範囲でツリー方式の優位性が最大化する。

Q2: ツリーサイズの上限はどう決めますか? A: GPUのメモリ帯域幅と演算能力から決まる。実用的にはA100で64ノード、H100で128ノードが目安。ノード数を増やしすぎるとTree Attentionの計算時間がターゲットモデルのフォワードパスより長くなり、逆に遅くなる。

Q3: 既存のフレームワークでツリー方式を使うにはどうしますか? A: SGLang(v0.2+)がEAGLE-2のツリー投機的デコーディングをネイティブサポート。vLLM(v0.5+)もMedusa v2のツリー検証に対応。llama.cppは2025年時点で線形方式のみだが、ツリー対応のPRが進行中。

Q4: 複数のドラフトモデルの出力を1つのツリーに統合できますか? A: 可能。異なるドラフトモデル(例: n-gram + 小型LLM + Medusaヘッド)の候補を1つのツリーに統合し、Tree Attentionで一括検証する手法が提案されている(Hybrid Tree Speculative Decoding, 2025年)。各ドラフトソースの強み(n-gramは繰り返しに強い、LLMは新規文脈に強い)を相補的に活用できる。

まとめ

  • ツリー投機的デコーディングはドラフトを木構造に拡張し、受理トークン数の期待値を線形方式の1.4〜1.8倍に向上
  • Tree Attention(木構造注意機構)により全分岐を1回のフォワードパスで同時検証
  • Sequoia(動的ツリー最適化)、Medusa v2(複数ヘッドの直積ツリー)、EAGLE-2(信頼度ベース枝刈り)が主要実装
  • 受理率0.5〜0.8の範囲で線形方式に対する優位性が最大化
  • ツリーサイズはGPUメモリ帯域幅に依存し、A100で64ノード、H100で128ノードが実用上限