GPUs für vLLM-Inferenz richtig dimensionieren und konfigurieren

Eine passende GPU-Dimensionierung und Konfiguration für vLLM-Inferenz beginnt mit einem klaren Verständnis der beiden zentralen Phasen bei der Verarbeitung großer Sprachmodelle: Prefill und Decode. Beide Phasen belasten die Hardware unterschiedlich und beeinflussen dadurch die Auswahl der GPU, die Speicherplanung und die gesamte Bereitstellungsstrategie.

Dieser Leitfaden erläutert, wie sich vLLM zur Laufzeit verhält, erklärt wichtige Konzepte wie Speicherbedarf, Quantisierung und Tensor Parallelism und zeigt praxisnahe Methoden, um GPU-Entscheidungen an reale Workloads anzupassen. Wer diese Zusammenhänge versteht, kann Leistungsengpässe besser einschätzen und große Sprachmodelle fundierter sowie kosteneffizienter auf GPU-basierter Infrastruktur betreiben.

Wichtige Erkenntnisse

  • Prefill- und Decode-Phasen bestimmen die Hardware-Anforderungen: Die Prefill-Phase verarbeitet Eingabe-Prompts und wird meist durch die Speicherbandbreite begrenzt. Sie beeinflusst direkt die Time-To-First-Token. Die Decode-Phase erzeugt Ausgabetoken und ist in der Regel rechenlastig, wodurch sie die Geschwindigkeit der Token-Generierung bestimmt.
  • Die VRAM-Kapazität setzt die absolute Grenze: Sowohl Modellgewichte als auch der KV-Cache müssen in den verfügbaren GPU-Speicher passen. Ein 70B-Modell in FP16 benötigt allein für die Gewichte etwa 140 GB, weshalb Quantisierung für viele Single-GPU-Bereitstellungen entscheidend ist.
  • Der KV-Cache wächst während der Laufzeit: Im Gegensatz zu festen Modellgewichten erweitert sich der KV-Cache abhängig von Kontextlänge und Anzahl paralleler Nutzer. Ein 70B-Modell mit 32k Kontext und 10 gleichzeitigen Nutzern benötigt ungefähr 112 GB für einen FP16-Cache oder 56 GB für einen FP8-Cache.
  • Quantisierung ist der wichtigste Optimierungshebel: Wird die Präzision von FP16 auf INT4 reduziert, sinkt der Speicherverbrauch um etwa 75 %. Dadurch können größere Modelle auf kleineren GPUs betrieben werden. FP8-Quantisierung bietet auf moderner Hardware häufig das beste Verhältnis aus Geschwindigkeit und Qualität.
  • Tensor Parallelism ermöglicht größere Modelle: Wenn ein Modell zu groß für eine einzelne GPU ist, verteilt Tensor Parallelism die Gewichte auf mehrere GPUs und kombiniert deren VRAM. Dies verursacht jedoch zusätzlichen Kommunikationsaufwand. Passt ein Modell auf eine einzelne GPU, ist der Single-GPU-Betrieb meist schneller.

Das Laufzeitverhalten von vLLM: Prefill vs. Decode

Die Prefill-Phase: „Lesen“

Die Prefill-Phase ist der erste Schritt bei der Verarbeitung einer Anfrage. vLLM übernimmt den vollständigen Eingabe-Prompt, also Nutzeranfrage, System-Prompt und gegebenenfalls zusätzlichen RAG-Kontext, und verarbeitet diesen stark parallelisiert.

  • Was passiert: Das Modell liest den bereitgestellten Kontext und befüllt den Key-Value-Cache mit der mathematischen Repräsentation dieses Kontexts.
  • Der Engpass: Da in dieser Phase tausende Token gleichzeitig verarbeitet werden, wird sie meist durch die Speicherbandbreite limitiert. Entscheidend ist, wie schnell die GPU große Gewichtsmatrizen aus dem VRAM in die Recheneinheiten übertragen kann.
  • Praktische Auswirkung: Diese Phase bestimmt die Time-To-First-Token. Wenn beispielsweise ein sehr großes Dokument mit 100k Token zusammengefasst werden soll, sorgt die Prefill-Phase dafür, dass der Nutzer vor dem ersten generierten Wort warten muss.

Die Decode-Phase: „Schreiben“

Nach Abschluss der Prefill-Phase wechselt vLLM in eine autoregressive Generierungsschleife, um die Antwort zu erstellen.

  • Was passiert: Das Modell erzeugt ein Token, fügt es der Sequenz hinzu und führt das Modell anschließend erneut aus, um das nächste Token zu erzeugen. Für eine einzelne Anfrage ist dieser Ablauf grundsätzlich sequenziell.
  • Die Herausforderung: Sehr große Modellgewichte aus dem VRAM zu laden, nur um ein einzelnes Token für einen einzelnen Nutzer zu berechnen, ist ineffizient. In diesem Fall kann die GPU mehr Zeit mit Datentransfer als mit eigentlicher Berechnung verbringen.
  • Die Lösung: Continuous Batching: Moderne Inferenz-Engines wie vLLM verarbeiten Anfragen nicht strikt nacheinander. Stattdessen nutzen sie Continuous Batching, bei dem Anfragen dynamisch in einen Batch aufgenommen und wieder entfernt werden. vLLM kann dabei Prefill-Arbeiten neuer Anfragen mit Decode-Schritten laufender Anfragen innerhalb desselben GPU-Zyklus kombinieren.
  • Der Engpass: Wenn Batching effektiv funktioniert, wird die Decode-Phase rechengebunden. Ziel ist es, möglichst viele parallele Token-Berechnungen durchzuführen und den Gesamtdurchsatz zu maximieren.

Laufzeitphasen mit Workloads und Hardware verknüpfen

Die passende Hardware-Auswahl hängt stark davon ab, welche Laufzeitphase im jeweiligen Workload dominiert.

Laufzeitphase Hauptaktion Primäre Hardware-Grenze Typische Einsatzbereiche
Prefill Verarbeitet lange Eingaben parallel. Speicherbandbreite in TB/s, entscheidend für eine schnelle Time-To-First-Token. RAG, Zusammenfassung langer Dokumente und umfangreiches Few-Shot-Prompting.
Decode Erzeugt Ausgabetoken sequenziell. Rechenleistung in TFLOPS, entscheidend für schnelle Token-Generierung. Interaktive Chats, Kundenservice, Echtzeit-Codegenerierung und mehrstufige agentische Workflows.

Der KV-Cache zur Laufzeit

Während der Inferenz nutzt vLLM intensiv einen KV-Cache, um bereits erledigte Berechnungen nicht erneut durchführen zu müssen.

  • Die Funktionsweise: In einem Transformer-Modell wird jedes Token innerhalb der Attention-Layer in Key- und Value-Vektoren umgewandelt. Ohne Cache müsste das Modell den gesamten bisherigen Verlauf von Token 0 bis Token t erneut verarbeiten, nur um Token t+1 zu erzeugen.
  • Die Lösung: Der KV-Cache speichert Key- und Value-Vektoren einmalig und verwendet sie während der Generierung wieder.
  • Prefill: vLLM berechnet die Key- und Value-Vektoren für alle Prompt-Token und speichert sie direkt.
  • Decode: Für jedes neue Token ruft vLLM den bisherigen Verlauf aus dem Cache ab und berechnet nur die Key- und Value-Vektoren für das neu generierte Token.
  • Der Vorteil: Dadurch wird Attention von einem Prozess, der den gesamten Kontext immer wieder betrachtet, zu einem lineareren Ablauf, der sich auf das nächste Token konzentriert.
  • Der Kompromiss: Der Leistungsvorteil wird mit zusätzlichem Speicherbedarf erkauft. Jedes erzeugte Token fügt dem Cache weitere Einträge hinzu.

Zur Laufzeit wächst der Speicherbedarf des KV-Caches dynamisch anhand mehrerer Faktoren:

  • Prompt-Länge und Ausgabelänge: Längere Gespräche benötigen mehr VRAM.
  • Parallelität: Jede aktive Anfrage benötigt einen eigenen, isolierten Cache.
  • Modellgröße: Tiefere Modelle mit mehr Layern und breitere Modelle mit mehr Attention-Heads benötigen pro Token größere Cache-Strukturen.

Dieses Skalierungsverhalten erklärt, warum zwei Workloads mit demselben Modell sehr unterschiedliche Hardware-Anforderungen haben können. Ein 70B-Modell kann anfangs auf eine GPU passen, aber wenn der KV-Cache während einer langen Unterhaltung zu stark wächst, kann dem System der VRAM ausgehen. Das Verständnis dieses Speicherverhaltens ist deshalb für produktive Bereitstellungen zentral.

Grundlagen der Dimensionierung: Wie Modelle, Präzision und Hardware zusammenspielen

Nachdem das Laufzeitverhalten von vLLM klar ist, besteht der nächste Schritt darin zu prüfen, ob ein bestimmtes Modell auf einer bestimmten GPU ausgeführt werden kann und welche Kontextlänge oder Parallelität realistisch unterstützt wird.

Dieser Abschnitt beschreibt die benötigten Formeln und Entscheidungslogiken, um statische Speicheranforderungen zu berechnen, das Wachstum des KV-Caches abzuschätzen und Fit-Probleme strukturiert zu analysieren.

GPU-Hardware: Eigenschaften und Grenzen

Vor der Berechnung der Modellgröße ist es wichtig, den Hardware-Rahmen zu verstehen, in den das Modell passen muss. Unterschiedliche GPUs setzen unterschiedliche Grenzen für Machbarkeit und Leistung.

Typische VRAM-Kapazitäten von Data-Center-GPUs

Die folgenden Werte zeigen die festen Speichergrenzen gängiger GPUs, die für Inferenz-Workloads eingesetzt werden.

GPU-Vergleich für vLLM-Inferenz und Training

GPU-Modell VRAM-Kapazität Peak Dense TFLOPS FP16 / FP8 Hauptanwendungen und Vorteile
NVIDIA L40S 48 GB 362 / 733 Kosteneffiziente Inferenz für kleine bis mittelgroße quantisierte Modelle, typischerweise im Bereich von 7B bis 70B.
NVIDIA A100 40 GB / 80 GB 312 / N/A Ein früherer High-End-Standard, dessen 80-GB-Variante besonders gut für Workloads mit hoher Speicherbandbreite geeignet ist.
NVIDIA H100 80 GB 989 / 1,979 Ein aktueller High-End-Standard mit sehr hoher Bandbreite, ideal für Anwendungen mit langen Kontexten.
NVIDIA H200 141 GB 989 / 1,979 Eine deutliche Kapazitätserweiterung, die größere Batch-Größen oder 70B+-Modelle mit weniger GPUs ermöglicht.
NVIDIA B300 288 GB ~2,250 / 4,500 Auf maximale Dichte ausgelegt und in der Lage, sehr große Modelle wie Llama 405B mit minimaler GPU-Parallelisierung zu betreiben.
AMD MI300X 192 GB 1,307 / 2,614 Bietet sehr hohe Speicherkapazität und eignet sich damit für sehr große unquantisierte Modelle oder extrem große Batch-Größen.
AMD MI325X 256 GB 1,307 / 2,614 Auf Kapazität optimiert und sehr gut geeignet für 70B+-Modelle mit besonders langen Kontextanforderungen.
AMD MI350X 288 GB 2,300 / 4,600 Ein leistungsstarkes Flaggschiff für massive Workloads und als Konkurrenz zu modernen High-End-GPU-Plattformen positioniert.

Auch wenn ein Modell in den VRAM passt, hat die GPU-Architektur erheblichen Einfluss auf die vLLM-Leistung. Die wichtigsten Kennzahlen sind:

Kennzahl Gemessen in Auswirkung auf vLLM
VRAM-Kapazität GB Legt fest, ob das Modell überhaupt ausgeführt werden kann. Sie definiert die maximale Grenze für Modellgröße und Kontextfenster.
Speicherbandbreite TB/s Steuert die Prefill-Geschwindigkeit und ist besonders wichtig für RAG sowie Zusammenfassungen mit langen Kontexten. Hohe Bandbreite reduziert die Time-To-First-Token.
Compute TFLOPS Bestimmt die Decode-Geschwindigkeit und ist besonders für Chat-Workloads relevant. Mehr TFLOPS verbessern die Token-pro-Sekunde-Leistung.
Interconnect GB/s Beeinflusst die Kosten der Parallelisierung. Jede Verbindung zwischen GPUs verursacht Latenz. Selbst schnelle Interconnects wie NVLink erzeugen bei Tensor Parallelism Synchronisationsaufwand und reduzieren die Leistung im Vergleich zur Single-GPU-Ausführung.

Speicherbedarf der Modellgewichte: Statischer Speicher

Bevor vLLM Anfragen verarbeiten kann, müssen die Modellgewichte zunächst in den GPU-VRAM geladen werden. Wie viel Speicherplatz sie dabei belegen, hängt von der Anzahl der Modellparameter sowie vom verwendeten Präzisionsformat ab.

Formel für statische Gewichte

Der ungefähre VRAM-Bedarf in GB für Modellgewichte lässt sich wie folgt berechnen:

VRAM (GB) ≈ Parameter (Milliarden) × Bytes pro Parameter

Die folgende Tabelle zeigt, wie diese Berechnung für ein Llama-3.1-70B-Modell bei verschiedenen Präzisionsstufen aussieht.

Präzision Bytes pro Parameter Beispiel: Llama 3.1 70B VRAM
FP16 / BF16 2 Bytes 70 × 2 = 140 GB
FP8 / INT8 1 Byte 70 × 1 = 70 GB
INT4 0,5 Bytes 70 × 0,5 = 35 GB

Die Wahl der Präzision ist der stärkste Hebel für die Machbarkeit. Wird ein 70B-Modell von FP16 auf INT4 quantisiert, sinkt sein statischer Speicherbedarf um 75 %. Dadurch kann eine Bereitstellung, die auf einem einzelnen Node unmöglich wäre, auf einer einzelnen GPU mit hoher Speicherkapazität realisierbar werden. Quantisierung ist damit ein entscheidender Faktor für kosteneffiziente Deployments auf cloudbasierten GPU-Instanzen.

KV-Cache-Anforderungen: Dynamischer Speicher

Modellgewichte bestimmen, ob ein Modell starten kann. Der KV-Cache bestimmt jedoch, ob eine Bereitstellung skalieren kann. Der Speicherbedarf des KV-Caches wird häufig unterschätzt, was unter Last zu Out-of-Memory-Fehlern führen kann.

Für eine realistische Dimensionierung muss abgeschätzt werden, wie viel Speicher der Cache abhängig von Kontextlänge und Parallelität benötigt.

Praxisregel für eine schnelle Abschätzung

Für die meisten praktischen Workload-Gespräche ist die exakte Formel zu detailliert, um sie spontan zu berechnen. Eine einfachere Methode ist ein Speicherfaktor pro Token. Diese Näherung ist für erste Dimensionierungsentscheidungen meist ausreichend genau.

Vereinfachte KV-Cache-Formel:

Gesamter KV-Cache (MB) = Gesamttoken × Multiplikator

(Dabei gilt: Gesamttoken = Kontextlänge × Parallelität.)

Standard-Multiplikatoren

Modellgröße Standard-Multiplikator FP16-Cache Quantisierter Multiplikator FP8-Cache
Kleine Modelle 7B – 14B 0,15 MB / Token 0,075 MB / Token
Große Modelle 70B – 80B 0,35 MB / Token 0,175 MB / Token

Beispielrechnung

Eine Bereitstellung soll Llama 3 70B mit einem 32k-Kontext und 10 gleichzeitigen Nutzern ausführen.

  • Gesamttoken berechnen: 32.000 × 10 = 320.000 Token.
  • Standard-Multiplikator anwenden: 320.000 × 0,35 MB = 112.000 MB, also 112 GB.
  • FP8-Option prüfen: Mit aktiviertem FP8-Cache sinkt der Cache-Bedarf ungefähr auf die Hälfte, also etwa 56 GB.

Bewertung

  • FP16-Cache: 112 GB Cache + 140 GB Gewichte = 252 GB Gesamtbedarf. Dafür werden ungefähr 4 GPUs der H100-Klasse benötigt.
  • FP8-Cache: 56 GB Cache + 140 GB Gewichte = 196 GB Gesamtbedarf. Das passt ungefähr auf 3 GPUs der H100-Klasse oder kann auf 2 GPUs knapp werden, wenn zusätzlich die Gewichte quantisiert sind.

Exakte Berechnung und Tools

Für detaillierte Validierungen oder Randfälle kann die formale Formel oder ein Online-Rechner genutzt werden.

Online-Tool: LMCache KV Calculator

Formale Formel:

Gesamter KV-Cache (GB) = (2 × n_layers × d_model × n_seq_len × n_batch × precision_bytes) / 10243

Wann Tensor Parallelism erforderlich ist

Tensor Parallelism ist eine Methode, bei der einzelne Gewichtsmatrizen eines Modells auf mehrere GPUs verteilt werden. Praktisch ermöglicht dies vLLM, mehrere GPUs wie ein größeres Gerät mit gemeinsam nutzbarem VRAM zu behandeln.

Warum Tensor Parallelism einsetzen?

Tensor Parallelism ist vor allem ein Werkzeug zur Machbarkeit und nicht primär eine Leistungsoptimierung. Es wird typischerweise aktiviert, wenn:

  • Die Gewichte nicht passen: Das Modell ist zu groß für eine einzelne GPU, beispielsweise ein Llama-3-70B-Modell auf einer 24-GB-Karte.
  • Kein Platz für den KV-Cache bleibt: Die Modellgewichte passen zwar, lassen aber kaum Speicher für lange Kontexte oder hohe Parallelität übrig.

Der Leistungsaufschlag durch Parallelisierung

Tensor Parallelism stellt deutlich mehr kombinierten Speicher bereit, verursacht aber zusätzlichen Kommunikationsaufwand. Nach jeder Rechenschicht müssen die GPUs ihre Teilergebnisse synchronisieren.

  • Wenn das Modell auf eine GPU passt: Der Betrieb auf einer einzelnen GPU ist fast immer schneller als auf zwei GPUs, da keine Synchronisation zwischen GPUs erforderlich ist.
  • Abhängigkeit vom Interconnect: Tensor Parallelism ist stark von schneller GPU-zu-GPU-Bandbreite abhängig. Wenn GPUs nur über Standard-PCIe statt über einen schnellen Interconnect wie NVLink kommunizieren, kann die Inferenzgeschwindigkeit durch Synchronisationslatenz deutlich sinken. Für Multi-GPU-Bereitstellungen können Container-Orchestrierungsplattformen genutzt werden, um vLLM-Workloads zuverlässig zu verwalten.

Für weitere Details dazu, wie Tensor Parallelism Modelle aufteilt und die Latenz beeinflusst, kann Hugging Face: Tensor Parallelism Concepts herangezogen werden.

Die Zahlen in der Praxis: Dimensionierungsszenarien

Bevor erweiterte Konfigurationen betrachtet werden, ist es sinnvoll, die vorherigen Formeln auf realistische Szenarien anzuwenden. So lässt sich das Konzept des „Fits“ validieren, und praktische Einschränkungen werden sichtbar, die reine Mathematik oft übersieht.

Die versteckte VRAM-Abgabe

Ein häufiger Fehler besteht darin, Gewichte und Cache zu addieren und davon auszugehen, dass der gesamte VRAM nutzbar ist. In der Praxis ist eine Auslastung von 100 % nicht möglich.

  • CUDA-Kontext und Laufzeit: GPU-Treiber, PyTorch und die vLLM-Laufzeit reservieren bereits beim Initialisieren Speicher, oft etwa 2 bis 4 GB.
  • Activation Buffers: Für Zwischenergebnisse während des Forward Pass wird temporärer Speicher benötigt.
  • Sichere Dimensionierungsregel: Etwa 4 bis 5 GB VRAM sollten immer als nicht nutzbarer Overhead eingeplant werden. Wenn die Berechnung nur 0,5 GB freien Speicher übrig lässt, ist ein Absturz des Servers wahrscheinlich.

Szenario A: Der einfache Fit für Standard-Chat

Hardware: 1 × NVIDIA L40S mit 48 GB VRAM

Modell: Llama 3 8B in FP16

Berechnung:

  • Gewichte: 8B Parameter × 2 Bytes = 16 GB
  • Overhead: -4 GB
  • Verbleibender Cache-Speicher: 48 – 16 – 4 = 28 GB

Cache-Kapazität:

28.000 MB / 0,15 MB pro Token = 186.000 Token.

Bewertung: Sehr guter Fit.

Diese Konfiguration kann große Workloads bedienen, beispielsweise 60 gleichzeitige Nutzer mit jeweils 3k Kontext.

Ergebnis: Hoher Durchsatz bei niedrigen Kosten.

Szenario B: Der Gewichtsfehler bei einem großen Modell auf einer einzelnen GPU

Hardware: 1 × NVIDIA H100 mit 80 GB VRAM

Modell: Llama 3 70B in FP16

Berechnung:

  • Gewichte: 70B Parameter × 2 Bytes = 140 GB

Bewertung: Nicht realisierbar.

Die Modellgewichte benötigen 140 GB und überschreiten damit physisch die GPU-Kapazität von 80 GB.

Lösung: Tensor Parallelism mit 2 GPUs einsetzen oder Quantisierung anwenden.

Szenario C: Die Cache-Falle, wenn das Modell passt, aber kaum lauffähig ist

Hardware: 1 × NVIDIA H100 mit 80 GB VRAM

Modell: Llama 3 70B, auf FP8 quantisiert

Berechnung:

  • Gewichte: 70B Parameter × 1 Byte = 70 GB
  • Overhead: -4 GB
  • Verbleibender Cache-Speicher: 80 – 70 – 4 = 6 GB

Cache-Kapazität:

6.000 / 0,175 MB pro Token bei FP8 = insgesamt 34.000 Token.

Bewertung: Riskant und schlecht ausbalanciert.

Das Modell lädt, aber für die eigentliche Workload-Ausführung bleibt fast kein Speicher übrig.

Auswirkung: Bei 10 gleichzeitigen Nutzern erhält jeder Nutzer nur etwa 3,4k Kontext. Wenn ein Nutzer ein längeres Dokument mit 4k Token einfügt, kann dem System der Speicher ausgehen.

Lektion: Passende Gewichte bedeuten nicht automatisch, dass der Workload passt. Dieses Szenario erfordert meist eine zweite GPU oder ein kleineres Modell.

Szenario D: Die Lösung mit Tensor Parallelism

Dieses Szenario verbessert die Cache-Falle durch das Hinzufügen einer zweiten GPU und zeigt, wie Tensor Parallelism Speicherressourcen bündelt.

Hardware: 2 × NVIDIA H100 mit jeweils 80 GB, zusammen 160 GB VRAM

Modell: Llama 3 70B, auf FP8 quantisiert

Berechnung:

  • Gesamter VRAM: 160 GB
  • Gewichte: -70 GB, verteilt auf beide GPUs
  • Overhead: -8 GB, angenommen etwa 4 GB pro GPU
  • Verbleibender Cache-Speicher: 160 – 70 – 8 = 82 GB

Cache-Kapazität:

82.000 / 0,175 MB pro Token bei FP8 = insgesamt 468.000 Token.

Bewertung: Produktionsbereit.

Durch die zweite GPU wächst der verfügbare Cache-Speicher von riskanten 6 GB auf deutlich stärkere 82 GB.

Auswirkung: Bei 10 gleichzeitigen Nutzern kann jeder Nutzer etwa 46k Kontext verwenden. Das Out-of-Memory-Risiko ist beseitigt, und die Bereitstellung kann RAG- oder Langdokument-Workloads zuverlässig bedienen.

Quantisierung: Modelle effizient komprimieren

Wie die Dimensionierungsszenarien zeigen, ist VRAM häufig der zentrale Engpass bei LLM-Inferenz. Quantisierung reduziert die numerische Präzision, mit der Daten dargestellt werden, und tauscht einen kleinen Genauigkeitsverlust gegen deutliche Verbesserungen bei Speichereffizienz und Geschwindigkeit.

Dabei ist es wichtig, zwischen den zwei wichtigsten Arten der Quantisierung in vLLM zu unterscheiden, da sie unterschiedliche Probleme lösen.

Typ 1: Modellgewichts-Quantisierung als statische Lösung

Diese Methode komprimiert die großen, statischen Gewichtsmatrizen des vortrainierten Modells, bevor das Modell geladen wird.

  • Ziel: Ein Modell soll auf eine GPU passen, obwohl seine vollpräzisen Gewichte den verfügbaren VRAM überschreiten würden.
  • vLLM-Umsetzung: vLLM kann Gewichte zwar dynamisch beim Start quantisieren, effizienter ist jedoch oft ein bereits vorab quantisiertes Modell mit optimierten Formaten wie AWQ oder GPTQ. Diese Formate bewahren die Genauigkeit meist besser und liefern schnellere Decode-Leistung als eine generische Umwandlung zur Laufzeit.
  • Auswirkung: Der statische VRAM-Bedarf kann mit FP8 oder INT8 um 50 % und mit INT4 oder AWQ um 75 % sinken. Dadurch bleibt deutlich mehr Speicher für den KV-Cache verfügbar.

Typ 2: KV-Cache-Quantisierung als dynamische Lösung

Diese Methode komprimiert die zwischengespeicherten Key- und Value-Zustände, die während der Sequenzgenerierung im Speicher gehalten werden.

  • Ziel: Das Modell soll höhere Parallelität oder längere Kontextfenster unterstützen können.
  • vLLM-Umsetzung: Die KV-Cache-Quantisierung wird über das Runtime-Flag --kv-cache-dtype gesteuert.
  • Empfehlung: Auf modernen GPUs mit FP8-Tensor-Core-Unterstützung, beispielsweise NVIDIA H100, L40S oder AMD MI300X, ist ein FP8-KV-Cache dringend zu empfehlen. Er kann die verfügbare Kontextkapazität nahezu verdoppeln, ohne die Modellqualität spürbar zu beeinträchtigen.
  • Auswirkung: Der Speicherbedarf pro Token halbiert sich im Vergleich zu den zuvor beschriebenen Werten. Bei einem 70B-Modell sinkt der Multiplikator beispielsweise von etwa 0,35 MB pro Token auf ungefähr 0,175 MB pro Token.

GPU-Präzisionsformate für vLLM

Quantisierungsformate unterscheiden sich deutlich. Die passende Wahl hängt von der Hardware-Architektur und dem gewünschten Verhältnis zwischen Modellgröße und Genauigkeit ab.

Präzision / Format Bytes pro Parameter Einfluss auf Genauigkeit Beste Hardware-Unterstützung Empfohlener Einsatzbereich
FP16 / BF16 2 Keine, Referenzqualität Alle modernen GPUs Der Qualitätsstandard. Verwenden, wenn ausreichend VRAM verfügbar ist.
FP8 1 Vernachlässigbar H100, H200, L40S, MI300X Der moderne Standard. Bietet auf neuer Hardware ein sehr gutes Verhältnis aus Geschwindigkeit und Qualität und eignet sich besonders für den KV-Cache.
AWQ / GPTQ INT4-Varianten ~0,5 Niedrig bis mittel A100, L40S, Consumer-GPUs Die Komprimierungsoption. Wichtig für sehr große Modelle auf älteren oder kleineren GPUs, mit starker Decode-Leistung.
Generisches INT8 1 Mittel Ältere GPUs wie V100 oder T4 Eine ältere Option, die auf neuerer Hardware meist durch FP8 oder bei stärkerer Kompression durch AWQ ersetzt wird.

Strategische Anwendung und Kompromisse

Die Entscheidung für Quantisierung erfordert eine Abwägung zwischen praktischen Deployment-Grenzen und der Empfindlichkeit des Workloads. Quantisierung ist wirkungsvoll, bringt aber Kompromisse mit sich, die in der Planung berücksichtigt werden müssen.

Wichtige Faktoren: Genauigkeit und Hardware

Vor der Wahl einer Deployment-Strategie sollten zwei grundlegende Aspekte geprüft werden:

  • Genauigkeit vs. Kompression: Aggressive Quantisierung wie INT4 kann die Qualität bei komplexem Reasoning oder Codegenerierung verringern. FP8 gilt für die meisten Chat- und RAG-Workloads in der Regel als sicher.
  • Hardware-Kompatibilität: Das gewählte Präzisionsformat muss zu den Fähigkeiten der GPU passen. FP8-Quantisierung benötigt beispielsweise GPUs mit FP8-Tensor-Cores, etwa NVIDIA-Ada- oder Hopper-Architekturen beziehungsweise AMD-CDNA3-Architekturen, um echte Leistungsvorteile zu erzielen.

Wann Quantisierung empfohlen wird

Unter Berücksichtigung dieser Kompromisse ist Quantisierung in vielen realen Bereitstellungsszenarien sinnvoll und in Unternehmensumgebungen häufig die bevorzugte Standardwahl.

  • Große Modelle, die nicht in FP16 passen: INT4 oder INT8 ist oft der einzige praktikable Weg, 70B-Modelle auf einer einzelnen 48-GB- oder 80-GB-GPU bereitzustellen.
  • Workloads mit hoher Parallelität: Geringerer VRAM-Verbrauch schafft mehr Platz für den KV-Cache und ermöglicht mehr aktive Sequenzen sowie längere Prompts.
  • RAG und Unternehmens-Chat: Diese Workloads tolerieren kleine Genauigkeitsabweichungen meist gut, ohne dass die Nutzererfahrung spürbar leidet.
  • Kostenoptimierung: Quantisierung ermöglicht den Betrieb auf kleineren und günstigeren GPU-Optionen, während eine akzeptable Leistung erhalten bleibt. Das ist besonders hilfreich, wenn Leistung und Kosten auf GPU-basierter Cloud-Infrastruktur gegeneinander abgewogen werden.

Wann Quantisierung vermieden werden sollte

Quantisierung ist nicht für jeden Workload geeignet. Manche Aufgaben reagieren empfindlich auf Präzisionsverluste und sollten möglichst in FP16 oder BF16 ausgeführt werden.

  • Codegenerierung und Debugging: Geringere Präzision kann strukturiertes Reasoning verschlechtern und zu feinen Syntax- oder Logikfehlern führen.
  • Mathematik, Finanzen und wissenschaftliche Abfragen: Aufgaben mit exakten Berechnungen profitieren von höherer Präzision, um Rundungsfehler zu reduzieren.
  • Evaluation, Benchmarking oder Regressionstests: Bereits kleine Genauigkeitsabweichungen können Vergleiche zwischen Modellversionen oder Konfigurationen verfälschen.
  • Agentische Workflows mit mehrstufigem Reasoning: Kleine Fehler können sich über mehrere Schritte hinweg verstärken und die Zuverlässigkeit sowie Abschlussrate der Aufgabe reduzieren.

Alles zusammenführen: Von Anforderungen zum Deployment-Plan

Bis hierhin wurden das Laufzeitverhalten von vLLM, die Speichergrundlagen und die Quantisierungsstrategien betrachtet.

Dieser Abschnitt verbindet diese Konzepte zu einem wiederholbaren Entscheidungsrahmen. Er führt von der Theorie in die Praxis und bietet einen strukturierten Ablauf, um Machbarkeit zu bewerten, Hardware auszuwählen und einen Deployment-Plan zu erstellen.

Schritt 1: Eine Dimensionierungs-Checkliste nutzen

Um eine vLLM-Bereitstellung präzise zu dimensionieren, müssen konkrete technische Details aus der Workload-Beschreibung abgeleitet werden. Allgemeine Ziele wie „schnelle Inferenz“ reichen dafür nicht aus. Die folgenden fünf Fragen liefern die notwendigen Informationen:

  • Welche maximale Kontextlänge muss unterstützt werden? Diese Angabe bestimmt die Größe des KV-Caches und das Risiko für Out-of-Memory-Fehler.
  • Welche Ziel-Parallelität wird benötigt? Sie vervielfacht den KV-Cache-Bedarf.
  • Welche Latenz ist für TTFT und Token pro Sekunde akzeptabel? Dies hilft zu entscheiden, ob hohe Bandbreite wie bei H100-Klasse-Hardware erforderlich ist oder ob solide allgemeine Kapazität wie bei L40S-Klasse-Hardware ausreicht.
  • Ist Modellgenauigkeit für Mathematik oder Code kritisch, oder reicht gute Qualität für Chat-Anwendungen aus? Diese Antwort bestimmt, ob INT4 oder FP8 zur Kostensenkung genutzt werden kann.
  • Gibt es ein festes Budgetlimit? Dies hilft bei der Entscheidung zwischen maximaler Leistung und Preis-Leistungs-Optimierung.

Schritt 2: Modellgröße und Präzision auswählen

Sobald die Anforderungen bekannt sind, sollte das kleinste Modell mit der höchstmöglichen Präzision gewählt werden, das die geforderte Qualität erreicht.

  • Präzision ist der Hebel: Niedrigere Präzisionsformate wie INT4 oder FP8 machen größere Modelle auf günstigerer Hardware möglich.
  • Die 70B-Regel: Ein 70B-Modell in FP16 benötigt Multi-GPU- oder sehr speicherstarke Hardware. Dasselbe Modell in INT4 kann auf eine einzelne GPU passen.

Empfehlung:

  • Chat- oder Assistant-Workloads: INT4 oder FP8 verwenden.
  • Code- oder Reasoning-Workloads: FP16 oder FP8 verwenden und INT4 vermeiden.

Schritt 3: Hardware-Machbarkeit prüfen

Die Bereitstellung sollte mit den zuvor beschriebenen Speicherberechnungen validiert werden.

  • Statischer Fit für Gewichte: Passen Parameter × Präzision in den VRAM? Falls nicht, muss das Modell quantisiert oder mit Tensor Parallelism auf mehrere GPUs verteilt werden.
  • Dynamischer Fit für den Cache: Reicht der Speicher für Kontext × Parallelität × Multiplikator? Falls nicht, sollten Parallelität reduziert, Kontextlänge gekürzt oder FP8-KV-Cache aktiviert werden.
  • Workload-Fit hinsichtlich Bandbreite: Lange RAG- und Zusammenfassungs-Workloads benötigen hohe Bandbreite, während Standard-Chat vor allem starke Rechenleistung braucht.

Schritt 4: Die GPU-Strategie festlegen

Nach der Machbarkeitsprüfung kann die GPU-Konfiguration ausgewählt werden. Die folgende Übersicht fasst typische Szenarien zusammen.

Typische Konfigurationsergebnisse

Workload-Szenario Empfohlene Konfiguration Begründung
Standard-Chat 8B-14B NVIDIA L40S mit 48 GB Sehr gutes Preis-Leistungs-Verhältnis. Die GPU bietet starke Decode-Rechenleistung, und 48 GB reichen problemlos für kleine Modelle plus großen Cache.
Großer Chat 70B, kostenbewusst L40S INT4 oder A100 INT4 Der Komprimierungsansatz. Quantisierung ermöglicht es, ein 70B-Modell auf einer einzelnen Karte zu betreiben und Multi-GPU-Komplexität zu vermeiden.
High-Performance-Chat 70B NVIDIA H100 FP8 oder AMD MI300X FP16/FP8 Der moderne Standard. H100-Klasse-Hardware nutzt FP8, um Modelle passend und schneller auszuführen. AMD MI300X bietet 192 GB VRAM und ermöglicht 70B-Modelle mit großen Batch-Größen auf einer einzelnen Karte.
Sehr großer Kontext / RAG NVIDIA H200, AMD MI300X oder AMD MI325X Starke Optionen für Bandbreite und Kapazität. Mit 192 GB bei MI300X oder 256 GB bei MI325X werden extreme Kontextlängen wie 128k+ praktikabler, ohne 4 bis 8 GPUs zu benötigen.
Maximale Qualität 70B FP16 2 × H100 mit Tensor Parallelism oder 1 × AMD MI300X NVIDIA benötigt zwei Karten, um 140 GB Modellgewichte unterzubringen. AMD MI300X kann das vollständige 70B-FP16-Modell auf einer einzelnen GPU ausführen und vermeidet dadurch Tensor-Parallelism-Latenz.
Ultra-Scale / Next-Generation 405B+ NVIDIA B300 oder AMD MI350X Für sehr hohe Modelldichte konzipiert. MI350X mit 288 GB konkurriert mit modernen High-End-GPU-Plattformen beim effizienten Betrieb von 400B+-Mixture-of-Experts-Modellen.

Schritt 5: Mit Metriken validieren

Keine theoretische Dimensionierung ist perfekt. Die Validierung sollte immer anhand realer Kennzahlen erfolgen.

  • TTFT prüfen: Ist sie hoch, wird die Prefill-Phase wahrscheinlich durch Speicherbandbreite begrenzt.
  • Inter-Token-Latenz prüfen: Ist sie hoch, könnte die Batch-Größe zu aggressiv sein und die Rechenleistung sättigen.
  • KV-Cache-Nutzung prüfen: Liegt sie dauerhaft über 90 %, besteht ein Risiko für Out-of-Memory-Fehler. Chunked Prefill sollte aktiviert oder die Parallelität reduziert werden.

Häufig gestellte Fragen

1. Wie viel GPU-Speicher wird für LLM-Inferenz benötigt?

Die Planung des GPU-Speichers hängt von vier Hauptfaktoren ab: der Anzahl der Modellparameter, dem verwendeten Präzisionsformat, der Kontextlänge und der Anzahl gleichzeitiger Nutzer. Allein für die Modellgewichte benötigt FP16 in der Regel etwa 2 GB pro Milliarde Parameter. Ein Modell mit 70 Milliarden Parametern belegt somit ungefähr 140 GB VRAM in FP16, während eine INT4-Quantisierung den Speicherbedarf der Gewichte auf rund 35 GB reduzieren kann.

Zusätzlich muss der KV-Cache berücksichtigt werden, dessen Speicherbedarf mit längeren Kontextfenstern und höherer Parallelität wächst. Ein 70B-Modell mit einem Kontext von 32.000 Tokens und 10 gleichzeitigen Nutzern kann beispielsweise etwa 112 GB für einen KV-Cache in FP16 benötigen. Bei Verwendung von FP8 reduziert sich dieser Bedarf auf ungefähr 56 GB.

2. Was ist der Unterschied zwischen Tensor Parallelism und Pipeline Parallelism in vLLM?

Tensor Parallelism verteilt Modellgewichtsmatrizen innerhalb jeder Schicht auf mehrere GPUs, sodass die GPUs gleichzeitig an derselben Berechnung arbeiten. Dadurch wird VRAM gebündelt, aber nach jeder Schicht ist Synchronisation erforderlich, was Kommunikationsaufwand verursacht. Pipeline Parallelism verteilt hingegen Modellschichten sequenziell auf GPUs, wobei verschiedene GPUs unterschiedliche Schichten verarbeiten. Tensor Parallelism wird normalerweise genutzt, wenn ein Modell zu groß für eine einzelne GPU ist. Pipeline Parallelism ist häufiger in Trainingsszenarien anzutreffen. Für Inferenz ist Tensor Parallelism der Standardansatz, wenn Modelle die Kapazität einer einzelnen GPU überschreiten.

3. Wann sollte Quantisierung für vLLM-Bereitstellungen genutzt werden?

Quantisierung wird empfohlen, wenn Modelle nicht in den verfügbaren VRAM passen, wenn höhere Parallelität oder längere Kontextfenster erforderlich sind oder wenn Kostenoptimierung eine wichtige Rolle spielt. FP8-Quantisierung eignet sich besonders für moderne Hardware wie H100, L40S oder MI300X und verursacht in der Regel nur minimale Genauigkeitsverluste. INT4-Quantisierung ist hilfreich, um große Modelle auf kleineren GPUs auszuführen, sollte jedoch bei Codegenerierung, Mathematik und wissenschaftlichen Workloads vermieden werden, wenn hohe Präzision wichtig ist. Für Chat- und RAG-Workloads ist Quantisierung häufig die bevorzugte Standardoption.

4. Wie lassen sich KV-Cache-Speicheranforderungen berechnen?

Für eine schnelle Abschätzung eignet sich die Multiplikator-Methode pro Token: Gesamttoken, berechnet aus Kontextlänge × Parallelität, werden mit dem modellspezifischen Multiplikator multipliziert. Für kleine Modelle im Bereich 7B bis 14B gelten 0,15 MB pro Token für FP16-Cache oder 0,075 MB für FP8-Cache. Für große Modelle im Bereich 70B bis 80B gelten 0,35 MB pro Token für FP16-Cache oder 0,175 MB für FP8-Cache. Für exakte Berechnungen kann die Formel Gesamter KV-Cache (GB) = (2 × n_layers × d_model × n_seq_len × n_batch × precision_bytes) / 1024³ verwendet werden, alternativ ein Tool wie der LMCache KV Calculator.

5. Kann vLLM auf Cloud-GPU-Instanzen betrieben werden?

Ja, vLLM kann auf Cloud-GPU-Instanzen bereitgestellt werden. Viele Anbieter stellen GPU-basierte virtuelle Maschinen mit NVIDIA- oder AMD-GPUs bereit, die die Anforderungen von vLLM erfüllen. Bei der Bereitstellung sollte sichergestellt werden, dass die ausgewählte GPU genügend VRAM für Modellgröße und erwarteten Workload besitzt. Für kosteneffiziente Deployments sind quantisierte Modelle wie INT4 oder FP8 sinnvoll, um größere Modelle auf kleineren GPU-Instanzen zu betreiben. Bei Multi-GPU-Bereitstellungen sind schnelle GPU-Interconnects wichtig, damit Tensor Parallelism effizient funktioniert.

Praktische Einsatzbereiche von vLLM-GPU-Inferenz

Auf Basis des Verständnisses dafür, wie Modellgröße, Präzision, GPU-Architektur, KV-Cache und Batching die Leistung beeinflussen, lassen sich diese Konzepte auf praktische vLLM-Workloads anwenden.

Für jeden Anwendungsfall helfen drei zentrale Fragen dabei, die optimale Konfiguration zu bestimmen:

  • Workload-Definition: Welche Merkmale sind entscheidend, etwa Prompt-Länge, Ausgabelänge, Parallelität und Latenzempfindlichkeit?
  • Dimensionierungsprioritäten: Welche Faktoren bilden den Engpass, beispielsweise Gewichte vs. KV-Cache oder Bandbreite vs. Rechenleistung?
  • Konfigurationsmuster: Welche Flags und Hardware-Entscheidungen liefern zuverlässig gute Ergebnisse?

Anwendungsfall 1: Interaktive Chats und Assistenten

  • Fokus: Niedrige Latenz und decode-gebundene Leistung.
  • Ziel: Flüssiges Streaming und schnelle „Tippgeschwindigkeit“ für Nutzer.
  • Zentrale Grenze: Rechenleistung in TFLOPS und Inter-Token-Latenz.

Anwendungsfall 2: Batch-Verarbeitung mit hohem Volumen

  • Fokus: Maximaler Durchsatz und compute-gebundene Ausführung.
  • Ziel: Millionen Token pro Stunde für Offline-Workloads wie Zusammenfassungen verarbeiten.
  • Zentrale Grenze: Gesamtsystemdurchsatz, gemessen in Token pro Sekunde.

Anwendungsfall 3: RAG und Long-Context-Reasoning

  • Fokus: Kontextkapazität und speichergebundene Leistung.
  • Ziel: Sehr große Dokumente oder lange Verläufe in den Speicher bringen, ohne Ausfälle zu verursachen.
  • Zentrale Grenze: VRAM-Kapazität und Speicherbandbreite für schnellen Prefill.

Fazit

Die richtige Dimensionierung und Konfiguration von GPUs für vLLM setzt voraus, dass die wichtigsten Kompromisse zwischen Modellgröße, Präzision, Kontextlänge und Parallelität verstanden werden. Prefill und Decode stellen unterschiedliche Anforderungen an die Hardware: Prefill hängt stark von der Speicherbandbreite ab, während Decode vor allem Rechendurchsatz benötigt. Quantisierung ist der wichtigste Hebel, um größere Modelle auf vorhandener Hardware zu betreiben, und Tensor Parallelism macht Skalierung über einzelne GPUs hinaus möglich.

Entscheidend für eine erfolgreiche Bereitstellung ist, die Eigenschaften des Workloads mit der passenden Hardware-Konfiguration abzugleichen. Interaktive Chat-Anwendungen priorisieren Rechenleistung für schnelle Token-Generierung, während RAG- und Long-Context-Workloads große VRAM-Kapazität und hohe Speicherbandbreite benötigen. Mit dem beschriebenen Dimensionierungsrahmen lässt sich die Machbarkeit systematisch prüfen, geeignete Hardware auswählen und eine vLLM-Bereitstellung für produktive Workloads optimieren.

Quelle: digitalocean.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren:

Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

IoT-Automatisierung mit MQTT Broker und MongoDB

Databases, Tutorial
Vijonavor 49 Minuten IoT-Automatisierungspipeline mit Coreflux MQTT Broker und MongoDB bereitstellen MQTT-Broker gehören zu den zentralen Bausteinen moderner IoT-Infrastrukturen und Automatisierungsumgebungen. Sie dienen als zentraler, einheitlicher und schneller Datenknotenpunkt, der die…
Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

CrewAI Crashkurs: Multi-Agenten-KI mit Python

Python, Tutorial
Vijonavor 2 Stunden CrewAI Crash Course: Produktionsreife Multi-Agenten-KI-Workflows erstellen CrewAI ist ein schlankes und sehr schnelles Python-Framework, mit dem sich autonome KI-Agenten koordinieren lassen, die gemeinsam als Team eine definierte Aufgabe…
Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

RL-Umgebungen für LLMs und KI-Agenten

AI/ML, Tutorial
Vijonavor 3 Stunden RL-Umgebungen für LLMs und autonome KI-Systeme Ein dauerhaft spannendes Forschungs- und Entwicklungsfeld im Bereich Künstliche Intelligenz ist der Einsatz von LLMs in vollständig autonomen End-to-End-Systemen, die auf Multi-Agenten-Architekturen…