Llama 3.3 70B auf vLLM: Setup in 40 Minuten
Vom blanken Ubuntu-Server zur produktiven OpenAI-kompatiblen API mit Llama 3.3 70B — in unter einer Stunde. Diese Anleitung deckt Treiber, Container, Modell-Download, Tensor-Parallelismus, Quantisierung und die typischen Stolpersteine ab.
vLLM ist 2026 der De-facto-Standard für produktive LLM-Inferenz auf NVIDIA-Hardware. Das Projekt aus Berkeley liefert PagedAttention, Continuous Batching und einen OpenAI-kompatiblen Server in einem Python-Paket. Wer Llama 3.3 70B oder vergleichbare Modelle im eigenen Rechenzentrum betreiben will, kommt an vLLM derzeit kaum vorbei — die Alternativen TensorRT-LLM (komplexer) und Text Generation Inference (geringere Performance) verlieren in Mittelstands-Setups regelmäßig den Vergleich. Diese Anleitung bringt einen frischen Server in unter 40 Minuten auf produktives Niveau.
1. Voraussetzungen prüfen
Bevor Sie Container starten, sollten Treiber und Hardware passen. Wir setzen Ubuntu 22.04 LTS oder 24.04 LTS voraus, NVIDIA-Treiber Version 550 oder höher, CUDA 12.4+ im Container, Docker 24+ mit dem NVIDIA Container Toolkit. Hardware: zwei NVIDIA L40S (48 GB), alternativ eine H100 80GB, H200 141GB oder zwei A100 80GB. Mindestens 64 GB RAM, 500 GB freier NVMe-Storage für Modelle.
Prüfen Sie zuerst, ob die GPU vom Host gesehen wird und der Treiber passt:
nvidia-smi
# Treiber-Version muss >= 550 sein
# CUDA-Version 12.4+ wird in der oberen rechten Ecke angezeigt
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
# Muss dieselben GPUs zeigen wie der Host
Wenn die zweite Zeile fehlschlägt, fehlt das NVIDIA Container Toolkit. Installation:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
2. Hugging-Face-Token und Modell-Zugriff
Llama 3.3 70B ist gated. Sie brauchen einen Hugging-Face-Account und müssen die Meta Llama Community License akzeptieren. Auf der Modell-Seite meta-llama/Llama-3.3-70B-Instruct klicken Sie auf "Access" und füllen das Formular aus. Die Freischaltung erfolgt in der Regel innerhalb von 1–24 Stunden.
Anschließend erstellen Sie unter Settings → Access Tokens einen Read-Token. Diesen exportieren Sie in eine .env-Datei neben dem Docker-Compose:
# /opt/vllm/.env
HF_TOKEN=hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Für die produktive AWQ-Quantisierung empfehlen wir das Community-Repository casperhansen/llama-3.3-70b-instruct-awq oder das offizielle Meta-Modell mit --quantization awq_marlin. Letzteres lädt das FP16-Original (~140 GB Download) und quantisiert beim Start — einmalig 20 Minuten Wartezeit, danach im Cache.
Bandbreite: Der initiale Modell-Download liegt zwischen 38 GB (bereits quantisiert) und 140 GB (FP16-Original). Auf einer 1-Gbit-Leitung sind das 5 Minuten bzw. 19 Minuten reine Übertragungszeit.
3. Docker-Compose: Der saubere Weg
vLLM können Sie mit pip install vllm direkt installieren, in der Praxis empfehlen wir aber den offiziellen Container — er bringt CUDA, cuDNN, FlashAttention und alle Abhängigkeiten in geprüften Versionen mit. Legen Sie folgende docker-compose.yml an:
# /opt/vllm/docker-compose.yml
services:
vllm:
image: vllm/vllm-openai:v0.9.1
container_name: vllm-llama33
restart: unless-stopped
runtime: nvidia
environment:
- HF_TOKEN=${HF_TOKEN}
- HF_HOME=/root/.cache/huggingface
- VLLM_WORKER_MULTIPROC_METHOD=spawn
volumes:
- ./hf-cache:/root/.cache/huggingface
ports:
- "8000:8000"
ipc: host
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
command: >
--model meta-llama/Llama-3.3-70B-Instruct
--quantization awq_marlin
--tensor-parallel-size 2
--max-model-len 16384
--gpu-memory-utilization 0.92
--served-model-name llama-3.3-70b
--api-key sk-local-changeme
--enable-prefix-caching
Starten Sie den Stack mit docker compose up -d und beobachten Sie die Logs: docker compose logs -f vllm. Beim ersten Start lädt vLLM das Modell, alloziert KV-Cache und initialisiert CUDA-Graphs — das dauert je nach Setup 5–12 Minuten. Wenn die Zeile "Application startup complete" erscheint, ist der Server bereit.
4. OpenAI-API testen
Die API ist OpenAI-kompatibel. Ein einfacher Curl-Test bestätigt, dass alles läuft:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-local-changeme" \
-d '{
"model": "llama-3.3-70b",
"messages": [
{"role": "system", "content": "Du bist ein knapper, präziser Assistent."},
{"role": "user", "content": "Erkläre Tensor-Parallelismus in zwei Sätzen."}
],
"max_tokens": 200,
"temperature": 0.3
}'
Antwortzeit auf 2× L40S liegt bei kalter Anfrage um 1,5 Sekunden, bei warmem Cache um 0,4 Sekunden. Die Antwort kommt als JSON mit dem üblichen choices[0].message.content-Feld. Jeder OpenAI-kompatible Client funktioniert sofort: setzen Sie OPENAI_BASE_URL=http://ihr-server:8000/v1 und OPENAI_API_KEY=sk-local-changeme.
Wenn der Curl-Aufruf einen 401-Fehler zurückgibt, fehlt der Authorization-Header oder der Key stimmt nicht überein. Bei einem 422 ist meist der Modellname falsch — Sie müssen exakt den Wert verwenden, den Sie in --served-model-name definiert haben, nicht den Hugging-Face-Pfad. Bei einem 503 läuft vLLM zwar, ist aber noch im Warmup. Die Logs zeigen den Fortschritt zuverlässig: erst wenn "Application startup complete" steht, beantwortet vLLM Anfragen.
Ein guter Smoke-Test für den ersten produktiven Tag ist die Endpoint-Liste: curl http://localhost:8000/v1/models liefert die geladenen Modelle samt Metadaten. Das ist eine harmlose Anfrage ohne GPU-Last und damit ideal für Healthchecks im Reverse-Proxy oder in Monitoring-Tools wie Uptime Kuma.
5. Benchmark mit vllm bench
Ohne Messung wissen Sie nicht, was Ihr Server wirklich kann. vLLM liefert seit Version 0.7 ein eingebautes Benchmark-Tool. Das wichtigste Szenario: Throughput bei realistischer Concurrency.
# Im laufenden Container ausführen
docker exec -it vllm-llama33 \
vllm bench serve \
--backend vllm \
--model llama-3.3-70b \
--base-url http://localhost:8000 \
--api-key sk-local-changeme \
--dataset-name sharegpt \
--num-prompts 200 \
--max-concurrency 16 \
--request-rate 4
Typische Ergebnisse auf 2× L40S mit Llama 3.3 70B in AWQ: 850–1100 Output-Tokens pro Sekunde aggregiert über 16 parallele Sessions, P50-Latenz pro Token bei 35–45 Millisekunden, P99 unter 80 Millisekunden. Auf einer H100 80GB sind es 1400–1800 Tokens/s. Diese Werte sind die Grundlage Ihrer Kapazitätsplanung — multipliziert mit aktiven Nutzern und durchschnittlicher Anfragefrequenz ergibt sich, ob Ihre Hardware das Pilotvolumen trägt.
Sind Sie wirklich bereit für ein 70B-Modell?
vLLM aufzusetzen ist die einfache Hälfte. Datenaufbereitung, RBAC, Logging und Change-Management sind die andere. Der Reifegrad-Selbsttest sortiert die Themen für Sie — in 7 Minuten und mit konkreten Empfehlungen.
6. Wichtige Parameter im Detail
Die Kommandozeilenflags in der Compose-Datei sind nicht beliebig gewählt. Eine kurze Erklärung der entscheidenden Schalter:
| Parameter | Wert (Beispiel) | Bedeutung |
|---|---|---|
--tensor-parallel-size | 2 | Verteilt Modellgewichte auf 2 GPUs. Wert muss Teiler der Layer-Anzahl sein. |
--quantization | awq_marlin | Aktiviert AWQ mit Marlin-Kernel. Beste Performance/Qualität-Balance auf Ada/Hopper. |
--max-model-len | 16384 | Maximale Kontextlänge. Bestimmt KV-Cache-Größe — niedriger = mehr Concurrency. |
--gpu-memory-utilization | 0.92 | Anteil des VRAM, den vLLM nutzen darf. 0.92 ist sicher, 0.95 maximiert Cache. |
--enable-prefix-caching | (flag) | Cached gemeinsame System-Prompts über Sessions hinweg. Massiver Latenz-Gewinn bei RAG. |
--max-num-seqs | 256 | Maximale parallele Sequenzen. Reduzieren bei OOM, default ist meist okay. |
--api-key | sk-local-... | Pflicht in produktiven Setups, sonst ist der Server offen. |
--enable-prefix-caching ist der unterschätzte Performance-Hebel. In RAG-Anwendungen, in denen ein 2.000-Token-System-Prompt mit Tool-Definitionen vor jeder Anfrage steht, spart Prefix-Caching bei der zweiten Anfrage diesen kompletten Prefill — die Time-to-First-Token sinkt von 800 auf 80 Millisekunden.
Eine zweite Stellschraube, die häufig übersehen wird, ist die Wahl zwischen Streaming und Non-Streaming-Antworten. vLLM streamt Token-für-Token sobald sie generiert sind. Für Chat-Frontends macht das einen riesigen subjektiven Unterschied: Nutzer warten gefühlt nicht mehr auf eine 30-sekündige Generierung, sondern lesen mit. Im Curl-Test übergeben Sie dazu "stream": true im Request-Body und parsen die Server-Sent-Events. Nahezu alle OpenAI-kompatiblen Clients beherrschen das von Haus aus.
Schließlich lohnt ein Blick auf --swap-space. Standardmäßig hält vLLM den KV-Cache vollständig im VRAM. Bei sehr hoher Concurrency lassen sich nicht aktive Sequenzen vorübergehend in CPU-RAM auslagern (Standardwert 4 GB), das verschiebt den Engpass von VRAM zu RAM und steigert die nutzbare Sessionzahl spürbar. Der Preis ist Latenz beim Wiedereintritt einer Session — in Chat-Workloads kaum spürbar, weil Nutzer ohnehin Sekunden zwischen Eingaben pausieren.
7. Troubleshooting: OOM, Timeouts, langsame Antworten
Die häufigsten Fehlerbilder und ihre Lösungen aus der Praxis:
- CUDA OutOfMemory beim Start: Reihenfolge der Hebel —
--gpu-memory-utilization 0.85setzen, dann--max-model-len 8192reduzieren, dann--enforce-eageraktivieren (deaktiviert CUDA-Graphs, spart 2–3 GB), zuletzt--max-num-seqs 32. - "Failed to download model" trotz Token: HF_TOKEN-Variable wird im Container nicht durchgereicht. Prüfen mit
docker compose exec vllm env | grep HF. Lizenz auf huggingface.co/meta-llama/... wirklich akzeptiert? - Sehr langsamer Throughput trotz freier GPU: Vermutlich ist
--enable-prefix-cachingaus oder--enforce-eagerversehentlich aktiv. Außerdem prüfen, ob NVIDIA-Persistence-Mode aktiv ist:nvidia-smi -pm 1. - Tensor-Parallelismus startet nicht (NCCL-Fehler): Im Container
VLLM_WORKER_MULTIPROC_METHOD=spawnsetzen undipc: hostin Compose. Bei zwei separaten Karten ohne NVLink ist das Standard. - Antworten brechen mitten im Satz ab:
max_tokensim Request zu niedrig oder Modell trifft EOS. Im Request-Body explizit auf 2048 oder höher setzen.
Sicherheit: Der vLLM-Server hat keinen Auth-Mechanismus jenseits des statischen API-Keys. Setzen Sie ihn niemals direkt ans Internet. In Produktion gehört ein Reverse-Proxy davor (Caddy, nginx oder Traefik), idealerweise mit mTLS oder OAuth2-Proxy für Mitarbeiter-Authentifizierung.
FAQ zum vLLM-Setup
Welche Hardware brauche ich für Llama 3.3 70B auf vLLM?
Mit AWQ-Marlin-Quantisierung reichen zwei NVIDIA L40S (je 48 GB VRAM) bei Tensor-Parallel-Size 2. Alternativ funktionieren eine H100 80GB, eine H200 141GB oder zwei A100 80GB. Auf einer einzelnen 48-GB-Karte läuft 70B nur mit aggressiver Quantisierung und kurzem Kontext.
Wie bekomme ich Zugriff auf das Llama-3.3-Modell von Meta?
Llama 3.3 70B ist auf Hugging Face gated. Sie brauchen einen Hugging-Face-Account, müssen die Meta Community License akzeptieren und einen Read-Token erstellen. Den Token übergeben Sie vLLM als HF_TOKEN-Umgebungsvariable. Die Freischaltung dauert in der Regel 1–24 Stunden.
Was tun bei OutOfMemory-Fehlern beim Start?
Zuerst gpu-memory-utilization von 0.95 auf 0.85 senken. Dann max-model-len reduzieren (8192 statt 32768). Falls weiterhin OOM: enforce-eager aktivieren, das spart CUDA-Graph-Speicher. Letzter Hebel: max-num-seqs herabsetzen, etwa auf 32 statt 256.
Funktioniert vLLM mit beliebigen OpenAI-Clients?
Ja, vLLM serve implementiert die /v1/chat/completions- und /v1/completions-Endpoints OpenAI-kompatibel. Tools wie OpenWebUI, LangChain, LiteLLM, Continue.dev und der offizielle openai Python-Client funktionieren ohne Anpassung — Sie setzen lediglich base_url auf http://ihr-server:8000/v1 und einen beliebigen API-Key.
vLLM produktiv aufsetzen lassen
Wir installieren, härten und überwachen vLLM-Stacks für Mittelständler — inklusive Reverse-Proxy, Auth, Prometheus-Metriken und Update-Strategie. Festpreis, dokumentierte Übergabe.