Continuous Batching
連続バッチ処理 (continuous batching) がGPUスループットを最適化し、レイテンシを削減する仕組みを学びましょう。本番環境のMLタスクでUltralytics YOLO26を使用して効率を最大化する方法を解説します。
Continuous batchingは、machine learning (ML)においてハードウェアの稼働率とスループットを最大化するために使用される、高度なスケジューリングおよび推論最適化手法です。従来の静的バッチ処理では、inference engineは、あらかじめ決められた数のリクエストが溜まるのを待ってから一括で処理を行います。この手法では、バッチ内で最も処理時間が長いリクエストの完了を待ってからリソースを解放する必要があるため、非効率が生じやすくなります。Continuous batchingは、動的バッチ処理やイテレーションレベルバッチ処理とも呼ばれ、アクティブなリクエストが完了した直後に新しいリクエストを計算バッチに注入することでこの問題を解決し、GPUsのアイドル時間を大幅に削減して全体的な効率を向上させます。
Link to this section関連概念の区別#
モデルのデプロイ時にデータがどのように処理されるかを理解するために、用語集にある他の関連用語とContinuous batchingの違いを明確にすることが役立ちます。
- Batch Size: これは、トレーニングや推論中に同時に処理されるサンプルの固定数を指します。従来のbatch processing workflowsは固定サイズに依存しますが、Continuous batchingでは、着信トラフィックに基づいて実効バッチサイズを動的に変動させることが可能です。
- Real-Time Inference: この概念は、単一の入力が到着するたびに処理を行い、即時の予測のためにinference latencyを最小限に抑えることに重点を置いています。Continuous batchingは、高速なリクエストが低速なリクエストを待つ必要がないようにしつつ高いスループットを維持することで、高スループットの静的バッチ処理と低レイテンシのリアルタイム推論の間のギャップを埋めます。
Link to this section実社会での応用#
Continuous batchingは、予測不可能な大量のリクエストを処理する本番環境のシステムにおいて不可欠です。以下に、その適用例を2つ挙げます。
-
高スループットのテキスト生成: Large Language Models (LLMs)を提供する際、ユーザーごとの応答生成にかかる時間は出力の長さに応じて異なります。Ray Serve上のvLLMのようにContinuous batchingを活用するフレームワークは、新しく生成されたトークンを継続的にストリーミングし、完了した会話を新しいプロンプトに即座に入れ替えることができます。research on iteration-level schedulingによって広まったこの手法は、テキスト生成のスループットを劇的に向上させます。
-
非同期ビデオ解析: 都市の交通カメラネットワーク全体で車両を追跡するといったvideo understandingタスクでは、フレームは異なる間隔で到着します。Continuous batchingを使用すると、object trackingモデルはリソースが空いた瞬間に着信ビデオフレームを動的に処理でき、スマートシティのダッシュボード向けのhardware accelerationパイプラインを最適化できます。
Link to this sectionビジョンタスクにおける継続的処理#
トラフィックの多いmodel deployment practicesを管理する場合、推論をイテレーティブにストリーミングすることで、メモリをブロックするのではなく段階的に解放し、動的バッチ処理の利点をシミュレートできます。以下のPythonの例では、ジェネレーターパターンとmodel prediction APIを使用して、画像の連続的なストリームを効率的に処理する方法を示します。
from ultralytics import YOLO
# Load the latest Ultralytics YOLO26 model
model = YOLO("yolo26n.pt")
# Using stream=True acts as a generator, iteratively processing inputs
# to keep memory usage low and throughput high
results = model.predict(source=["img1.jpg", "img2.jpg", "img3.jpg"], stream=True)
# Process each result as soon as it completes
for result in results:
print(f"Detected {len(result.boxes)} objects in this frame.")システムレベルのresource schedulingを管理するには、生スピードと運用コストのバランスが必要です。大規模なcomputer vision (CV)モデルや言語モデルをデプロイするチームは、これらの動的バッチを管理するために高度なサービングフレームワークに依存する傾向が高まっています。インフラストラクチャを合理化しようとするエンタープライズチーム向けに、Ultralytics Platformは、モデルのトレーニング、監視、および高度に最適化された本番環境へのエクスポートのための強力なツールを提供しています。






