AI・機械学習
中級

Continuous Batching(コンティニュアスバッチング)

LLM推論において生成が終了したシーケンスを即座にバッチから除去し、新規リクエストを動的に挿入することでGPU利用率を最大化するバッチング戦略。

0 回閲覧
0 いいね
2026/6/6 更新
関連タグ
Continuous Batching
動的バッチング
LLM推論
スループット最適化
Orca
イテレーションレベルスケジューリング

Continuous Batching

概要

Continuous Batchingは、LLM推論サービスにおいてGPU利用率を最大化するスケジューリング技術。2022年のOSDI論文「Orca: A Distributed Serving System for Transformer-Based Generative Models」(ByteDance/SNU)で提案され、現在ではvLLM、TGI、TensorRT-LLMなど主要推論エンジンの標準機能となっている。

問題:静的バッチングの非効率性

静的バッチングでは、バッチ内の最長シーケンスが完了するまで全スロットを占有する。例えばReq1が20トークンで完了しても、Req2が100トークン生成中はReq1分のGPUスロットが無駄になる。生成長のばらつきが大きいほど、GPU利用率が低下し、リアルタイムサービスでは平均50〜60%のGPU利用率にとどまることも。

Continuous Batchingの動作

各推論ステップ(イテレーション)後に完了シーケンスを除外し、待機リクエストをエンキュー。GPUを常にフル活用する。

イテレーション0-19: バッチ=[Req1, Req2, Req3] イテレーション20: Req1完了 → バッチ=[Req2, Req3, Req4(新規追加)] イテレーション50: Req3完了 → バッチ=[Req2, Req4, Req5(新規追加)]

PagedAttentionとの相乗効果

vLLMではPagedAttentionとContinuous Batchingが連携:

  • Continuous Batchingが動的バッチサイズを管理
  • PagedAttentionが可変長シーケンスのKVキャッシュを効率管理
  • 2技術の組み合わせでHuggingFace比最大24倍スループット(当初発表)

設定例

from vllm import AsyncLLMEngine, AsyncEngineArgs

engine_args = AsyncEngineArgs(
    model="meta-llama/Llama-3.1-8B-Instruct",
    max_num_seqs=256,            # 最大同時バッチサイズ
    max_num_batched_tokens=8192, # 1イテレーションあたり最大トークン数
    gpu_memory_utilization=0.90,
)
engine = AsyncLLMEngine.from_engine_args(engine_args)

採用状況(2025年)

  • vLLM: Iteration-level scheduling
  • HuggingFace TGI: Dynamic batching
  • NVIDIA TensorRT-LLM: In-flight batching
  • SGLang: Continuous batching + RadixAttention
  • llama.cpp server: Parallel decoding

Continuous Batchingは2025年現在、商用LLMサービングの標準技術として確立。本番推論インフラ設計において必須の考慮事項となっている。

この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/6