連続バッチ処理とは
Continuous Batching
生成完了したリクエストの枠へ新規リクエストを即座に詰め替え、LLM推論サーバーのスループットを高めるバッチ処理方式
ひとことで言うと
終わったリクエストの空き枠に次のリクエストをすぐ入れて、GPUを無駄なく使い続けるバッチ処理の方式。
概要
連続バッチ処理(Continuous Batching)とは、LLM推論サーバーにおいて、バッチ内の一部のリクエストが生成完了した時点でそのスロットへ新しい待機中のリクエストを即座に組み込み、バッチ全体の完了を待たずに次のリクエストの処理を開始するバッチ処理方式。 従来の静的バッチ処理では、生成するトークン数の異なる複数のリクエストを1つのバッチにまとめると、最も長いリクエストの完了までGPUの一部が遊休状態になっていた。連続バッチ処理は、デコードの反復(イテレーション)単位でバッチの構成を見直すことで、この遊休時間を減らしGPU利用率とスループットを高める。 vLLM・Text Generation Inference(TGI)・TensorRT-LLM等、主要なLLM推論サーバーで採用されている中核的な最適化技術の1つ。
背景
静的バッチ処理では、バッチ内の各リクエストで生成するトークン数が異なるため、短いリクエストが早く完了してもバッチ全体は最も長いリクエストに合わせて待機する必要があり、GPUリソースを無駄にしていた。連続バッチ処理は、リクエストごとの生成完了タイミングのばらつきを吸収し、GPU利用率を高めるために考案された。
歴史
2022年: Seoul National UniversityとFriendliAIの研究チームがOSDI 2022にて論文「Orca: A Distributed Serving System for Transformer-Based Generative Models」を発表。イテレーション単位でバッチを組み替える「イテレーションレベルスケジューリング」を提案し、従来のバッチ処理と比べ最大36.9倍のスループット向上を報告した。 以降、vLLM等の主要なLLM推論サーバーが同様の仕組みを「連続バッチ処理(Continuous Batching)」として実装し、業界標準的な最適化技術として広まった。
利点
- リクエストごとの生成完了タイミングのばらつきを吸収し、GPU利用率とスループットを高められる
- 新規リクエストを待たせず即座にバッチへ組み込めるため、待ち時間(レイテンシ)も改善しやすい
欠点
- バッチの構成をイテレーションごとに動的に管理する必要があり、スケジューラの実装が静的バッチ処理より複雑になる
- KVキャッシュのメモリ管理と組み合わせて実装されることが多く、関連技術への理解も要する
比較
関連用語
よくある質問
連続バッチ処理を使うとレイテンシも改善する?
新規リクエストが空いたスロットへ即座に組み込まれるため、バッチ全体の完了を待つ静的バッチ処理と比べ、新規リクエストの待ち時間(キューイング遅延)を抑えやすい。ただし個々のリクエストの生成速度自体は、同時実行中のリクエスト数やGPUの負荷状況に左右される。