Article

Asynchrones Continuous Batching - CPU und GPU parallel

Hugging Face erklärt, wie man CPU und GPU Arbeit entkoppelt, um die LLM-Inference massiv zu beschleunigen.

Kurzbeschreibung

Durch asynchrones Batching werden CPU-Vorbereitung und GPU-Berechnung parallelisiert. Idlezeiten werden eliminiert und der GPU-Durchsatz maximiert.

Abstract

Continuous Batching ist ein wichtiger Schritt für effiziente LLM-Inference, aber das Standard-Verfahren hat eine Schwachstelle: Es ist synchron. Das bedeutet, CPU und GPU arbeiten abwechselnd. Während die GPU rechnet, wartet die CPU, und während die CPU den nächsten Batch vorbereitet, wartet die GPU. In Loops mit hunderten Schritten pro Sekunde summieren sich diese Pausen zu echtem Performance-Verlust.

Die Lösung ist asynchrones Batching: CPU-Vorbereitung und GPU-Berechnung werden entkoppelt und parallelisiert. Die CPU bereitet bereits den nächsten Batch vor, während die GPU noch rechnet. Das Ergebnis: Die GPU ist immer produktiv, keine Idle-Zeiten mehr.

Im Blogpost zeigen die Autoren ein konkretes Beispiel: Bei der Generierung von 8K Tokens mit Batch-Größe 32 auf einem 8B-Modell entfallen im synchronen Modus fast 25% der Laufzeit auf CPU-Wartezeiten. Mit asynchronem Batching verschwinden diese Lücken.

Die Autoren erklären auch die Details: KV-Cache-Tabellen müssen aktualisiert werden, Requests werden evictiert und neue zugelassen. All das passiert parallel zur GPU-Berechnung. Für alle, die LLM-Inference optimieren wollen, ist der Artikel ein Muss. Der Code ist auf GitHub verfügbar und erklärt die Implementierung von Grund auf.

Link: Unlocking asynchronicity in continuous batching