Chunked Prefill
チャンク化プリフィルが、長いプロンプトをトークンチャンクに分割することでLLMの推論レイテンシとスループットを改善し、同時実行ワークロード下でよりスムーズなサービングを実現する仕組みを学びます。
チャンク化プリフィルは、長い入力プロンプトを、プロンプト全体を中断せずに一度で処理するのではなく、より小さなtokenのグループに分割する推論スケジューリング手法です。推論エンジンは、これらのチャンクを他のリクエストのトークン生成とインターリーブできるため、1つの長いプロンプトがGPUを独占することを防げます。その結果、通常は同時実行ワークロードにおけるレイテンシがより滑らかになり、ハードウェア使用率が向上し、インタラクティブな大規模言語モデルアプリケーションに対して、より予測しやすいサービスを提供できます。
チャンク化プリフィルの仕組み#
自己回帰型Transformer推論には、主に2つのフェーズがあります。
- プリフィル: モデルはすべての入力トークンを処理し、アテンション状態を計算して、KV cacheに格納します。プリフィルでは多数のトークンを並列に評価するため、通常は計算処理がボトルネックになります。
- デコード: モデルは、以前にキャッシュされた状態を読み取りながら、一度に1トークンずつ出力を生成します。デコードは、純粋な計算能力よりもメモリ帯域幅によって制限されることがよくあります。
チャンク化しない場合、20,000トークンのリクエストは、短いリクエストよりもはるかに長く推論ステップを占有する可能性があります。その結果、アクティブな生成処理で一時停止が発生し、自身のプロンプトが短い場合でも、トークン間レイテンシが増加することがあります。
チャンク化プリフィルでは、スケジューラが各イテレーションにトークン予算を割り当てます。まずアクティブなデコード処理をスケジュールし、残りの予算を1つ以上のプロンプトチャンクに使用します。プロンプトが収まらない場合、残りのトークンは後のイテレーションまで待機します。現在のvLLM最適化ガイダンスでは、このアプローチを、計算負荷の高いプリフィル処理とメモリ負荷の高いデコード処理を組み合わせる方法として説明しています。
チャンク化によって変わるのはプロンプトトークンを処理するタイミングであり、順序や意味ではありません。完了した各チャンクによってリクエストのキャッシュ済みアテンション状態が拡張され、プロンプト全体の準備が整ってデコードを開始できるようになります。
チャンク化プリフィルが重要な理由#
チャンク化プリフィルは、本番のモデルサービングにおける相反するパフォーマンス目標に対応します。
- トークン間レイテンシ: 既存のデコードリクエストを優先することで、ストリーミングレスポンスを長い一時停止なしに継続できます。
- 最初のトークンまでの時間: 大きなチャンクでは新しいプロンプトをより早く完了できますが、非常に小さなチャンクでは最初に生成されるトークンが遅れる可能性があります。
- スループット: プリフィル処理とデコード処理を組み合わせることで、GPUの計算能力とメモリ帯域幅をより効果的に利用できます。
- 公平性: 長いプロンプトによって、多数の短いインタラクティブなリクエストがブロックされる可能性を低減できます。
したがって、チャンクまたはトークン予算の設定はトレードオフになります。vLLMスケジューラ設定では、バッチ化するトークン数の上限、部分的なプリフィル、長いプロンプトに対するしきい値を制御できます。一般に、小さい予算は応答性の高いデコードを優先し、大きい予算はプロンプトの取り込み速度を優先します。
チャンク化ですべてのボトルネックが解消されるわけではありません。長いコンテキストは依然としてキャッシュメモリを消費し、過度に積極的な受付によって、キャッシュ圧迫、リクエストのプリエンプション、または処理の繰り返しが発生する可能性があります。運用担当者は、現実的なプロンプト分布の下で、推論レイテンシの中央値とテールレイテンシ、最初のトークンまでの時間、トークン間レイテンシ、スループット、GPUメモリ使用量を測定する必要があります。
関連する推論概念#
チャンク化プリフィルは複数の最適化と密接に関連していますが、目的は異なります。
- 連続バッチ処理: 生成中にリクエストを動的に追加および削除します。チャンク化プリフィルは、長いプロンプトの処理をトークン単位の境界でスケジュール可能にすることで、これを補完します。
- プロンプトキャッシュ: 繰り返し使用されるプロンプトプレフィックスについて、以前に計算した状態を再利用します。チャンク化プリフィルは新しい計算をスケジュールするものであり、その計算を省略するものではありません。
- ページ化KVキャッシュ管理: キャッシュされたアテンション状態をメモリブロックに整理します。NVIDIAのTensorRT-LLM概要では、プロンプト処理の最適化と併せて、ページ化キャッシュとインフライトバッチ処理を取り上げています。
- 動的バッチ処理: NVIDIA Triton動的バッチ処理ガイドで説明されているように、個別のリクエストをバッチにまとめます。ただし、個々の長いプロンプトを部分的なプリフィルに分割するとは限りません。
- プリフィルとデコードの分離: これらのフェーズを別々のワーカーで実行します。NVIDIAのプリフィルおよびデコードのデプロイメントガイダンスでは、代わりに各ステージを独立してスケールする方法を示しています。
Ultralytics YOLO26 Tritonデプロイメントワークフローは、スケーラブルなコンピュータビジョン推論と自動バッチ処理をサポートしていますが、標準的なYOLO物体検出には自己回帰型のテキストプリフィルフェーズはありません。チャンク化プリフィルは、主に生成系の言語モデルおよびマルチモーダルモデルに適用されます。
実世界での利用例#
-
ドキュメントアシスタント: 検索拡張アシスタントは、長いレポートを受け取りながら、短い質問をするユーザーにも同時にサービスを提供する場合があります。レポートのプリフィルをチャンク化すると、コンテキスト全体の処理が完了するまで処理を停止するのではなく、進行中のチャットでデコードを継続できます。
-
マルチモーダル動画分析: 視覚言語モデルは、画像特徴、物体の説明、長いテキスト指示を受け取る場合があります。ビジョンパイプラインでは、まずUltralytics YOLO予測を使用して検出を生成し、その後、構造化された視覚コンテキストを生成モデルに送信できます。チャンク化プリフィルは、結果として生じる視覚トークンとテキストトークンを他のリクエストと併せてスケジュールするのに役立ちます。NVIDIAのマルチモーダルのエンコード・プリフィル・デコードワークフローは、これらのステージを独立して管理することでスケーラビリティを向上できる理由を示しています。
実践的なデプロイメントガイダンス#
チャンク化プリフィルは、対象アーキテクチャを公式にサポートしているサービングエンジンを通じてのみ有効にしてください。たとえば、TensorRT-LLMバックエンド設定には、サポート対象のデプロイメントにおけるチャンク化コンテキスト制御について記載されています。
単一のリクエストに依存するのではなく、現実的な同時実行数、入力長、出力長でベンチマークしてください。まずランタイムが推奨するトークン予算から開始し、最初のトークンまでの時間とトークン間レイテンシを確認しながら調整します。最後に、非常に長いプロンプトと非常に短いプロンプトの両方を含む混合ワークロードをテストしてください。チャンク化プリフィルの運用上の価値が最も明確に表れるのはこのような場合です。









