AI・機械学習
中級

ダイナミックバッチング(ダイナミックバッチング)

到着タイミングの異なるリクエストを推論エンジンがリアルタイムでまとめてバッチ処理する技術。

0 回閲覧
0 いいね
2026/6/8 更新
関連タグ
LLM推論
バッチ処理
vLLM
スループット
推論最適化

ダイナミックバッチング(Dynamic Batching)

ダイナミックバッチング(Dynamic Batching)は、LLM推論サーバーが複数のリクエストを動的にグループ化してGPUで一括処理する技術。固定バッチと異なり、リクエストの到着タイミングに応じてリアルタイムでバッチを構成する。

なぜ必要か

GPUはバッチ処理が得意で、1件ずつ処理するよりN件まとめて処理する方がスループットが高い。しかしユーザーリクエストは不規則に到着するため、固定バッチサイズを設定すると「バッチが埋まるまで待つ」か「小さいバッチで処理する」かのトレードオフが生じる。

ダイナミックバッチングはこの問題を解消し、到着したリクエストを即座にバッチに追加しながら処理を継続する。

主要パラメータ

max_batch_size     最大同時処理リクエスト数
max_wait_time      バッチ待機タイムアウト(ms)
preferred_batch    推奨バッチサイズ(到達したら即実行)

フレームワーク別実装

vLLM

vllm serve mistralai/Mistral-7B-Instruct-v0.3 \
  --max-num-seqs 256 \
  --max-num-batched-tokens 4096

Text Generation Inference (TGI)

docker run ghcr.io/huggingface/text-generation-inference \
  --max-batch-size 32 \
  --waiting-served-ratio 1.2

SGLang

runtime = sgl.Runtime(
    model_path="meta-llama/Llama-3.1-8B-Instruct",
    max_running_requests=512,
)

Continuous Batching との関係

ダイナミックバッチングは広義の概念で、LLMに特化した実装が Continuous Batching(反復レベルスケジューリング)。Continuous Batchingは1トークン生成ごとにバッチを再構成し、完了したシーケンスを即座に次のリクエストで置き換える。

方式バッチ更新タイミング空き席の扱い
従来固定バッチリクエスト完了後次バッチまで空白
ダイナミックバッチング一定時間/件数次バッチで埋める
Continuous Batching毎トークン生成後即座に新リクエスト挿入

スループット vs レイテンシ

大きいバッチほどGPU利用率が上がりスループットは増加するが、小さいリクエストも大きいバッチの完了を待つためレイテンシが増加する。

本番環境ではSLO(例: P99レイテンシ2秒以下)を設定し、バッチサイズを動的に調整するアダプティブバッチングが採用される。

実測パフォーマンス例

A100 80GB / Llama-3.1-70B-Instruct:

  • バッチサイズ1: ~15 tokens/sec
  • バッチサイズ8: ~80 tokens/sec(5.3倍)
  • バッチサイズ32: ~220 tokens/sec(14.7倍)

バッチサイズ増加によるスループット向上はGPUメモリ上限で頭打ちになる。vLLMのPagedAttentionはこのメモリ制約を緩和し、より大きな有効バッチサイズを実現する。

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