vLLM: Hochleistungs-Inferenz für Server
Was dieser Artikel über vLLM behandelt
- Was vLLM ist und wann Du es statt Ollama oder llama.cpp einsetzt.
- Wie PagedAttention und Continuous Batching die Performance steigern.
- Schritt-für-Schritt Installation und Start eines vLLM-Servers.
- Aufruf der OpenAI-kompatiblen API mit praktischen Beispielen.
- Performance-Tuning, Hardware-Anforderungen und typische Stolpersteine.
Einleitung: vLLM verständlich erklärt
Du betreibst ein lokales LLM und willst es mehreren Nutzern gleichzeitig zur Verfügung stellen? Dann stößt Du schnell an die Grenzen von Tools, die für einzelne Anfragen optimiert sind. vLLM schließt genau diese Lücke. Es ist eine Inferenz-Engine, die speziell für hohen Durchsatz und niedrige Latenz auf Server-Hardware entwickelt wurde.
vLLM wurde 2023 von Forschern der UC Berkeley vorgestellt und hat sich schnell als Standard für produktive LLM-Auslieferung etabliert. Die Kernidee: den teuren VRAM auf der GPU so effizient wie möglich nutzen, damit viele Anfragen parallel bearbeitet werden können.
Warum brauche ich vLLM?
Stell Dir vor, Du betreibst einen internen Chatbot für ein 50-köpfiges Team. Jeder Mitarbeiter stellt Fragen, oft gleichzeitig. Mit einer einfachen Lösung wie Ollama werden Anfragen nacheinander verarbeitet. Bei 10 gleichzeitigen Nutzern warten die letzten Minuten auf ihre Antwort.
vLLM löst dieses Problem. Es verarbeitet dutzende Anfragen parallel auf einer GPU, ohne dass jede einzeln den kompletten KV-Cache reservieren muss. Das Ergebnis: höhere Throughput, kürzere Wartezeiten, zufriedenere Nutzer.
Typische Szenarien für vLLM:
- Produktiver Chatbot für Teams oder Kunden.
- API-Backend für mehrere Anwendungen gleichzeitig.
- Batch-Verarbeitung großer Textmengen.
- Lastverteilung über mehrere GPUs mit Tensor Parallelism.
Wer nur lokal an einem Modell experimentiert, ist mit llama.cpp oder Ollama besser bedient. vLLM entfaltet seine Stärken erst unter Last.
vLLM kurz erklärt
vLLM ist eine Python-Bibliothek und Inferenz-Engine, die große Sprachmodelle auf GPUs ausführt. Sie bietet eine OpenAI-kompatible API, sodass Du bestehende Clients und Bibliotheken ohne Änderungen weiter nutzen kannst. Der Fokus liegt auf Effizienz: mehr Token pro Sekunde bei gleichem Hardware-Budget.
Für wen ist vLLM gedacht?
vLLM richtet sich an Entwickler und Betreiber, die LLMs in Produktion bringen. Wenn Du eine GPU im Server stehen hast und mehrere Nutzer oder Anwendungen bedienen musst, ist vLLM die richtige Wahl. Für Einsteiger, die nur lokal experimentieren, ist es überdimensioniert und komplexer in der Einrichtung als Ollama.
Voraussetzungen im Überblick:
- Eine NVIDIA- oder AMD-GPU mit ausreichend VRAM.
- Linux als Betriebssystem, Windows nur über WSL2.
- Grundkenntnisse in Python und Kommandozeile.
- Verständnis von GPU-Speicher und Quantisierung.
Wichtige Begriffe rund um vLLM
| Begriff | Erklärung |
|---|---|
| vLLM | Inferenz-Engine für hohe Throughput auf GPUs |
| PagedAttention | Speicherverwaltung für den KV-Cache, ähnlich virtuellem Speicher im Betriebssystem |
| Continuous Batching | Anfragen werden dynamisch in laufende Batches eingeschleust, ohne auf den Abschluss des gesamten Batches zu warten |
| Throughput | Anzahl verarbeiteter Token pro Sekunde über alle Anfragen hinweg |
| Latency | Zeit, bis die ersten Token einer einzelnen Anfrage zurückkommen |
| OpenAI API | Kompatibles HTTP-Interface, das den Endpunkten von OpenAI entspricht |
| Tensor Parallelism | Aufteilung eines Modells über mehrere GPUs hinweg |
| Quantisierung | Reduzierung der Genauigkeit von Gewichten, um VRAM zu sparen |
| KV-Cache | Zwischenspeicher für Keys und Values während der Textgenerierung |
| QPS | Queries Per Second, Maß für die Anzahl bearbeiteter Anfragen pro Sekunde |
Was macht vLLM besonders?
PagedAttention für effizienten Speicher
Der KV-Cache ist der größte Speicherfresser bei der Inferenz. Ohne Optimierung reserviert vLLM für jede Anfrage einen zusammenhängenden Speicherblock, passend zur maximal möglichen Sequenzlänge. Das führt zu enormer Verschwendung, weil die meisten Anfragen viel kürzer sind.
PagedAttention löst das, indem es den KV-Cache in kleine Blöcke (Pages) aufteilt, ähnlich wie ein Betriebssystem virtuellen Speicher verwaltet. Eine Anfrage belegt nur so viele Pages, wie sie tatsächlich braucht. Wächst die Sequenz, werden neue Pages zugewiesen. Das reduziert die Speicherverschwendung auf unter 4 Prozent.
Continuous Batching für hohen Durchsatz
Klassisches Batching wartet, bis alle Anfragen eines Batches fertig sind, bevor das nächste Batch startet. Eine lange Anfrage blockiert dabei alle kurzen im selben Batch. Continuous Batching fügt neue Anfragen in jedem Schritt dynamisch hinzu und entfernt fertige sofort. Die GPU bleibt kontinuierlich ausgelastet.
Beide Techniken zusammen ermöglichen es vLLM, den Durchsatz im Vergleich zu naiver Inferenz um ein Vielfaches zu steigern. Messungen zeigen oft 2- bis 4-fache Throughput gegenüber HuggingFace Transformers bei gleichem Modell und gleicher Hardware.
Installation
vLLM benötigt eine CUDA-fähige NVIDIA-GPU oder eine ROCm-fähige AMD-GPU. Details zur Hardware-Entscheidung findest Du im Artikel zu CPU vs. GPU.
Voraussetzungen:
- Linux (Ubuntu 20.04 oder neuer empfohlen)
- NVIDIA GPU mit Compute Capability 7.0 oder höher
- CUDA 12.1 oder neuer
- Python 3.9 bis 3.12
Installation über pip:
pip install vllm
Bei AMD-GPUs nutzt Du den zusätzlichen Index:
pip install vllm --extra-index-url https://download.pytorch.org/whl/rocm6.2
Prüfe nach der Installation, ob vLLM die GPU erkennt:
python -c "import vllm; print(vllm.__version__)"
Server starten
vLLM bringt einen eingebauten Server mit, der eine OpenAI-kompatible API bereitstellt. Der Start erfolgt über ein Python-Modul:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization 0.9 \
--max-model-len 8192
Wichtige Argumente:
| Argument | Bedeutung |
|---|---|
--model | Name des Modells auf HuggingFace oder lokaler Pfad |
--host | Netzwerk-Interface, 0.0.0.0 für externen Zugriff |
--port | Port des Servers, Standard 8000 |
--gpu-memory-utilization | Anteil des VRAM, den vLLM nutzen darf, Standard 0.9 |
--max-model-len | Maximale Kontextlänge in Token |
--tensor-parallel-size | Anzahl GPUs für Tensor Parallelism |
--quantization | Quantisierungsverfahren, z.B. awq oder gptq |
Der erste Start lädt das Modell in den VRAM und initialisiert den KV-Cache. Das dauert je nach Modellgröße zwischen Sekunden und Minuten.
API nutzen
Sobald der Server läuft, sprichst Du ihn wie die OpenAI-API an. Ein einfacher Chat-Request mit curl:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token-abc123" \
-d '{
"model": "meta-llama/Llama-3.1-8B-Instruct",
"messages": [
{"role": "user", "content": "Erkläre PagedAttention in drei Sätzen."}
],
"temperature": 0.7
}'
Die Antwort folgt dem bekannten OpenAI-Format:
{
"id": "chat-abc123",
"object": "chat.completion",
"choices": [
{
"message": {
"role": "assistant",
"content": "PagedAttention teilt den KV-Cache in kleine Blöcke auf..."
}
}
]
}
Auch der Completions-Endpunkt wird unterstützt:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Llama-3.1-8B-Instruct",
"prompt": "Die Hauptstadt von Frankreich ist",
"max_tokens": 5
}'
Modelle auflisten:
curl http://localhost:8000/v1/models
In Python nutzt Du die offizielle openai-Bibliothek mit angepasster Base-URL:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-abc123"
)
response = client.chat.completions.create(
model="meta-llama/Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": "Was ist Continuous Batching?"}]
)
print(response.choices[0].message.content)
Performance-Tuning
Tensor Parallelism
Bei Modellen, die nicht auf eine GPU passen, verteilst Du sie über mehrere GPUs. Setze --tensor-parallel-size auf die Anzahl der verfügbaren GPUs:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-70B-Instruct \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.9
Die GPUs müssen über NVLink oder PCIe gut verbunden sein, sonst wird die Kommunikation zum Flaschenhals. Mehr zur Bedeutung der Verbindungsgeschwindigkeit im Artikel zur Speicherbandbreite.
GPU Memory Utilization
Der Parameter --gpu-memory-utilization steuert, wie viel VRAM vLLM reservieren darf. Der Standardwert 0.9 bedeutet 90 Prozent. Auf einem Server mit 24 GB VRAM sind das rund 21,6 GB für Modellgewichte und KV-Cache.
Setze den Wert niedriger, wenn andere Prozesse VRAM benötigen. Erhöhe ihn nur, wenn vLLM die einzige GPU-Anwendung ist.
Max Model Length
--max-model-len begrenzt die maximale Token-Anzahl pro Anfrage. Ein höherer Wert ermöglicht längere Kontexte, reserviert aber mehr Speicher für den KV-Cache. Wähle den kleinsten Wert, der Dein Use-Case benötigt.
Quantisierung
Quantisierung reduziert die Modellgröße und den VRAM-Bedarf erheblich. vLLM unterstützt AWQ, GPTQ und weitere Verfahren:
python -m vllm.entrypoints.openai.api_server \
--model TheBloke/Llama-3.1-8B-Instruct-AWQ \
--quantization awq
Ein 8B-Modell in FP16 braucht rund 16 GB VRAM. Mit AWQ-Quantisierung sinkt der Bedarf auf etwa 6 GB, was den Einsatz auf kleineren GPUs ermöglicht.
vLLM vs. Ollama vs. llama.cpp
| Eigenschaft | vLLM | Ollama | llama.cpp |
|---|---|---|---|
| Hauptanwendung | Produktion, Multi-User | Lokale Experimente | Ressourcenschonende Inferenz |
| Performance (Multi-User) | Sehr hoch | Mittel | Niedrig bis mittel |
| Einfachheit der Einrichtung | Mittel | Sehr einfach | Einfach |
| GPU-Support | NVIDIA, AMD | NVIDIA, AMD, Mac | NVIDIA, AMD, CPU |
| Continuous Batching | Ja | Begrenzt | Nein |
| OpenAI API | Ja, nativ | Ja, über Kompatibilität | Über externen Server |
| CPU-Inferenz | Nein | Ja | Ja |
| Ideal für | Server, Teams | Einzelplatz | Low-End-Hardware |
Die Entscheidung hängt vom Use-Case ab. Für einen produktiven Server mit vielen Nutzern ist vLLM die beste Wahl. Für schnelle lokale Tests Ollama. Für CPU-only-Systeme llama.cpp. Mehr zum Vergleich der Ansätze im Artikel LLM lokal betreiben.
Beispiel: vLLM Server für ein Team
Ein praktisches Setup für ein kleines Team mit einer NVIDIA-GPU (24 GB VRAM).
Schritt 1: Virtuelle Umgebung erstellen.
python -m venv vllm-env
source vllm-env/bin/activate
pip install vllm
Schritt 2: Ein quantisiertes Modell wählen, das in den VRAM passt. Für 24 GB eignet sich ein 8B-Modell in AWQ.
Schritt 3: Server mit sinnvollen Defaults starten.
python -m vllm.entrypoints.openai.api_server \
--model casperhansen/llama-3-8b-instruct-awq \
--quantization awq \
--host 0.0.0.0 \
--port 8000 \
--gpu-memory-utilization 0.85 \
--max-model-len 4096 \
--api-key token-team-2026
Schritt 4: Server als systemd-Service einrichten, damit er nach Reboot automatisch startet.
# /etc/systemd/system/vllm.service
[Unit]
Description=vLLM Server
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu
ExecStart=/home/ubuntu/vllm-env/bin/python -m vllm.entrypoints.openai.api_server --model casperhansen/llama-3-8b-instruct-awq --quantization awq --host 0.0.0.0 --port 8000 --gpu-memory-utilization 0.85 --max-model-len 4096 --api-key token-team-2026
Restart=on-failure
[Install]
WantedBy=multi-user.target
Aktivieren und starten:
sudo systemctl daemon-reload
sudo systemctl enable vllm
sudo systemctl start vllm
Schritt 5: Im Team den API-Endpunkt verteilen. Jeder nutzt die Base-URL http://server-ip:8000/v1 mit dem vergebenen API-Key.
Typische Stolpersteine bei vLLM
-
VRAM reicht nicht aus. Ein 70B-Modell in FP16 braucht über 140 GB VRAM. Prüfe vor dem Start, ob das Modell in den verfügbaren Speicher passt, und nutze bei Bedarf Quantisierung.
-
Falsche CUDA-Version. vLLM benötigt CUDA 12.1 oder neuer. Eine veraltete CUDA-Installation führt zu kryptischen Fehlern beim Import. Überprüfe mit
nvcc --version. -
Windows ohne WSL2. vLLM läuft nicht nativ auf Windows. Nutze WSL2 mit Ubuntu, sonst schlägt die Installation fehl.
-
Tensor Parallelism ohne NVLink. Mehrere GPUs ohne schnelle Verbindung bremsen die Performance massiv. Prüfe die Verbindung mit
nvidia-smi nvlink -s. -
API-Key vergessen. Ohne
--api-keyakzeptiert der Server Anfragen ohne Authentifizierung. In Produktion ist das ein Sicherheitsrisiko. -
Max Model Length zu hoch. Ein Wert von 128000 reserviert riesige KV-Cache-Pools und lässt kaum Platz für Modellgewichte. Senke den Wert auf das echte Minimum.
-
Modell nicht im Chat-Format. Ein Base-Modell ohne Instruct-Tuning liefert schlechte Ergebnisse im Chat-Endpunkt. Wähle immer Instruct- oder Chat-Versionen.
-
Gleichzeitige Downloads blockieren den Start. Beim ersten Start lädt vLLM das Modell von HuggingFace herunter. Bei langsamer Verbindung kann das lange dauern. Lade das Modell vorher mit
huggingface-cliherunter und gib den lokalen Pfad an.
Hardware, Kosten und Sicherheit bei vLLM
Hardware
vLLM benötigt zwingend eine GPU. Für Einsteiger-Setups reicht eine NVIDIA RTX 4090 mit 24 GB VRAM. Für größere Modelle brauchst Du Server-GPUs wie die A100 oder H100 mit 40 bis 80 GB VRAM, eventuell mehrere Stück für Tensor Parallelism.
Kosten
Die GPU ist der größte Kostenfaktor. Eine gebrauchte RTX 4090 liegt bei etwa 1000 Euro. Ein Cloud-Server mit A100 kostet monatlich mehrere hundert Euro. Rechne die Stromkosten ein, eine RTX 4090 zieht unter Last rund 450 Watt. Mehr zur Hardware-Auswahl im Artikel Was ist lokale KI?.
Sicherheit
Setze immer einen API-Key mit --api-key. Stelle den Server nicht ohne Firewall-Regeln ins Internet. Nutze einen Reverse Proxy wie Nginx mit TLS, wenn Du den Endpunkt außerhalb Deines Netzwerks erreichbar machst. Protokolliere Zugriffe, um Missbrauch zu erkennen.
Weiterführende Links und Infos zu vLLM
- vLLM GitHub-Repository mit Dokumentation und Beispielen.
- vLLM Paper: Efficient Memory Management for LLM Serving with PagedAttention für die wissenschaftlichen Grundlagen.
- HuggingFace Model Hub zum Finden kompatibler Modelle.
- Übersicht lokaler KI-Software auf BotServ.de.
FAQ: vLLM - Typische Fragen
Was ist vLLM?
vLLM ist eine Inferenz-Engine für große Sprachmodelle auf GPUs. Es optimiert Durchsatz und Speichernutzung durch PagedAttention und Continuous Batching.
Ist vLLM kostenlos?
Ja, vLLM ist Open Source unter der Apache-2.0-Lizenz und kostenlos. Kosten entstehen nur durch Hardware und Strom.
Kann ich vLLM auf CPU nutzen?
Nein, vLLM benötigt eine GPU mit CUDA oder ROCm. Für CPU-Inferenz nutze llama.cpp.
Brauche ich mehrere GPUs für vLLM?
Nein, eine GPU reicht für Modelle, die in ihren VRAM passen. Mehrere GPUs brauchst Du nur für große Modelle oder höhere Throughput.
Was ist der Unterschied zwischen vLLM und Ollama?
vLLM ist auf Produktion und hohen Durchsatz optimiert, Ollama auf einfache lokale Nutzung. Für Multi-User-Szenarien ist vLLM die bessere Wahl.
Unterstützt vLLM die OpenAI-API?
Ja, vLLM bringt einen Server mit, der die OpenAI-Endpunkte für Chat-Completions und Completions nativ implementiert.
Welche Modelle funktionieren mit vLLM?
Alle Modelle im HuggingFace-Format, die vLLM unterstützt. Dazu gehören Llama, Mistral, Qwen, Phi und viele weitere. Quantisierte AWQ- und GPTQ-Varianten werden ebenfalls unterstützt.
Wie viel VRAM brauche ich für vLLM?
Mindestens so viel wie die Modellgewichte benötigen, plus Platz für den KV-Cache. Ein 8B-Modell in FP16 braucht rund 16 GB, mit AWQ etwa 6 GB. Reserve für den KV-Cache einplanen.
Kann ich vLLM auf Windows nutzen?
Nur über WSL2 mit Ubuntu. Nativer Windows-Support ist nicht gegeben.
Was ist PagedAttention?
PagedAttention ist vLLMs Speicherverwaltung für den KV-Cache. Sie teilt den Cache in kleine Blöcke auf, ähnlich virtuellem Speicher in Betriebssystemen, und reduziert Verschwendung drastisch.
Läuft vLLM mit AMD-GPUs?
Ja, vLLM unterstützt AMD-GPUs über ROCm. Die Installation erfordert den zusätzlichen ROCm-Index bei pip.
Wie starte ich vLLM automatisch nach Reboot?
Richte einen systemd-Service ein, der den vLLM-Server beim Systemstart ausführt. Ein Beispiel findest Du im Abschnitt zum Team-Setup.
Quellen und weiterführende Literatur
- Kwon, W. et al. (2023): Efficient Memory Management for Large Language Model Serving with PagedAttention. arXiv:2309.06180.
- vLLM Project: Offizielle Dokumentation, GitHub-Repository.
- NVIDIA: CUDA Toolkit Documentation.
- HuggingFace: Model Hub und Transformers-Dokumentation.


