AI・機械学習
上級
Continuous Batching(連続バッチング)(コンティニュアスバッチング)
LLM推論のスループットを大幅向上させるバッチ処理最適化手法。従来の静的バッチと異なり、生成完了したシーケンスを待たずに新しいリクエストを動的に挿入することでGPU利用率を最大化する。
0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
Continuous Batching
LLM推論最適化
スループット向上
vLLM
GPU利用率
Continuous Batching(連続バッチング)とは
Continuous Batching(連続バッチング、またはIteration-level Scheduling)は、LLMの自己回帰的なトークン生成において、GPUの利用率を最大化するバッチ処理最適化手法です。2022年のOrcaシステム論文(Yu et al., OSDI 2022)によって提案され、現在では主要な推論エンジンに標準実装されています。
従来の静的バッチングの問題
静的バッチング(従来)の問題:
バッチ: [リクエストA(20トークン生成), リクエストB(100トークン生成)]
イテレーション 1-20: A・B 両方処理(GPU 100%利用)
イテレーション 21-100: Aは完了しているがBが終わるまでスロットが空き
→ GPU利用率: 50%(Aのスロットが無駄)
Bが完了するまで新しいリクエストCは待機
Continuous Batchingの仕組み
Continuous Batching(反復レベルスケジューリング):
イテレーション 1-20: バッチ = [A, B]
イテレーション 21(Aが完了): バッチ = [C(新規挿入), B]
イテレーション 22: バッチ = [C, B, D(新規追加)]
各イテレーション(1トークン生成ごと)にスケジューラーが実行され、完了したシーケンスを待つことなく新しいリクエストをバッチに挿入します。
Prefill と Decode の分離(2024年進化)
2024年にはPrefill・Decodeを別クラスターで処理する「Disaggregated Prefill」が登場:
Prefill Cluster: 新着リクエストのプロンプト処理(計算バウンド)
→ 完了したらKVキャッシュをDecode Clusterへ転送
Decode Cluster: トークン生成(メモリバウンド)
→ Continuous Batchingで並列デコード
効果: Prefill待ちによるDecodeスループット低下を解消
vLLMでの実装
from vllm import AsyncLLMEngine, AsyncEngineArgs, SamplingParams
import asyncio
# Continuous Batchingはvllmのデフォルト動作
engine_args = AsyncEngineArgs(
model="meta-llama/Meta-Llama-3-8B-Instruct",
tensor_parallel_size=1,
max_num_seqs=256, # 同時処理最大シーケンス数
max_num_batched_tokens=8192,# バッチあたり最大トークン数
gpu_memory_utilization=0.9
)
engine = AsyncLLMEngine.from_engine_args(engine_args)
async def generate(prompt: str, request_id: str):
sampling_params = SamplingParams(temperature=0.8, max_tokens=512)
results = engine.generate(prompt, sampling_params, request_id)
async for output in results:
yield output
スループット改善効果
静的バッチ(batch=1)はGPU利用率10-20%でスループット50-100 tokens/s(レイテンシ最小)、静的バッチ(batch=32)は50-70%で500-800 tokens/s(バッファ遅延あり)、Continuous Batchingは85-95%で2000-5000 tokens/s(vLLM標準)という改善が得られます。
OpenAI互換サーバーでの確認
# vLLMをサーバーとして起動
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct \
--max-num-seqs 256 \
--port 8000
# 複数リクエストを同時送信でContinuous Batchingの効果を確認
for i in {1..10}; do
curl -s http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{"model":"meta-llama/Meta-Llama-3-8B-Instruct","prompt":"Tell me about GPU","max_tokens":200}' &
done
wait
Continuous Batchingは2023-2026年のLLMサービング革命の核心技術の一つです。vLLM・TGI・TensorRT-LLM・SGLangなど全ての主要推論エンジンに実装され、LLMのAPI提供コストを大幅に削減しています。