キャッシュアウェアルーティング(キャッシュアウェアルーティング)
LLM推論サービングにおいて、リクエストを処理するサーバーを選択する際にKVキャッシュの状態を考慮するルーティング戦略。キャッシュヒット率を最大化するために、同一プレフィックスを持つリクエストを同じサーバーに振り分ける。
キャッシュアウェアルーティングとは
キャッシュアウェアルーティング(Cache-Aware Routing)は、複数のLLM推論サーバーにリクエストを振り分ける際、各サーバーが保持するKVキャッシュの状態を考慮して最適なサーバーを選択するルーティング戦略である。
標準的なロードバランシング(ラウンドロビン、最小接続数)では、リクエストがランダムに分散されるため、同じシステムプロンプトやコンテキストを持つリクエストが異なるサーバーに送られ、各サーバーで同じプレフィックスのKVキャッシュを重複計算することになる。キャッシュアウェアルーティングはプロンプトのプレフィックスに基づいてConsistent Hashing や類似度ベースのルーティングを行い、キャッシュ再利用率を最大化する。
基本的なルーティング戦略
Consistent Hashing
プロンプトの先頭N文字(またはシステムプロンプト全体)のハッシュ値に基づいてサーバーを選択する。同一プレフィックスのリクエストは常に同じサーバーに送られるため、KVキャッシュのヒット率が最大化される。
| 方式 | ルーティング基準 | KVキャッシュヒット率 | 負荷分散 |
|---|---|---|---|
| ラウンドロビン | 順番 | 低い(~1/N) | 均等 |
| 最小接続数 | 接続数 | 低い(~1/N) | 適応的 |
| Consistent Hashing | プレフィックスハッシュ | 高い(~100%) | 偏りあり |
| 重み付きハッシュ | プレフィックスハッシュ + 負荷 | 高い(~80-90%) | 適応的 |
Prefix-Aware Routing
SGLang のRadixAttention で実装されている手法で、プロンプトのプレフィックスツリー(Radix Tree)をサーバー間で共有し、最も長い共通プレフィックスを持つサーバーにリクエストをルーティングする。Consistent Hashingより柔軟で、部分的なプレフィックス一致でもキャッシュを再利用できる。
負荷考慮型ルーティング
キャッシュヒット率だけを追求すると特定サーバーに負荷が集中する。実運用では、キャッシュヒット率と負荷分散のバランスを取る複合的な戦略が必要である。
- ハイブリッドスコアリング: score = α × cache_hit_ratio + (1-α) × (1 - server_load)。αは0.6-0.8が推奨
- しきい値ベース: キャッシュヒットするサーバーの負荷が閾値(例: GPU利用率80%)未満ならそこに送り、超えていれば次善のサーバーにフォールバック
- オーバーフロー: 主サーバーのキューが上限に達したら、キャッシュミスを許容して空きサーバーに振り分け
実装例とツール
SGLang RadixAttention
SGLang はRadix Tree ベースのKVキャッシュ管理と Prefix-Aware Routing を統合した推論フレームワークである。マルチターン会話やFew-shot推論で、共通プレフィックス部分のKVキャッシュを自動的に再利用する。ベンチマークでは、vLLM比で1.5-3倍のスループット向上が報告されている。
vLLM Disaggregated Prefill
vLLMの分散推論では、プリフィルノードとデコードノードを分離し、プリフィルノードでKVキャッシュを生成してデコードノードに転送する。ルーティングレイヤーは同一プレフィックスのリクエストを同じプリフィルノードに集約し、KVキャッシュの再利用を最大化する。
LiteLLM Router
LiteLLM のルーターは複数のLLMプロバイダ間でリクエストを分散するが、キャッシュアウェアルーティングの機能も備えている。同一モデル・同一プロバイダの複数エンドポイント間で、プロンプトキャッシュを考慮したルーティングが可能である。
運用上の考慮事項
キャッシュアウェアルーティングの導入にあたって、いくつかの実運用上の課題がある。
サーバー追加・削除時のキャッシュ再分散: Consistent Hashingではサーバーの追加・削除時に影響範囲が最小化されるが、それでもキャッシュの一部が無効化される。仮想ノード(Virtual Node)を使って影響範囲をさらに分散させることが推奨される。
キャッシュ状態の可視化: 各サーバーのKVキャッシュ利用率、ヒット率、エビクション頻度をPrometheus等で収集し、ルーティング品質を継続的にモニタリングする必要がある。
コールドスタート: 新しいサーバーやキャッシュが空のサーバーは、キャッシュが温まるまでレイテンシが高くなる。ウォームアップフェーズで代表的なプロンプトを事前に処理してKVキャッシュを投入する手法がある。
FAQ
キャッシュアウェアルーティングはどのくらいスループットが向上しますか?
ワークロードに大きく依存する。共通プレフィックスが長い(システムプロンプト10,000トークン以上)マルチテナント環境では、ラウンドロビン比で2-5倍のスループット向上が期待できる。プレフィックスの多様性が高い環境ではキャッシュヒット率が下がり、効果は限定的になる。
小規模な単一サーバー構成でも意味がありますか?
単一サーバーでは「どのサーバーに送るか」の選択がないため、ルーティング自体は不要である。ただし、SGLang のRadixAttentionのように同一サーバー内でプレフィックスベースのKVキャッシュ管理を行う技術は、単一サーバーでも有効である。バッチ内の複数リクエストが共通プレフィックスを持つ場合にKVキャッシュを共有できる。
プロンプトキャッシュ(Anthropic/OpenAI)との関係は?
プロンプトキャッシュはAPIプロバイダ内部でKVキャッシュを管理する仕組みであり、キャッシュアウェアルーティングはプロバイダ内部のサーバー間でリクエストを最適に振り分ける仕組みである。両者は同じ目標(KVキャッシュの再利用最大化)を異なるレイヤーで実現している。自前でLLMをホスティングする場合はキャッシュアウェアルーティングが直接的な最適化手段となる。