# 動的バッチングと継続的バッチング
## 定義
動的バッチング(Dynamic Batching)とは、LLM 推論サーバーが到着したリクエストを一定時間(例: 2ms)またはバッチサイズ上限のいずれか早いほうまで待って一括処理するバッチング方式である。全リクエストの完了を待つ静的バッチング(padding によりGPUサイクルが無駄になり、早着リクエストの待ち時間が無限になりうる)と異なり、最大待機時間の上限(タイムアウト値)を明示的に保証する。継続的バッチング(Continuous Batching、in-flight batching、iteration-level scheduling とも呼ばれる)はさらに進んで、固定タイマーに依存せずトークン生成のイテレーションごとに完了したシーケンスを排出し新規リクエストを即座に挿入することで、GPU のアイドルスロットとパディングオーバーヘッドを排除する。継続的スケジューリング(Continuous Scheduling)は、複数の Decode カーネルを別々の CUDA ストリームへ発行し GPU の warp スケジューラでインターリーブさせることで、トークンレベルの粒度で GPU 稼働率を最大化する手法であり、vLLM コミュニティの用語である。チャンク化 Prefill(Chunked Prefill / Stall-Free Scheduling)は長いプロンプトを固定トークン数のチャンクに分割し、Prefill と Decode を交互実行することで1イテレーションあたりの最大ストール時間を抑える技法である。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 16 Profiling, Debugging, and Tuning Inference at Scale]] §Dynamic Batching, §Continuous Batching, §Continuous Scheduling, §Stall-Free Scheduling)
## 横断的知見
- **バッチング手法の高度化はタイマー駆動からイベント駆動へ、そしてトークン粒度のスケジューリングへ段階的に進む**: 静的バッチングは「バッチ全体の完了」というイベントを待ち、動的バッチングは「タイムアウトまたはバッチサイズ到達」というタイマー/カウンタ駆動へ移行し、継続的バッチングは「トークン生成完了」というイベント駆動へ、継続的スケジューリングはさらに細かい「warp レベルの空き」というハードウェアイベント駆動へ移る。vLLM の PagedAttention と SGLang の RadixAttention は、この継続的バッチングとプレフィックスキャッシュ([[KVキャッシュ管理]])を組み合わせたハイブリッド実装として位置づけられる。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 16 Profiling, Debugging, and Tuning Inference at Scale]] §Continuous Scheduling)
- **バッチングの効果とレイテンシ考慮スケジューリングは異なる軸だが組み合わせて相乗効果を生む**: バッチングは「複数リクエストをまとめて処理する」ことでスループットを上げるのに対し、latency-aware scheduling は「どのリクエストをどの GPU/バッチへ割り振るか」の順序最適化であり、両者は独立に効く。ただし latency-aware scheduling の効果(FIFO比42%のSelf-Attention演算削減)は、可変長シーケンスをパディングなしで処理するカーネル(FlashAttention等)を前提とし、固定長パディングを行うカーネルでは効果が縮小する、という条件依存性がある。
## 未解決の問い
- チャンク化Prefillのチャンクサイズは、latency-aware schedulingが扱うプロンプト長のばらつきとどう相互作用するか。チャンクサイズとレイテンシ考慮リクエスト順序を同時最適化する設計は示されていない。
- 継続的スケジューリングが warp レベルの GPU 稼働率最大化を狙うのに対し、[[KVキャッシュ管理]] の cache-aware scheduling(SGLang の longest-shared-prefix-first 等)は prefix 共有率を最大化する。両者の優先度を単一のスケジューラでどう統合すべきか。
- 動的バッチングの適応的バッチ遅延(低負荷で0msに近く、ピーク時5〜10ms)は vLLM 等で実装されているとされるが、具体的な調整アルゴリズム(PID制御的か、単純な閾値切替か)は本章では詳述されていない。
## 関連
- ソース: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 16 Profiling, Debugging, and Tuning Inference at Scale]]
- エンティティ: [[vLLM]] / [[SGLang]] / [[NVIDIA Dynamo]]
- 概念: [[LLM推論]] / [[KVキャッシュ管理]] / [[Prefill-Decode分離]]
## 出典
- [[@2025__OReilly__AI Systems Performance Engineering - Chapter 16 Profiling, Debugging, and Tuning Inference at Scale]](§Dynamic Batching, §Continuous Batching, §Continuous Scheduling, §Stall-Free Scheduling, §Latency-Aware Scheduling and Dynamic Routing)