Mit KI entwickeln

Wie vLLM die Ineffizienz von GPUs durch Continuous Batching und PagedAttention löst

vLLM verbessert den Durchsatz der LLM-Inferenz, indem es statisches Batching durch Continuous Batching ersetzt und PagedAttention zur effizienten Speicherverwaltung nutzt.

Illustration von PagedAttention-Speicherblöcken auf einer GPU-Platine
Für diesen Artikel generierte Illustration

Automatisch aus dem englischen Original übersetzt.

Große Sprachmodelle (Large Language Models, LLMs) sind Vorhersage-Engines, keine Server. Dies führt zu einem grundlegenden Missverhältnis bei der Verarbeitung hoher Anfragevolumina. Wenn diese Modelle eine Anfrage nach der anderen ausführen, bleibt die meiste GPU-Rechenleistung ungenutzt, was die Kosten in die Höhe treibt und die Skalierbarkeit für Entwickler, die KI-Produkte erstellen, einschränkt.

Was passiert ist

Die Herausforderung, Open-Weight-Modelle im großen Maßstab bereitzustellen, hat dazu geführt, dass Ingenieure vLLM adoptieren – einen Inferenzserver und ein Framework, das speziell für Umgebungen mit hohem Durchsatz entwickelt wurde. Ursprünglich 2023 vom Sky Computing Lab der UC Berkeley stammend, adressiert vLLM die Kernineffizienzen des standardmäßigen LLM-Deployments, indem es überdenkt, wie Anfragen gebatcht werden und wie der Speicher auf GPUs verwaltet wird.

Traditionelle Inferenzmethoden stoßen an ihre Grenzen, weil sie Anfragen sequenziell verarbeiten oder statisches Batching nutzen, bei dem Gruppen von Anfragen gleichzeitig starten und enden. Dieser Ansatz berücksichtigt nicht die variable Länge der LLM-Antworten, was zu erheblichen verschwendeten Rechenzyklen führt, da schnellere Anfragen auf langsamere warten müssen, bis diese abgeschlossen sind. vLLM führt Continuous Batching und eine neuartige Speicherverwaltungstechnik namens PagedAttention ein, um GPUs vollständig ausgelastet zu halten.

Dieses Framework hat sich zur Standardlösung für Produktionsumgebungen entwickelt, in denen Kosteneffizienz und Durchsatz kritisch sind. Indem vLLM den Abschluss einer Anfrage von der Ausführung eines Batches entkoppelt, stellt es sicher, dass jeder Forward-Pass nützliche Arbeit verrichtet. Dies erhöht die Anzahl der pro Sekunde generierten Tokens dramatisch, ohne zusätzliche Hardware zu benötigen.

Wie es funktioniert

Die LLM-Inferenz besteht aus zwei Phasen: Prefill, in der das Modell die Eingabeaufforderung (Prompt) verarbeitet, und Decode, in der es Ausgabe-Tokens einzeln generiert. In Standard-Setups ist die Decode-Phase ineffizient, da die GPU für jede einzelne Token-Generierung die gesamten Modellgewichte laden muss. Statische Batch-Verfahren verbessern dies geringfügig, indem sie mehrere Anfragen gleichzeitig verarbeiten, leiden jedoch unter dem Straggler-Effekt, bei dem kurze Antworten längere daran hindern, neue Batches zu starten.

vLLM ersetzt statisches Batching durch Continuous Batching. Anstatt darauf zu warten, dass alle Anfragen in einem Batch abgeschlossen sind, fügt der Scheduler neue Anfragen sofort in den nächsten Forward-Pass ein, sobald eine bestehende Anfrage beendet ist. Dies hält die GPU jederzeit beschäftigt und maximiert den Durchsatz. Continuous Batching erfordert jedoch eine effiziente Speicherverwaltung, da jede aktive Anfrage einen Key-Value-Cache (KV-Cache) pflegt, der mit jedem generierten Token wächst.

Um das Problem der Speicherfragmentierung zu lösen, nutzt vLLM PagedAttention. Traditionelle Frameworks reservieren Worst-Case-Speicher für den KV-Cache jeder Anfrage, was zu massiver Verschwendung führt. PagedAttention behandelt den KV-Cache wie virtuellen Speicher in einem Betriebssystem und speichert ihn in nicht-kontiguaten Blöcken. Dies ermöglicht es dem System, Speicher dynamisch zuzuweisen und Blöcke zwischen Anfragen zu teilen, wenn möglich. So wird sichergestellt, dass der GPU-Speicher nur für aktive Daten genutzt wird und nicht für potenziell benötigte, aber nicht genutzte Reservierungen.

Wichtige Details

  • vLLM wurde in einem Paper aus dem Jahr 2023 von Forschern am Sky Computing Lab der UC Berkeley vorgestellt.
  • Das Framework nutzt Continuous Batching, um neue Anfragen in Forward-Passes einzufügen, sobald vorherige abgeschlossen sind.
  • PagedAttention verwaltet den KV-Cache-Speicher in nicht-kontiguaten Blöcken, ähnlich wie beim Paging des virtuellen Speichers eines Betriebssystems.
  • Standardmäßiges statisches Batching verschwendet Rechenleistung, indem es schnelle Anfragen zwingt, auf langsame im selben Batch zu warten.
  • Der KV-Cache speichert Schlüssel-Wert-Paare für jedes Token und wächst mit jedem Schritt der Generierung.
  • vLLM bietet einen OpenAI-kompatiblen API-Endpunkt für die einfache Integration in bestehende Anwendungen.

Warum das wichtig ist

Für Software-Ingenieure und technische Gründer ist die GPU-Auslastung direkt mit den Infrastrukturkosten verknüpft. Wenn ein Modell eine Anfrage nach der anderen ausführt, bleibt die teure Hardware während der Decode-Phase weitgehend untätig. Durch die Adoption von vLLM können Teams deutlich mehr Nutzer mit demselben Hardware-Budget bedienen, was Open-Weight-Modelle für Produktionsanwendungen praktikabel macht, die niedrige Latenz und hohe Nebenläufigkeit erfordern.

Der Wechsel von statischem zu Continuous Batching verbessert auch die Benutzererfahrung durch reduzierte Wartezeiten. In statischen Systemen kann ein Nutzer, der eine kurze Abfrage sendet, durch ein vorheriges Batch verzögert werden, das eine lange, komplexe Anfrage enthält. Continuous Batching stellt sicher, dass keine Anfrage untätig wartet, während andere abgeschlossen werden, was zu einer vorhersagbareren und reaktionsschnelleren API-Leistung führt. Diese Zuverlässigkeit ist für verbraucherorientierte KI-Funktionen essenziell, bei denen die wahrgenommene Geschwindigkeit die Engagement-Rate beeinflusst.

Darüber hinaus beseitigt die durch PagedAttention gewährleistete Speichereffizienz eine große Hürde für die Skalierung. Ohne diese Technik müssen Ingenieure Speicher überdimensionieren, um Worst-Case-Längen zu bewältigen, was die Anzahl der gleichzeitigen Anfragen begrenzt, die eine einzelne GPU bearbeiten kann. Die dynamische Allokation von vLLM ermöglicht dichtere Deployments, vereinfacht die Kapazitätsplanung und reduziert die Notwendigkeit komplexer manueller Optimierungen der Batch-Größen.

Was Sie tun können

  • Ersetzen Sie Standard-Hugging-Face-Pipelines durch vLLM für jedes Deployment von Open-Weight-Modellen, das hohen Durchsatz erfordert.
  • Konfigurieren Sie Ihren Inferenzserver so, dass er Continuous Batching statt statischem Batching nutzt, um die Leerlaufzeit der GPU zu reduzieren.
  • Überwachen Sie die Nutzung des KV-Caches, um den Speicherdruck zu verstehen und die Einstellungen für die maximale Modellänge entsprechend anzupassen.
  • Nutzen Sie den von vLLM bereitgestellten OpenAI-kompatiblen API-Endpunkt, um Änderungen in Ihrem Client-seitigen Code zu minimieren.
  • Führen Sie Benchmarks Ihres aktuellen Setups mit statischem Batching gegen vLLM durch, um die Verbesserungen bei den Tokens pro Sekunde zu quantifizieren.
  • Stellen Sie sicher, dass Ihre Anwendung variable Antwortzeiten angemessen handhabt, da Continuous Batching die Latenzprofile ändern kann.
  • #vllm
  • #llm inference
  • #gpu optimization
  • #continuous batching
  • #pagedattention

Tools aus dem Bytechap-Shop

$89

DocBento

Selbst gehostetes Dokumentenmanagement, das jeden Scan liest und mit Seitenzitaten antwortet.

Live-Demo

Weiterlesen

Alle Artikel