Article

Asynchrones Continuous Batching maximiert GPU-Auslastung

vLLM Inference GPU Performance

Ein H200 kostet circa 5 Dollar pro Stunde. Das klingt günstig, aber nach einem Tag sind es bereits 120 Dollar. Wer Cloud-GPUs nutzt, will maximale Auslastung. Continuous Batching ist der erste Schritt. Asynchrones Continuous Batching ist der nächste.

Das Problem mit synchronem Batching

Bei synchronem Batching warten CPU und GPU aufeinander. Die GPU berechnet Tokens, während die CPU wartet. Dann bereitet die CPU den nächsten Batch vor, während die GPU wartet. In einem Loop mit hunderten Schritten pro Sekunde summieren sich diese Lücken.

Die Profiling-Daten zeigen es deutlich: Bei der Generierung von 8K Tokens mit Batch-Größe 32 und einem 8B-Modell verbringt die GPU fast 25% der Zeit im Leerlauf. Das ist Verschwendung.

Die Lösung: Asynchronität

Der Schlüssel ist, CPU-Batch-Vorbereitung von GPU-Batch-Berechnung zu entkoppeln. Beide laufen parallel. Die GPU wartet nie, weil immer ein Batch bereitsteht. Das erfordert mehrere Parallel-Streams auf der GPU und asynchrone Datentransfers.

Die Implementierung nutzt CUDA-Streams. Während Stream 0 den Forward-Pass berechnet, kopiert Stream 1 bereits die nächsten Inputs. Der CPU-Thread sammelt unterdessen neue Requests und plant den übernächsten Batch. Das Ergebnis: Nahezu 100% GPU-Auslastung.

Messbare Verbesserungen

Die Benchmarks zeigen über 20% höheren Durchsatz bei gleichen Latenz-Anforderungen. Besonders bei großen Batch-Größen und langen Sequenzen macht sich der Effekt bemerkbar. Kurz: Man erhält mehr Anfragen pro Sekunde ohne zusätzliche Hardware-Kosten.

Die Technik ist mittlerweile in vLLM und HuggingFaces Text Generation Inference integriert. Wer LLMs im Production-Einsatz hat, sollte asynchrones Continuous Batching aktivieren.