vLLM Quickstart: Hochleistungs-LLM-Serving
Schnelle LLM-Inferenz mit der OpenAI-API
vLLM ist ein hochleistungsfähiger, speichereffizienter Inference- und Serving-Engine für Large Language Models (LLMs), entwickelt vom Sky Computing Lab der UC Berkeley.
Mit seinem revolutionären PagedAttention-Algorithmus erreicht vLLM eine 14- bis 24-fach höhere Durchsatzrate als herkömmliche Serving-Methoden und ist damit die erste Wahl für produktive LLM-Implementierungen.

Was ist vLLM?
vLLM (virtueller LLM) ist eine Open-Source-Bibliothek für schnelle LLM-Inference und Serving, die schnell zum Branchenstandard für produktive Implementierungen geworden ist. Seit ihrer Veröffentlichung im Jahr 2023 führte sie PagedAttention ein, eine bahnbrechende Speicherverwaltungstechnik, die die Servingeffizienz deutlich verbessert.
Wichtige Funktionen
Hohe Durchsatzleistung: vLLM bietet eine 14- bis 24-fach höhere Durchsatzrate im Vergleich zu HuggingFace Transformers mit derselben Hardware. Diese massive Leistungssteigerung resultiert aus kontinuierlichem Batching, optimierten CUDA-Kernen und dem PagedAttention-Algorithmus, der Speicherfragmentierung eliminiert.
OpenAI API-Kompatibilität: vLLM enthält einen integrierten API-Server, der vollständig mit dem Format von OpenAI kompatibel ist. Dies ermöglicht eine nahtlose Migration von OpenAI zu selbstgehosteter Infrastruktur ohne Änderungen am Anwendungscode. Richten Sie einfach Ihren API-Client auf das vLLM-Endpoint aus, und es funktioniert transparent.
PagedAttention-Algorithmus: Die Kerninnovation hinter der Leistung von vLLM ist PagedAttention, die das Konzept der virtuellen Speicherseitenverwaltung auf Aufmerksamkeitsmechanismen anwendet. Anstatt zusammenhängende Speicherblöcke für KV-Caches zuzuweisen (was zu Fragmentierung führt), unterteilt PagedAttention den Speicher in festgelegte Blöcke, die bei Bedarf zugewiesen werden können. Dies reduziert Speicherverschwendung um bis zu 400 % und ermöglicht deutlich größere Batch-Größen.
Kontinuierliches Batching: Im Gegensatz zum statischen Batching, bei dem gewartet wird, bis alle Sequenzen abgeschlossen sind, verwendet vLLM kontinuierliches (rollendes) Batching. Sobald eine Sequenz abgeschlossen ist, kann eine neue zur Batch hinzugefügt werden. Dies maximiert die GPU-Auslastung und minimiert die Latenz für eingehende Anfragen.
Multi-GPU-Unterstützung: vLLM unterstützt Tensor-Parallelität und Pipeline-Parallelität zur Verteilung großer Modelle über mehrere GPUs. Es kann Modelle effizient bedienen, die nicht in den Speicher einer einzelnen GPU passen, und unterstützt Konfigurationen von 2 bis 8+ GPUs.
Breite Modellunterstützung: Kompatibel mit beliebten Modellarchitekturen, darunter LLaMA, Mistral, Mixtral, Qwen, Phi, Gemma und vielen anderen. Unterstützt sowohl instruktionstrainierte als auch Basismodelle vom HuggingFace Hub.
Wann vLLM verwenden
vLLM glänzt in bestimmten Szenarien, in denen seine Stärken besonders zum Tragen kommen:
Produktive API-Dienste: Wenn Sie einen LLM über API für viele gleichzeitige Benutzer bereitstellen müssen, ist vLLM mit seiner hohen Durchsatzrate und effizienten Batching-Funktion die beste Wahl. Unternehmen, die Chatbots, Code-Assistenten oder Content-Generierungsdienste betreiben, profitieren von seiner Fähigkeit, Hunderte von Anfragen pro Sekunde zu verarbeiten.
Hochkonkurrierende Arbeitslasten: Wenn Ihre Anwendung viele gleichzeitige Benutzer hat, die Anfragen stellen, ermöglichen vLLMs kontinuierliches Batching und PagedAttention die Bedienung mehrerer Benutzer mit derselben Hardware im Vergleich zu Alternativen.
Kostenoptimierung: Wenn GPU-Kosten ein Problem darstellen, ermöglicht die überlegene Durchsatzrate von vLLM die Bedienung desselben Verkehrs mit weniger GPUs, was die Infrastrukturkosten direkt reduziert. Die 4-fache Speichereffizienz von PagedAttention ermöglicht auch die Verwendung kleinerer, günstigerer GPU-Instanzen.
Kubernetes-Implementierungen: Das stateless-Design und die containerfreundliche Architektur von vLLM machen es ideal für Kubernetes-Cluster. Seine konsistente Leistung unter Last und die einfache Ressourcenverwaltung integrieren sich gut in cloud-native-Infrastrukturen.
Wann vLLM NICHT verwenden: Für lokale Entwicklung, Experimente oder Einzelnutzer-Szenarien bieten Tools wie Ollama eine bessere Benutzererfahrung mit einfacherer Einrichtung. Die Komplexität von vLLM lohnt sich erst, wenn Sie seine Leistungsvorteile für produktive Arbeitslasten benötigen.
Wie vLLM installieren
Voraussetzungen
Stellen Sie vor der Installation von vLLM sicher, dass Ihr System diese Anforderungen erfüllt:
- GPU: NVIDIA-GPU mit Rechenfähigkeit 7.0+ (V100, T4, A10, A100, H100, RTX 20/30/40-Serie)
- CUDA: Version 11.8 oder höher
- Python: 3.8 bis 3.11
- VRAM: Mindestens 16 GB für 7B-Modelle, 24 GB+ für 13B, 40 GB+ für größere Modelle
- Treiber: NVIDIA-Treiber 450.80.02 oder neuer
Installation via pip
Die einfachste Installationsmethode ist die Verwendung von pip. Dies funktioniert auf Systemen mit CUDA 11.8 oder neuer:
# Erstellen Sie eine virtuelle Umgebung (empfohlen)
python3 -m venv vllm-env
source vllm-env/bin/activate
# Installieren Sie vLLM
pip install vllm
# Überprüfen Sie die Installation
python -c "import vllm; print(vllm.__version__)"
Für Systeme mit unterschiedlichen CUDA-Versionen installieren Sie das entsprechende Rad:
# Für CUDA 12.1
pip install vllm==0.4.2+cu121 -f https://github.com/vllm-project/vllm/releases
# Für CUDA 11.8
pip install vllm==0.4.2+cu118 -f https://github.com/vllm-project/vllm/releases
Installation mit Docker
Docker bietet die zuverlässigste Implementierungsmethode, insbesondere für produktive Zwecke:
# Laden Sie das offizielle vLLM-Image herunter
docker pull vllm/vllm-openai:latest
# Führen Sie vLLM mit GPU-Unterstützung aus
docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model mistralai/Mistral-7B-Instruct-v0.2
Die Flagge --ipc=host ist wichtig für Multi-GPU-Konfigurationen, da sie eine ordnungsgemäße Interprozesskommunikation ermöglicht.
Installation aus dem Quellcode
Für die neuesten Funktionen oder benutzerdefinierte Anpassungen installieren Sie aus dem Quellcode:
git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .
vLLM Quickstart Guide
Ausführen Ihres ersten Modells
Starten Sie vLLM mit einem Modell über die Befehlszeilenschnittstelle:
# Laden und bereitstellen von Mistral-7B mit OpenAI-kompatiblem API
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mistral-7B-Instruct-v0.2 \
--port 8000
vLLM lädt das Modell automatisch vom HuggingFace Hub herunter (falls nicht zwischengespeichert) und startet den Server. Sie sehen eine Ausgabe, die anzeigt, dass der Server bereit ist:
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
API-Anfragen senden
Sobald der Server läuft, können Sie Anfragen mit dem OpenAI-Python-Client oder curl senden:
Mit curl:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.2",
"prompt": "Erklären Sie, was vLLM in einem Satz ist:",
"max_tokens": 100,
"temperature": 0.7
}'
Mit OpenAI Python Client:
from openai import OpenAI
# Zeigen Sie auf Ihren vLLM-Server
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed" # vLLM erfordert standardmäßig keine Authentifizierung
)
response = client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
prompt="Erklären Sie, was vLLM in einem Satz ist:",
max_tokens=100,
temperature=0.7
)
print(response.choices[0].text)
Chat Completions API:
response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
messages=[
{"role": "system", "content": "Sie sind ein hilfreicher Assistent."},
{"role": "user", "content": "Was ist PagedAttention?"}
],
max_tokens=200
)
print(response.choices[0].message.content)
Erweitertes Konfigurieren
vLLM bietet zahlreiche Parameter zur Leistungsoptimierung:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mistral-7B-Instruct-v0.2 \
--port 8000 \
--gpu-memory-utilization 0.95 \ # Verwenden Sie 95 % des GPU-Speichers
--max-model-len 8192 \ # Maximale Sequenzlänge
--tensor-parallel-size 2 \ # Verwenden Sie 2 GPUs mit Tensor-Parallelität
--dtype float16 \ # Verwenden Sie FP16-Genauigkeit
--max-num-seqs 256 # Maximale Batch-Größe
Wichtige Parameter erklärt:
--gpu-memory-utilization: Wie viel GPU-Speicher verwendet werden soll (0,90 = 90 %). Höhere Werte ermöglichen größere Batches, lassen aber weniger Spielraum für Speicherspitzen.--max-model-len: Maximale Kontextlänge. Eine Verringerung davon spart Speicher für größere Batches.--tensor-parallel-size: Anzahl der GPUs, über die das Modell aufgeteilt werden soll.--dtype: Datentyp für Gewichte (float16, bfloat16 oder float32). FP16 ist in der Regel optimal.--max-num-seqs: Maximale Anzahl von Sequenzen, die in einem Batch verarbeitet werden sollen.
vLLM vs Ollama Vergleich
Sowohl vLLM als auch Ollama sind beliebte Optionen für die lokale Bereitstellung von LLMs, aber sie richten sich an unterschiedliche Anwendungsfälle. Das Verständnis, wann man welches Tool verwenden sollte, kann den Erfolg Ihres Projekts erheblich beeinflussen.
Leistung und Durchsatz
vLLM ist für maximalen Durchsatz in Szenarien mit mehreren Benutzern entwickelt. Seine PagedAttention und kontinuierliche Batching ermöglichen das effiziente Servieren von hunderten gleichzeitigen Anfragen. Benchmarks zeigen, dass vLLM einen 14-24x höheren Durchsatz als Standardimplementierungen und 2-4x höher als Ollama bei hoher Konkurrenz erreicht.
Ollama optimiert für den interaktiven Einzelbenutzereinsatz mit Fokus auf niedrige Latenz für einzelne Anfragen. Obwohl es nicht den Mehrbenutzer-Durchsatz von vLLM erreicht, bietet es hervorragende Leistung für Entwicklung und persönliche Nutzung mit schnelleren Kaltstartzeiten und geringeren Ressourcenverbrauch im Leerlauf.
Einfachheit der Nutzung
Ollama gewinnt deutlich in puncto Einfachheit. Die Installation erfolgt mit einem einzigen Befehl (curl | sh), und das Ausführen von Modellen ist so einfach wie ollama run llama2. Es enthält eine Modellbibliothek mit quantisierten Versionen, die für verschiedene Hardwareprofile optimiert sind. Die Benutzererfahrung ähnelt Docker – ziehen, ausführen und loslegen.
vLLM erfordert mehr Einrichtung: Verwaltung der Python-Umgebung, CUDA-Installation, Verständnis der Serving-Parameter und manuelle Modellangabe. Die Lernkurve ist steiler, aber Sie erhalten eine fein abgestimmte Kontrolle über die Leistungsoptimierung. Diese Komplexität ist für Produktionsbereitstellungen gerechtfertigt, bei denen Sie die maximale Leistung aus Ihrer Hardware herausholen müssen.
API und Integration
vLLM bietet OpenAI-kompatible REST-APIs standardmäßig, wodurch es ein direkter Ersatz für OpenAI’s API in bestehenden Anwendungen ist. Dies ist entscheidend für die Migration von Produktionsdiensten von Cloud-Anbietern zu selbstgehosteten Infrastrukturen ohne Codeänderungen.
Ollama bietet eine einfachere REST-API und eine dedizierte Python/JavaScript-Bibliothek. Obwohl funktionsfähig, ist sie nicht OpenAI-kompatibel, was Codeänderungen erfordert, wenn sie mit Anwendungen integriert wird, die OpenAI’s Format erwarten. Allerdings überbrücken Community-Projekte wie Ollama-OpenAI-Adapter diese Lücke.
Speicherverwaltung
vLLMs PagedAttention-Algorithmus bietet überlegene Speichereffizienz für gleichzeitige Anfragen. Es kann 2-4x mehr gleichzeitige Benutzer mit demselben VRAM bedienen im Vergleich zu naiven Implementierungen. Dies übersetzt sich direkt in Kosteneinsparungen bei Produktionsbereitstellungen.
Ollama verwendet einfachere Speicherverwaltung, die für Einzelbenutzerszenarien geeignet ist. Es verwaltet automatisch das Laden/Entladen von Modellen basierend auf der Aktivität, was für die Entwicklung praktisch ist, aber nicht optimal für Produktionsbereitstellungen mit hoher Konkurrenz.
Multi-GPU-Unterstützung
vLLM glänzt mit nativer Tensor-Parallelität und Pipeline-Parallelität, die Modelle effizient über 2-8+ GPUs verteilt. Dies ist essenziell für das Servieren großer Modelle wie 70B-Parameter-LLMs, die nicht in eine einzelne GPU passen.
Ollama hat derzeit begrenzte Multi-GPU-Unterstützung und funktioniert am besten mit einer einzelnen GPU. Dies macht es weniger geeignet für sehr große Modelle, die verteilte Inferenz erfordern.
Anwendungsfall-Empfehlungen
Wählen Sie vLLM, wenn:
- Sie Produktions-APIs mit vielen gleichzeitigen Benutzern bereitstellen
- Sie die Kosten pro Anfrage in Cloud-Bereitstellungen optimieren
- Sie in Kubernetes oder Container-Orchestrierungsplattformen laufen
- Sie OpenAI-API-Kompatibilität für bestehende Anwendungen benötigen
- Sie große Modelle mit Multi-GPU-Unterstützung bereitstellen
- Leistung und Durchsatz kritische Anforderungen sind
Wählen Sie Ollama, wenn:
- Lokale Entwicklung und Experimente
- Einzelbenutzer-Interaktive Nutzung (persönliche Assistenten, Chatbots)
- Schnelle Prototypenerstellung und Modellbewertung
- Lernen über LLMs ohne Infrastrukturexplizit
- Ausführung auf persönlichen Arbeitsstationen oder Laptops
- Einfachheit und Benutzerfreundlichkeit Prioritäten sind
Viele Teams nutzen beide: Ollama für Entwicklung und Experimente, dann vLLM für Produktionsbereitstellungen. Diese Kombination bietet Entwicklerproduktivität, während die Produktionsleistung aufrechterhalten wird.
vLLM vs Docker Model Runner
Docker hat kürzlich Model Runner (ehemals GenAI Stack) als offizielle Lösung für die lokale Bereitstellung von KI-Modellen eingeführt. Wie vergleicht es sich mit vLLM?
Architekturphilosophie
Docker Model Runner strebt danach, der “Docker für KI” zu sein – eine einfache, standardisierte Möglichkeit, KI-Modelle lokal mit derselben Leichtigkeit wie das Ausführen von Containern zu betreiben. Es abstrahiert Komplexität und bietet eine konsistente Schnittstelle für verschiedene Modelle und Frameworks.
vLLM ist eine spezialisierte Inference-Engine, die sich ausschließlich auf die LLM-Bereitstellung mit maximaler Leistung konzentriert. Es ist ein Low-Level-Tool, das Sie mit Docker containerisieren, anstatt eine vollständige Plattform.
Einrichtung und Einstieg
Docker Model Runner Installation ist für Docker-Nutzer einfach:
docker model pull llama3:8b
docker model run llama3:8b
Diese Ähnlichkeit zum Docker-Image-Workflow macht es Entwicklern, die bereits Container verwenden, sofort vertraut.
vLLM erfordert mehr initiale Einrichtung (Python, CUDA, Abhängigkeiten) oder die Verwendung von vorgefertigten Docker-Images:
docker pull vllm/vllm-openai:latest
docker run --runtime nvidia --gpus all vllm/vllm-openai:latest --model <model-name>
Leistungsmerkmale
vLLM liefert überlegenen Durchsatz für Mehrbenutzerszenarien dank PagedAttention und kontinuierlichem Batching. Für Produktions-API-Dienste, die Hunderte von Anfragen pro Sekunde verarbeiten, bieten vLLMs Optimierungen 2-5x besseren Durchsatz als generische Serving-Ansätze.
Docker Model Runner konzentriert sich auf Benutzerfreundlichkeit statt auf maximale Leistung. Es ist geeignet für lokale Entwicklung, Tests und moderate Arbeitslasten, implementiert aber nicht die fortgeschrittenen Optimierungen, die vLLM bei Skalierung auszeichnen.
Modellunterstützung
Docker Model Runner bietet eine kuratierte Modellbibliothek mit Ein-Kommando-Zugriff auf beliebte Modelle. Es unterstützt mehrere Frameworks (nicht nur LLMs), einschließlich Stable Diffusion, Whisper und andere KI-Modelle, was es vielseitiger für verschiedene KI-Arbeitslasten macht.
vLLM spezialisiert sich auf LLM-Inference mit tiefgehender Unterstützung für transformerbasierte Sprachmodelle. Es unterstützt jedes HuggingFace-kompatible LLM, erstreckt sich aber nicht auf andere KI-Modelltypen wie Bildgenerierung oder Spracherkennung.
Produktionsbereitstellung
vLLM ist in der Produktion bei Unternehmen wie Anthropic, Replicate und vielen anderen getestet, die täglich Milliarden von Tokens bedienen. Seine Leistungsmerkmale und Stabilität unter hoher Last machen es zum de facto Standard für die Produktion von LLM-Serving.
Docker Model Runner ist neuer und positioniert sich mehr für Entwicklungs- und lokale Test-Szenarien. Obwohl es Produktionsverkehr bedienen könnte, fehlen ihm die bewährte Erfolgsbilanz und Leistungsoptimierungen, die Produktionsbereitstellungen erfordern.
Integrationsökosystem
vLLM integriert sich mit Produktionsinfrastruktur-Tools: Kubernetes-Operatoren, Prometheus-Metriken, Ray für verteiltes Serving und umfangreiche OpenAI-API-Kompatibilität für bestehende Anwendungen.
Docker Model Runner integriert sich natürlich in das Docker-Ökosystem und Docker Desktop. Für Teams, die bereits auf Docker standardisiert sind, bietet diese Integration ein kohärentes Erlebnis, aber weniger spezialisierte LLM-Serving-Funktionen.
Wann man jedes verwenden sollte
Verwenden Sie vLLM für:
- Produktions-LLM-API-Dienste
- Hochdurchsatz-Mehrbenutzer-Bereitstellungen
- Kostenempfindliche Cloud-Bereitstellungen mit maximaler Effizienz
- Kubernetes- und cloud-native Umgebungen
- Wenn Sie bewiesene Skalierbarkeit und Leistung benötigen
Verwenden Sie Docker Model Runner für:
- Lokale Entwicklung und Tests
- Ausführung verschiedener KI-Modelltypen (nicht nur LLMs)
- Teams, die stark in das Docker-Ökosystem investiert sind
- Schnelle Experimente ohne Infrastruktureinrichtung
- Lern- und Bildungszwecke
Hybridansatz: Viele Teams entwickeln mit Docker Model Runner lokal für Bequemlichkeit und bereiten dann mit vLLM in der Produktion für Leistung auf. Die Docker Model Runner-Images können auch verwendet werden, um vLLM-Container auszuführen und beide Ansätze zu kombinieren.
Produktionsbereitstellung - Best Practices
Docker-Bereitstellung
Erstellen Sie eine produktionsbereite Docker Compose-Konfiguration:
version: '3.8'
services:
vllm:
image: vllm/vllm-openai:latest
runtime: nvidia
environment:
- CUDA_VISIBLE_DEVICES=0,1
volumes:
- ~/.cache/huggingface:/root/.cache/huggingface
- ./logs:/logs
ports:
- "8000:8000"
command: >
--model mistralai/Mistral-7B-Instruct-v0.2
--tensor-parallel-size 2
--gpu-memory-utilization 0.90
--max-num-seqs 256
--max-model-len 8192
restart: unless-stopped
shm_size: '16gb'
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 2
capabilities: [gpu]
Kubernetes-Bereitstellung
Bereitstellen von vLLM auf Kubernetes für Produktionsskalierung:
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-server
spec:
replicas: 2
selector:
matchLabels:
app: vllm
template:
metadata:
labels:
app: vllm
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- --model
- mistralai/Mistral-7B-Instruct-v0.2
- --tensor-parallel-size
- "2"
- --gpu-memory-utilization
- "0.90"
resources:
limits:
nvidia.com/gpu: 2
ports:
- containerPort: 8000
volumeMounts:
- name: cache
mountPath: /root/.cache/huggingface
volumes:
- name: cache
hostPath:
path: /mnt/huggingface-cache
---
apiVersion: v1
kind: Service
metadata:
name: vllm-service
spec:
selector:
app: vllm
ports:
- port: 80
targetPort: 8000
type: LoadBalancer
Überwachung und Beobachtbarkeit
vLLM stellt Prometheus-Metriken für die Überwachung bereit:
import requests
# Metriken abrufen
metrics = requests.get("http://localhost:8000/metrics").text
print(metrics)
Wichtige Metriken zur Überwachung:
vllm:num_requests_running- Aktive Anfragenvllm:gpu_cache_usage_perc- KV-Cache-Nutzungvllm:time_to_first_token- Latenzmetrikvllm:time_per_output_token- Generationsgeschwindigkeit
Leistungsoptimierung
Optimierung der GPU-Speichernutzung: Beginnen Sie mit --gpu-memory-utilization 0.90 und passen Sie dies basierend auf dem beobachteten Verhalten an. Höhere Werte ermöglichen größere Batches, bergen aber das Risiko von OOM-Fehlern während Verkehrsspitzen.
Anpassung der maximalen Sequenzlänge: Wenn Ihr Anwendungsfall nicht die volle Kontextlänge benötigt, reduzieren Sie --max-model-len. Dies befreit Speicher für größere Batches. Beispielsweise, wenn Sie nur 4K Kontext benötigen, setzen Sie --max-model-len 4096 statt die maximale Modelllänge (oft 8K-32K) zu verwenden.
Wahl der geeigneten Quantisierung: Für Modelle, die dies unterstützen, verwenden Sie quantisierte Versionen (8-Bit, 4-Bit), um den Speicher zu reduzieren und die Durchsatzrate zu erhöhen:
--quantization awq # Für AWQ quantisierte Modelle
--quantization gptq # Für GPTQ quantisierte Modelle
Aktivierung des Präfix-Cachings: Für Anwendungen mit wiederholten Prompts (wie Chatbots mit Systemnachrichten) aktivieren Sie das Präfix-Caching:
--enable-prefix-caching
Dieser Cache speichert die KV-Werte für häufige Präfixe und reduziert die Berechnung für Anfragen mit demselben Prompt-Präfix.
Fehlerbehebung bei häufigen Problemen
Speicherfehler (Out of Memory)
Symptome: Server stürzt mit CUDA-Speicherfehlern ab.
Lösungen:
- Reduzieren Sie
--gpu-memory-utilizationauf 0.85 oder 0.80 - Verringern Sie
--max-model-len, wenn Ihr Anwendungsfall dies zulässt - Senken Sie
--max-num-seqs, um die Batch-Größe zu reduzieren - Verwenden Sie eine quantisierte Modellversion
- Aktivieren Sie Tensor-Parallelität, um auf mehr GPUs zu verteilen
Geringe Durchsatzrate
Symptome: Der Server verarbeitet weniger Anfragen als erwartet.
Lösungen:
- Erhöhen Sie
--max-num-seqs, um größere Batches zu ermöglichen - Erhöhen Sie
--gpu-memory-utilization, wenn Sie Spielraum haben - Überprüfen Sie mit
htop, ob die CPU eine Flasche ist – überlegen Sie sich schnellere CPUs - Verifizieren Sie die GPU-Auslastung mit
nvidia-smi– sollte 95%+ betragen - Aktivieren Sie FP16, wenn FP32 verwendet wird:
--dtype float16
Lange Zeit bis zum ersten Token
Symptome: Hohe Latenz vor Beginn der Generierung.
Lösungen:
- Verwenden Sie kleinere Modelle für latenzkritische Anwendungen
- Aktivieren Sie Präfix-Caching für wiederholte Prompts
- Reduzieren Sie
--max-num-seqs, um Latenz gegenüber Durchsatz zu priorisieren - Überlegen Sie sich spekulatives Decodieren für unterstützte Modelle
- Optimieren Sie die Tensor-Parallelitätskonfiguration
Modellladefehler
Symptome: Server startet nicht, kann Modell nicht laden.
Lösungen:
- Überprüfen Sie, ob der Modellname exakt dem HuggingFace-Format entspricht
- Überprüfen Sie die Netzwerkverbindung zum HuggingFace Hub
- Stellen Sie sicher, dass ausreichend Festplattenspeicher in
~/.cache/huggingfacevorhanden ist - Für gesperrte Modelle die Umgebungsvariable
HF_TOKENsetzen - Versuchen Sie, manuell mit
huggingface-cli download <model>herunterzuladen
Erweiterte Funktionen
Spekulatives Decodieren
vLLM unterstützt spekulatives Decodieren, bei dem ein kleineres Entwurfsmodell Tokens vorschlägt, die ein größeres Zielmodell überprüft. Dies kann die Generierung um das 1,5- bis 2-fache beschleunigen:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-70b-chat-hf \
--speculative-model meta-llama/Llama-2-7b-chat-hf \
--num-speculative-tokens 5
LoRA-Adapter
Bieten Sie mehrere LoRA-Adapter auf Basis eines Grundmodells an, ohne mehrere vollständige Modelle zu laden:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-hf \
--enable-lora \
--lora-modules sql-lora=./path/to/sql-adapter \
code-lora=./path/to/code-adapter
Dann legen Sie fest, welcher Adapter pro Anfrage verwendet werden soll:
response = client.completions.create(
model="sql-lora", # Verwenden Sie den SQL-Adapter
prompt="Konvertieren Sie dies in SQL: Zeigen Sie mir alle Benutzer, die in diesem Monat erstellt wurden"
)
Multi-LoRA-Bereitstellung
vLLMs Multi-LoRA-Bereitstellung ermöglicht das Hosting von Dutzenden feinabgestimmter Adapter mit minimalem Speicherüberhead. Dies ist ideal für das Hosting von kunden- oder aufgabenspezifischen Modellvarianten:
# Anfrage mit spezifischem LoRA-Adapter
response = client.chat.completions.create(
model="meta-llama/Llama-2-7b-hf",
messages=[{"role": "user", "content": "Schreiben Sie eine SQL-Abfrage"}],
extra_body={"lora_name": "sql-lora"}
)
Präfix-Caching
Aktivieren Sie das automatische Präfix-Caching, um die KV-Cache-Berechnung für wiederholte Prompt-Präfixe zu vermeiden:
--enable-prefix-caching
Dies ist besonders effektiv für:
- Chatbots mit festen Systemprompts
- RAG-Anwendungen mit konsistenten Kontextvorlagen
- Few-shot-Lernprompts, die über Anfragen hinweg wiederholt werden
Präfix-Caching kann die Zeit bis zum ersten Token um 50-80% für Anfragen mit gemeinsamen Prompt-Präfixen reduzieren.
Integrationsbeispiele
LangChain-Integration
from langchain.llms import VLLMOpenAI
llm = VLLMOpenAI(
openai_api_key="EMPTY",
openai_api_base="http://localhost:8000/v1",
model_name="mistralai/Mistral-7B-Instruct-v0.2",
max_tokens=512,
temperature=0.7,
)
response = llm("Erklären Sie PagedAttention in einfachen Begriffen")
print(response)
LlamaIndex-Integration
from llama_index.llms import VLLMServer
llm = VLLMServer(
api_url="http://localhost:8000/v1",
model="mistralai/Mistral-7B-Instruct-v0.2",
temperature=0.7,
max_tokens=512
)
response = llm.complete("Was ist vLLM?")
print(response)
FastAPI-Anwendung
from fastapi import FastAPI
from openai import AsyncOpenAI
app = FastAPI()
client = AsyncOpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed"
)
@app.post("/generate")
async def generate(prompt: str):
response = await client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
prompt=prompt,
max_tokens=200
)
return {"result": response.choices[0].text}
Leistungsbenchmarks
Echtwelt-Leistungsdaten veranschaulichen die Vorteile von vLLM:
Durchsatzvergleich (Mistral-7B auf A100-GPU):
- vLLM: ~3.500 Tokens/Sekunde mit 64 gleichzeitigen Benutzern
- HuggingFace Transformers: ~250 Tokens/Sekunde mit derselben Gleichzeitigkeit
- Ollama: ~1.200 Tokens/Sekunde mit derselben Gleichzeitigkeit
- Ergebnis: vLLM bietet eine 14-fache Verbesserung gegenüber grundlegenden Implementierungen
Speichereffizienz (LLaMA-2-13B):
- Standardimplementierung: 24GB VRAM, 32 gleichzeitige Sequenzen
- vLLM mit PagedAttention: 24GB VRAM, 128 gleichzeitige Sequenzen
- Ergebnis: 4-mal mehr gleichzeitige Anfragen mit demselben Speicher
Latenz unter Last (Mixtral-8x7B auf 2xA100):
- vLLM: P50-Latenz 180ms, P99-Latenz 420ms bei 100 Anfragen/Sekunde
- Standard-Serving: P50-Latenz 650ms, P99-Latenz 3.200ms bei 100 Anfragen/Sekunde
- Ergebnis: vLLM hält eine konsistente Latenz unter hoher Last aufrecht
Diese Benchmarks demonstrieren, warum vLLM zum de facto-Standard für die Produktionsbereitstellung von LLMs geworden ist, wo Leistung entscheidend ist.
Kostenanalyse
Verständnis der Kostenimplikationen bei der Wahl von vLLM:
Szenario: Bereitstellung von 1M Anfragen/Tag
Mit Standard-Serving:
- Benötigt: 8x A100-GPUs (80GB)
- AWS-Kosten: ~$32/Stunde × 24 × 30 = $23.040/Monat
- Kosten pro 1M Tokens: ~$0,75
Mit vLLM:
- Benötigt: 2x A100-GPUs (80GB)
- AWS-Kosten: ~$8/Stunde × 24 × 30 = $5.760/Monat
- Kosten pro 1M Tokens: ~$0,19
- Einsparungen: $17.280/Monat (75% Reduktion)
Dieser Kostenvorteil wächst mit der Skalierung. Organisationen, die monatlich Milliarden von Tokens bereitstellen, sparen Hunderttausende von Dollar, indem sie vLLMs optimierte Bereitstellung anstelle von naiven Implementierungen verwenden.
Sicherheitsüberlegungen
Authentifizierung
vLLM enthält standardmäßig keine Authentifizierung. Für die Produktion implementieren Sie Authentifizierung auf Ebene des Reverse-Proxy:
# Nginx-Konfiguration
location /v1/ {
auth_request /auth;
proxy_pass http://vllm-backend:8000;
}
location /auth {
proxy_pass http://auth-service:8080/verify;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
Oder verwenden Sie API-Gateways wie Kong, Traefik oder AWS API Gateway für unternehmensgerechte Authentifizierung und Rate-Limiting.
Netzwerkisolierung
Führen Sie vLLM in privaten Netzwerken aus, nicht direkt im Internet exponiert:
# Kubernetes NetworkPolicy-Beispiel
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: vllm-access
spec:
podSelector:
matchLabels:
app: vllm
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: api-gateway
ports:
- protocol: TCP
port: 8000
Rate-Limiting
Implementieren Sie Rate-Limiting, um Missbrauch zu verhindern:
# Beispiel mit Redis für Rate-Limiting
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
import redis
from datetime import datetime, timedelta
app = FastAPI()
redis_client = redis.Redis(host='localhost', port=6379)
@app.middleware("http")
async def rate_limit_middleware(request, call_next):
client_ip = request.client.host
key = f"rate_limit:{client_ip}"
requests = redis_client.incr(key)
if requests == 1:
redis_client.expire(key, 60) # 60-Sekunden-Fenster
if requests > 60: # 60 Anfragen pro Minute
raise HTTPException(status_code=429, detail="Rate-Limit überschritten")
return await call_next(request)
Modellzugriffskontrolle
Für Multi-Tenant-Deployments steuern Sie, welche Benutzer auf welche Modelle zugreifen können:
ERLAUBTE_MODELLE = {
"benutzer_stufe_1": ["mistralai/Mistral-7B-Instruct-v0.2"],
"benutzer_stufe_2": ["mistralai/Mistral-7B-Instruct-v0.2", "meta-llama/Llama-2-13b-chat-hf"],
"admin": ["*"] # Alle Modelle
}
def ueberpruefe_modellzugriff(benutzer_stufe: str, modell: str) -> bool:
erlaubt = ERLAUBTE_MODELLE.get(benutzer_stufe, [])
return "*" in erlaubt or modell in erlaubt
Migrationsleitfaden
Von OpenAI zu vLLM
Die Migration von OpenAI zu selbstgehostetem vLLM ist dank API-Kompatibilität einfach:
Vorher (OpenAI):
from openai import OpenAI
client = OpenAI(api_key="sk-...")
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "Hallo"}]
)
Nachher (vLLM):
from openai import OpenAI
client = OpenAI(
base_url="https://your-vllm-server.com/v1",
api_key="your-internal-key" # Wenn Sie Authentifizierung hinzugefügt haben
)
response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
messages=[{"role": "user", "content": "Hallo"}]
)
Nur zwei Änderungen erforderlich: Aktualisieren Sie base_url und den model-Namen. Alle anderen Codes bleiben identisch.
Von Ollama zu vLLM
Ollama verwendet ein anderes API-Format. Hier ist die Umwandlung:
Ollama API:
import requests
response = requests.post('http://localhost:11434/api/generate',
json={
'model': 'llama2',
'prompt': 'Warum ist der Himmel blau?'
})
vLLM-Äquivalent:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
response = client.completions.create(
model="meta-llama/Llama-2-7b-chat-hf",
prompt="Warum ist der Himmel blau?"
)
Sie müssen API-Aufrufe in Ihrem gesamten Code aktualisieren, aber die OpenAI-Client-Bibliotheken bieten bessere Fehlerbehandlung und Funktionen.
Von HuggingFace Transformers zu vLLM
Direkte Python-Nutzungsmigration:
HuggingFace:
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
inputs = tokenizer("Hallo", return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=100)
result = tokenizer.decode(outputs[0])
vLLM:
from vllm import LLM, SamplingParams
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2")
sampling_params = SamplingParams(max_tokens=100)
outputs = llm.generate("Hallo", sampling_params)
result = outputs[0].outputs[0].text
Die vLLM-Python-API ist einfacher und viel schneller für Batch-Inferenz.
Zukunft von vLLM
vLLM entwickelt sich weiterhin schnell mit spannenden Funktionen in der Roadmap:
Disaggregiertes Serving: Trennung von Prefill (Prompt-Verarbeitung) und Decode (Token-Generierung) auf verschiedene GPUs zur Optimierung der Ressourcennutzung. Prefill ist rechengebunden, während Decode speichergebunden ist, sodass der Betrieb auf spezialisierter Hardware die Effizienz verbessert.
Multi-Node-Inferenz: Verteilung sehr großer Modelle (100B+ Parameter) über mehrere Maschinen, Ermöglichung des Servings von Modellen, die für Single-Node-Setups zu groß sind.
Verbesserte Quantisierung: Unterstützung für neue Quantisierungsformate wie GGUF (verwendet von llama.cpp) und verbesserte AWQ/GPTQ-Integration für bessere Leistung mit quantisierten Modellen.
Verbesserungen bei der spekulativen Decodierung: Effizientere Entwurfsmodelle und adaptive Spekulationsstrategien zur Erzielung höherer Geschwindigkeitssteigerungen ohne Genauigkeitsverlust.
Attention-Optimierungen: FlashAttention 3, Ring-Attention für extrem lange Kontexte (100K+ Tokens) und andere fortschrittliche Attention-Mechanismen.
Bessere Modellabdeckung: Erweiterung der Unterstützung auf multimodale Modelle (Visions-Sprachmodelle), Audiomodelle und spezialisierte Architekturen, wie sie entstehen.
Das vLLM-Projekt hält die aktive Entwicklung mit Beiträgen von UC Berkeley, Anyscale und der breiteren Open-Source-Community aufrecht. Da die LLM-Implementierung für Produktionssysteme immer kritischer wird, wächst die Rolle von vLLM als Leistungsstandard weiter.
Nützliche Links
Verwandte Artikel auf dieser Seite
-
Lokale LLM-Hosting: Kompletter Leitfaden 2025 - Ollama, vLLM, LocalAI, Jan, LM Studio & mehr - Umfassender Vergleich von 12+ Tools zum lokalen LLM-Hosting, einschließlich detaillierter vLLM-Analyse neben Ollama, LocalAI, Jan, LM Studio und anderen. Abdeckung von API-Reife, Tool-Calling-Unterstützung, GGUF-Kompatibilität und Leistungsbenchmarks zur Auswahl der richtigen Lösung.
-
Ollama Cheatsheet - Vollständiger Ollama-Befehlsreferenz- und Cheatsheet, der Installation, Modellverwaltung, API-Nutzung und Best Practices für die lokale LLM-Implementierung abdeckt. Wichtig für Entwickler, die Ollama neben oder anstelle von vLLM verwenden.
-
Docker Model Runner vs Ollama: Welches wählen? - Tiefgehender Vergleich von Docks Model Runner und Ollama für lokale LLM-Implementierung, der Leistung, GPU-Unterstützung, API-Kompatibilität und Anwendungsfälle analysiert. Hilft, das wettbewerbsfähige Umfeld zu verstehen, in dem vLLM operiert.
-
Docker Model Runner Cheatsheet: Befehle & Beispiele - Praktischer Docker Model Runner Cheatsheet mit Befehlen und Beispielen für die KI-Modellbereitstellung. Nützlich für Teams, die Docks Ansatz mit den spezialisierten LLM-Serving-Fähigkeiten von vLLM vergleichen.
Externe Ressourcen und Dokumentation
-
vLLM GitHub-Repository - Offizielles vLLM-Repository mit Quellcode, umfassender Dokumentation, Installationsanleitungen und aktiven Community-Diskussionen. Wichtige Ressource, um mit den neuesten Funktionen auf dem Laufenden zu bleiben und Probleme zu beheben.
-
vLLM-Dokumentation - Offizielle Dokumentation, die alle Aspekte von vLLM von der grundlegenden Einrichtung bis zur erweiterten Konfiguration abdeckt. Enthält API-Referenzen, Leistungsoptimierungsleitfäden und Bereitstellungsbest Practices.
-
PagedAttention-Paper - Akademisches Paper, das den PagedAttention-Algorithmus einführen, der die Effizienz von vLLM antreibt. Wichtige Lektüre zum Verständnis der technischen Innovationen hinter den Leistungsvorteilen von vLLM.
-
vLLM-Blog - Offizieller vLLM-Blog mit Veröffentlichungsankündigungen, Leistungsbenchmarks, technischen Deep Dives und Community-Fallstudien aus Produktionsbereitstellungen.
-
HuggingFace Model Hub - Umfassendes Repository von Open-Source-LLMs, die mit vLLM funktionieren. Suchen Sie nach Modellen nach Größe, Aufgabe, Lizenz und Leistungseigenschaften, um das richtige Modell für Ihren Anwendungsfall zu finden.
-
Ray Serve-Dokumentation - Ray Serve-Framework-Dokumentation zum Aufbau skalierbarer, verteilter vLLM-Bereitstellungen. Ray bietet erweiterte Funktionen wie Autoskaling, Multi-Model-Serving und Ressourcenmanagement für Produktionssysteme.
-
NVIDIA TensorRT-LLM - NVIDIAs TensorRT-LLM für hochoptimierte Inference auf NVIDIA-GPUs. Alternative zu vLLM mit unterschiedlichen Optimierungsstrategien, nützlich für den Vergleich und das Verständnis der Inference-Optimierungslandschaft.
-
OpenAI API-Referenz - Offizielle OpenAI API-Dokumentation, mit der die vLLM-API kompatibel ist. Verweisen Sie darauf, wenn Sie Anwendungen erstellen, die mit sowohl OpenAI- als auch selbstgehosteten vLLM-Endpunkten austauschbar funktionieren müssen.