- リクエスト本文の先頭が同じものを同じインスタンスへ送るPREFIX_AWARE戦略を追加
- Llama 3.1 70Bの検証でP50 TTFT最大77%減、KVキャッシュヒット率は25%から80%超へ
- モデル再デプロイは不要で、エンドポイント設定の更新により戦略を切り替えられる
何が発表されたのか
AWSは、Amazon SageMaker Inferenceのリアルタイム推論エンドポイントに「prefix-aware routing」と呼ばれる新しいルーティング戦略を追加しました。リクエストの先頭部分を見て、同じ先頭を持つリクエストを同じインスタンスに継続的に送る仕組みです。狙いは、LLMのサービングフレームワークが持つプレフィックスキャッシュを実際に機能させることにあります。
モデルコンテナやサービングフレームワーク側の変更は不要で、処理はエンドポイントのルーティング層だけで完結するとされています。呼び出し方法も従来どおりで、InvokeEndpointとInvokeEndpointWithResponseStream、およびOpenAI互換のChat Completion APIをそのまま使えます。戦略はエンドポイント設定で指定し、更新によって切り替えられるため、モデルの再デプロイは要りません。
スケールすると崩れる仕組み
LLMに送るプロンプトは、指示文・参照文書・会話履歴といった固定部分と、ユーザー入力の可変部分に分かれることが少なくありません。原文の例では、カスタマーサポートbotのリクエストが3,000トークンの指示文と50トークンの質問で構成され、何百・何千というリクエストで同じ3,000トークンが毎回処理されていました。
vLLMやTensorRT-LLMには、同じ先頭部分のKVペアを再利用するプレフィックスキャッシュがあり、time-to-first-token(TTFT)を大きく減らせます。ところがインスタンスを複数並べると、既定のランダム分散によって同じプレフィックスが別々のインスタンスに散らばります。どのインスタンスも同じ先頭を十分な頻度で見ないためキャッシュが育たず、機能はあっても活かせない状態でした。
prefix-aware routingは、この「送り先の一貫性」をルーティング層で担保します。過負荷保護として、人気のあるプレフィックスの送り先が設定した同時実行数の上限に達している場合は、より空いているインスタンスへ回す仕組みもあります。インスタンスを増減したときも大半のリクエストは同じ送り先に届き続け、キャッシュが毎回無効化されにくい設計とされています。
ベンチマークの結果
検証はLlama 3.1 70B Instructをml.p5.48xlarge 7台に載せ、vLLMのプレフィックスキャッシュを有効にした構成で、既定のランダムルーティングと比較されました。単一モデルエンドポイント、推論コンポーネントエンドポイント、ネイティブのInvoke API、OpenAI互換APIをまたぐ16通りの構成を実行し、いずれも成功率100%だったと報告されています。
8,000トークンの共通プレフィックスを1時間継続する長い文脈の条件では、P50 TTFTが71〜77%減、P90 TTFTが33〜37%減、スループットが15〜16%増となりました。KVキャッシュのヒット率は約25%から82%へ上昇しています。共通部分が長いほどスキップできる計算が増えるため、効果が大きくなると説明されています。
文脈が短い場合は効果が小さくなります。可変長のShareGPT形式の会話を30分回した条件では、P50 TTFTが13〜16%減、P90 TTFTが24〜37%減、スループットは1.7〜2.0%増、ヒット率は約30〜80%でした。ルーティング処理の追加コストは1リクエストあたり1.3〜1.9ミリ秒で、テスト時のモデルTTFTが63〜280ミリ秒だったことからすると小さいとされています。7台への配分も各13.3〜15.4%と偏りは1%以内に収まりました。
3つのルーティング戦略
今回の追加により、SageMaker Inferenceのリアルタイムエンドポイントが選べるルーティング戦略は3つになりました。既定のRANDOMはリクエストを全インスタンスへ均等に配り、LEAST_OUTSTANDING_REQUESTSは実行中のリクエストが最も少ないインスタンスへ送ります。
新しいPREFIX_AWAREは、同じプロンプト先頭部分を持つリクエストを同じインスタンスへ送ります。戦略は本番バリアント単位で設定でき、エンドポイント設定を更新するだけでモデルを再デプロイせずに切り替えられるとされています。
効果が出るのは、リクエストの先頭が共通しているワークロードです。原文では、同じ文書を前置きするRAG、履歴を積み上げるマルチターン会話、定型の指示文を毎回送るテンプレート型bot、同じファイル内容を文脈に含めるコード補完が例として挙げられています。
導入時の注意点
前提として、コンテナ側でプレフィックスキャッシュを有効にしておく必要があります。vLLMでは最近のバージョンで既定で有効ですが、他のフレームワークでは明示的な設定が必要になる場合があります。またインスタンスが1台ではどの戦略でも送り先は同じになるため、効果はありません。
挙動はPrefixLength(1024〜65536)とConcurrencyThreshold(1〜1024)の2つのパラメータで制御します。PrefixLengthはネイティブInvoke APIではリクエスト本文の先頭からのバイト数、OpenAI互換APIでは抽出されたメッセージ本文の文字数として扱われます。AWSは、共通プレフィックスの長さに少し余裕を足した値から始めることや、JSONの空白やキー順などのシリアライズを統一することを推奨しています。
マルチテナントでキャッシュの文脈を分けたい場合は、ネイティブAPIではX-Amzn-SageMaker-Prefix-Aware-Idヘッダ(最大64 ASCII文字)、OpenAI互換APIではprompt_cache_keyフィールドを指定します。推論コンポーネントエンドポイントや動的LoRAアダプタにも対応し、LoRAではアダプタが読み込まれたインスタンス群の中でプレフィックスに基づく選択が行われると説明されています。
| 項目 | RANDOM(既定) | LEAST_OUTSTANDING_REQUESTS | PREFIX_AWARE(新) |
|---|---|---|---|
| リクエストの配り方 | 全インスタンスへ均等に分散 | 実行中リクエストが最も少ないインスタンスへ | 同じ先頭部分は同じインスタンスへ |
| 推奨される場面 | 汎用ワークロードや非LLMモデル | 処理時間がばらつくワークロード | 先頭が共通するLLMワークロード |
The longer your shared prefix, the bigger the win. Long context workloads benefit the most because there is more computation to skip on each cache hit.
共通のプレフィックスが長いほど効果は大きくなります。長い文脈のワークロードは、キャッシュヒットのたびにスキップできる計算が多いため、最も大きな恩恵を受けます。
今後の見通し
プレフィックスを意識したルーティングは、LLMサービングの標準的な機能になっていくとみられます。vLLMやTensorRT-LLMのプレフィックスキャッシュを活かすにはルーティング層の協力が必要なため、他の推論基盤でも同様の戦略が検討される可能性があります。判断材料になるのは、自社のモデルとワークロードで実際にどの程度のヒット率が出るかです。原文の数値はLlama 3.1 70B、ml.p5.48xlarge、vLLMという特定条件の結果であり、プロンプト長やリクエストの共通度合いによって効果は変わります。SageMakerの詳細オブザーバビリティでKVキャッシュのヒット率を測ることが、導入判断の出発点になりそうです。
日本の開発者・IT企業にとっての意味
日本のIT企業にとって、この発表はLLMサービスの応答速度をアプリ側の改修なしで改善できる選択肢が増えたことを意味します。すでにSageMakerのリアルタイムエンドポイントでvLLMなどを使っている場合、エンドポイント設定にPREFIX_AWAREを指定するだけで、同じ指示文や参照文書を毎回送っている構成のTTFTを下げられる可能性があります。効果を左右するのは、プロンプト先頭が本当に共通化されているか、JSONのシリアライズが統一されているかという地味なポイントです。RAGや社内チャットボット、コード補完のように先頭が固定されやすい用途では恩恵が期待しやすい一方、リクエストごとに先頭がばらつく用途ではRANDOMのままでよいとされています。導入後はKVキャッシュのヒット率を計測し、PrefixLengthを調整する進め方が現実的です。
気になる点
- 既存のエンドポイントでも使えますか。モデルの再デプロイは必要ですか
- AWSは、エンドポイント設定の更新によって戦略を切り替えられ、モデルの再デプロイは不要としています。ただし新しいRoutingStrategyとPrefixAwareRoutingConfigのパラメータを使うには、AWS SDKまたはCLIを最新版に更新する必要があるとされています。まずは利用中のSDKとCLIのバージョンを確認することになります。
- prefix-aware routingを使うと料金は増えますか
- 原文には、この機能自体の追加料金や課金体系についての記載はありません。ルーティング処理のオーバーヘッドは1リクエストあたり1.3〜1.9ミリ秒と報告されていますが、これは性能の話であり費用の話ではありません。料金の扱いは現時点では公表されていないため、導入前に最新のSageMakerの料金情報を確認する必要があります。
- どんなワークロードなら効果が期待できますか
- リクエストの先頭部分が共通しているワークロードです。原文ではRAG、マルチターン会話、定型の指示文を毎回送るテンプレート型bot、同じファイル内容を文脈に含めるコード補完が挙げられています。逆に、リクエストの先頭が共通しない汎用ワークロードや非LLMモデルでは、既定のRANDOMが推奨されています。
用語解説
- KVキャッシュ
- 文章生成の過程で計算されるキーと値の組を保持しておく仕組み。同じ文脈の再計算を省き、最初のトークンが出るまでの時間を短くする。
- TTFT
- Time To First Token。リクエストを送ってから最初のトークンが返るまでの時間。P50は中央値、P90は90パーセンタイルを指す。
- プレフィックスキャッシュ
- プロンプト先頭部分について計算済みのKVを再利用する機能。vLLMやTensorRT-LLMが備え、ルーティング次第で効果が変わる。
- プレフィックス
- ここではリクエスト本文の先頭部分。指示文や参照文書など、複数のリクエストで共通する部分を指す。
- LoRA
- Low-Rank Adaptation。大規模モデルに小さな追加パラメータを足し、用途ごとに振る舞いを変える手法。
出典
Reduce LLM latency with prefix-aware routing on Amazon SageMaker Inference
AI導入も顧問も、お任せください
何から手をつけるか、どこまでAIに任せるか。自社の業務に合わせて整理し、導入から運用まで伴走します。相談だけでも構いません。
AI導入について相談する