Ollama zu vLLM: Wann Sie Ihren lokalen LLM-Server migrieren sollten

Wann von Ollama auf vLLM wechseln

Inhaltsverzeichnis

Ollama ist einer der einfachsten Wege, ein lokales Sprachmodell auszuführen, aber die Bequemlichkeit kann den Moment verbergen, in dem ein lokales Experiment zu einem gemeinsamen Inferenzdienst wird, der eine bessere Planung und Beobachtbarkeit benötigt.

Genau hier wird vLLM relevant. Die Migration von Ollama zu vLLM ist jedoch kein automatisches Upgrade. Es ist ein Tauschhandel: Sie geben einen Teil der Einfachheit von Ollama auf, um mehr Kontrolle über Batching, Speicherverwaltung, Parallelität, verteilte Inferenz und Produktionsbetrieb zu erlangen.

Migration von Ollama zu vLLM

Diese Anleitung behandelt die praktischen Anzeichen, die eine Migration rechtfertigen, die Risiken eines zu frühen Wechsels und einen gestuften Ansatz, der beide Server während der Validierung nebeneinanderlaufen lässt. Das Ziel ist es, Ihnen zu helfen, Entscheidungen auf der Grundlage von Messwerten und nicht von Funktionslisten zu treffen. Für das breitere Spektrum lokaler, selbst gehosteter und Cloud-Optionen, die über diese beiden Laufzeitumgebungen hinausgehen, siehe LLM-Hosting im Jahr 2026: Lokale, Selbst gehostete und Cloud-Infrastruktur im Vergleich.

Ollama und vLLM lösen unterschiedliche Probleme

Ollama ist in erster Linie für die bequeme Modellnutzung optimiert. Es bietet Entwicklern eine knappe Befehlszeilenschnittstelle, eine lokale API, eine Modellbibliothek, Modelfiles und unkomplizierte Unterstützung für gängige Desktop- und Arbeitsplatzkonfigurationen.

vLLM ist eine Inferenz-Engine und eine Plattform zum Betreiben von Diensten (Serving). Seine zentralen Anliegen sind hochleistungsfähige Anfrageplanung, effiziente Verwaltung des KV-Caches, kontinuierliches Batching, Modellparallelität und Kompatibilität mit Anwendungen, die für OpenAI-artige APIs entwickelt wurden.

Diese Unterscheidung ist wichtig, da die beiden Server von außen ähnlich aussehen können. Beide können eine Chat-API bereitstellen, Token streamen, quantisierte Modelle ausführen und lokale Anwendungen bedienen. Ihre Betriebsmodelle werden erst dann sichtbar unterschiedlich, wenn der Server unter anhaltender oder paralleler Last steht.

Eine nützliche Zusammenfassung:

Anforderung Ollama vLLM
Schnelle lokale Einrichtung Hervorragend Aufwendiger
Kuratierte Modell-Downloads Hervorragend Meistens Hugging Face basiert
GGUF-Workflow Erster Klasse Unterstützt, aber nicht Stärke
Ein-Nutzer-Chat Hervorragend Oft unnötig
Paralleler API-Verkehr Begrenzt, aber konfigurierbar Kernaufgabe
Kontinuierliches Batching Nicht das Hauptmodell Kernfunktion
Wiederverwendung des Präfix-Caches Begrenzte operative Kontrolle Eingebaute Optimierung
Multi-GPU-Modell-Server Begrenzt im Vergleich zu vLLM Tensor- und Pipeline-Parallelität
Produktions-Metriken Grundlegende Antwortzeitdaten Prometheus-Metriken-Endpunkt
Deployment-Anpassung Minimal Umfassend

Die Frage ist nicht, welcher Server universell besser ist. Es geht darum, ob Ihre Arbeitslast noch zu dem Betriebsmodell passt, das Ollama attraktiv macht. Wenn Sie das Gesamtbild über diese beiden Laufzeitumgebungen hinaus sehen möchten, deckt [der Vergleich von Ollama, vLLM, LocalAI, Jan, LM Studio und anderen lokalen LLM-Tools](https://www.glukhov.org/de/llm-hosting/comparisons/hosting-llms-ollama-localai-jan-lmstudio-vllm-comparison/ “Umfassender Vergleich von 12+ lokalen LLM-Tools”}) das breitere Feld ab.

Anzeichen, dass Sie Ollama überholt haben

Eine langsame Antwort rechtfertigt für sich allein keine Migration. Die Generierungsgeschwindigkeit wird oft durch die Modellgröße, Quantisierung, Speicherbandbreite, Promptlänge oder GPU-Leistungsfähigkeit begrenzt, nicht durch die Serving-Engine, und die stärkeren Migrationsanzeichen erscheinen erst, wenn die Form der Arbeitslast selbst an Bedeutung gewinnt.

Mehrere Benutzer verursachen instabile Latenz

Ein lokaler LLM-Server kann sich in einem isolierten Test schnell anfühlen und dann stark nachlassen, wenn mehrere Clients verbunden sind. Anträge beginnen, hinter langen Generierungen zu warten, die Zeit bis zum ersten Token wird inkonsistent, und ein einzelner großer Prompt kann jeden beeinflussen, der das Modell teilt.

Ollama kann parallele Anfragen verarbeiten, und OLLAMA_NUM_PARALLEL steuert, wie viele Anfragen ein geladenes Modell gleichzeitig verarbeiten darf – siehe wie Ollama parallele Anfragen verarbeitet für die Mechanismen von Warteschlangen und Speicher hinter dieser Einstellung. Diese Parallelität ist nicht kostenlos: Die Speicheranforderungen steigen mit der Anzahl der konfigurierten parallelen Anfragen und der Kontextlänge.

Dies ist oft die erste praktische Warnung. Eine Konfiguration, die für eine 8K-Unterhaltung funktioniert, kann unmöglich werden, wenn vier Clients jeweils einen viel größeren Kontext reservieren.

vLLM ist so konzipiert, dass es Arbeit von aktiven Anfragen durch kontinuierliches Batching kombiniert. Anstatt jede Anfrage als isolierten Inferenzjob zu betrachten, aktualisiert es die Charge kontinuierlich, während Sequenzen eintreffen, Token generieren und abgeschlossen werden – ein Planungsmodell, das im Allgemeinen an Wert gewinnt, wenn die Parallelität zunimmt.

GPU-Auslastung ist niedrig, während Anfragen in der Warteschlange stehen

Eine Warteschlange bedeutet nicht zwangsläufig, dass die GPU voll genutzt wird. In einer einfachen Anordnung kann die Arbeit serialisiert werden, obwohl zusätzliche Anfragen nützliche Berechnungen zum aktuellen Decode-Schritt hätten beitragen können.

Der Scheduler von vLLM ist so konzipiert, dass er mehr nützliche Arbeit in der Flugbahn hält. PagedAttention verwaltet den KV-Cache-Speicher in Blöcken, während kontinuierliches Batching aktiven Sequenzen erlaubt, dynamisch die Ausführungsladung zu betreten und zu verlassen.

Das Ergebnis ist keine garantierte niedrigere Latenz für jede einzelne Anfrage. Unter Last kann es jedoch eine deutlich bessere aggregierte Durchsatzrate und eine vorhersehbare Ressourcen utilization erzeugen.

Lange Prompts dominieren die Zeit bis zum ersten Token

Lange Kontexte für Coding-Assistenten, RAG-Pipelines und Agentensitzungen können wiederholt große System-Prompts oder gemeinsame Dokumentpräfixe senden. Die Verarbeitung dieser Eingabetokens ist die Prefill-Phase, und sie kann die Zeit bis zum ersten Token dominieren.

vLLM unterstützt Chunked Prefill und automatisches Präfix-Caching. Präfix-Caching ermöglicht es späteren Anfragen, KV-Cache-Blöcke wiederzuverwenden, wenn ihre initiale Token-Sequenz mit einem bereits verarbeiteten Präfix übereinstimmt.

Dies ist besonders nützlich, wenn Anfragen Folgendes teilen:

  • Einen langen System-Prompt
  • Derselben Tool-Definitionen
  • Eine stabile Repository-Zusammenfassung
  • Wiederholte Few-Shot-Beispiele
  • Ein gemeinsames RAG-Dokumentpräfix
  • Eine geteilte Chatverlauf

Präfix-Caching macht die Ausgabe-Generierung nicht schneller. Es reduziert die wiederholte Prompt-Berechnung, daher hängt der Nutzen davon ab, ob die Anfragen tatsächlich identische wiederverwendbare Präfixe enthalten.

Sie benötigen mehr als eine GPU

Ein Modell, das nicht auf eine GPU passt, ist ein starker Grund, vLLM in Betracht zu ziehen. Es unterstützt Tensorparallelität über GPUs hinweg und Pipeline-Parallelität über mehrere Knoten oder Geräte hinweg.

Das macht Multi-GPU-Inferenz nicht mühelos. GPU-Interconnect-Bandbreite, PCIe-Topologie, Modellarchitektur, Shared Memory im Container und Kommunikations-Overhead beeinflussen die Leistung immer noch.

Trotzdem bietet vLLM einen bewussten Weg für verteilte Inferenz. Ollama ist in der Regel ein besserer Match für einen einzelnen Desktop oder Arbeitsplatz, auf dem das gewählte Modell bequem passt.

Sie benötigen Observability auf Produktionsebene

Ollama-Antworten über die API stellen nützliche Zeitfelder bereit, wie z. B. Modellladezeit, Prompt-Evaluationszeit, Anzahl der generierten Token und Generierungszeit. Diese Werte reichen für lokale Benchmarks und anwendungsebene Protokollierung aus.

vLLM stellt Prometheus-kompatible Metriken über seinen /metrics-Endpunkt bereit. Das erleichtert die Verfolgung von Anfragevolumen, Wartezeiten, Zeit bis zum ersten Token, Token-Intervall-Latenz, Cache-Auslastung, Vorgriffen (Preemptions), Durchsatz und Ergebnissen von Anfragen über die Zeit.

Sobald Benutzer vom Dienst abhängen, ist Observability keine Option mehr. Ohne Metriken für Warteschlangen, Cache und Latenz ist es schwierig, zwischen einer zu kleinen GPU, einer überdimensionierten Kontextbeschränkung, schlechter Planung, kaltem Modellladen oder einfach zu vielen gleichzeitigen Anfragen zu unterscheiden.

Wo vLLM tatsächlich gewinnt

Der wichtigste Vorteil von vLLM ist nicht, dass es auf jedem Computer eine Antwort schneller als Ollama produzieren kann. Der aussagekräftige Vorteil ist, dass es dem Betreiber mehr Mechanismen bietet, teuren Beschleuniger-Speicher und -Rechenleistung effizient über viele Anfragen hinweg zu nutzen.

Kontinuierliches Batching

Traditionelles statisches Batching funktioniert am besten, wenn die Eingabe- und Auslängenn der Anfragen ähnlich sind. Interaktiver LLM-Verkehr verhält sich selten so: Ein Benutzer fragt eine kurze Klassifizierung ab, ein anderer sendet einen Prompt mit 20.000 Tokens und ein dritter generiert mehrere tausend Tokens an Code.

Kontinuierliches Batching ändert die aktive Ladung, während die Anfragen fortschreiten. Abgeschlossene Sequenzen verlassen sie, neue Sequenzen treten ein, und die Engine versucht, die Kapazität der Ladung für Anfragen, die bereits abgeschlossen sind, nicht zu verschwenden.

Dies verbessert den Durchsatz, wenn der Verkehr parallel und ungleichmäßig ist. Wenn ein einzelner Benutzer nacheinander eine Anfrage nach der anderen sendet, bietet es wenig Nutzen.

Verwalten des Paged KV-Caches

Während der Generierung speichert der Server die Aufmerksamkeits-Schlüssel und -Werte für zuvor verarbeitete Tokens. Dieser KV-Cache kann einen großen Teil des GPU-Speichers verbrauchen, besonders bei langen Kontexten und mehreren aktiven Sequenzen.

vLLM verwaltet diesen Cache in Blöcken, anstatt jede Sequenz eine große zusammenhängende Zuteilung vorzubehalten. Dieser Ansatz reduziert Speicherfragmentierung und erlaubt eine flexiblere Nutzung der verfügbaren Cache-Kapazität.

Der praktische Wert ist eine höhere Parallelität innerhalb des gleichen Speicherbudgets. Es beseitigt nicht die zugrunde liegenden Kosten des langen Kontexts, sondern reduziert vermeidbaren Verschwendung um diese Kosten. Für die Arithmetik hinter diesen zugrunde liegenden Kosten – wie viele Bytes eine gegebene Kontextlänge tatsächlich benötigt und wie die Cache-Genauigkeit (FP8, Q8_0, Q4_0) dagegen auf einer 16-GB-Karte tauscht – siehe KV-Cache auf 16-GB-GPUs.

Präfix-Caching

Viele Produktionsanfragen teilen einen substantialen Anfang. Agenten mit Tool-Unterstützung können identische Funktionsschemata senden, Support-Bots können dieselben Richtlinien-Dokumente verwenden und Coding-Assistenten können dieselben Repository-Anweisungen wiederholt einbeziehen.

Automatisches Präfix-Caching kann den berechneten Cache für übereinstimmende Präfixe wieder verwenden. Es ist besonders nützlich, wenn einem stabilen, großen Präfix ein relativ kleiner, anfragespezifischer Suffix folgt.

Es ist weniger nützlich, wenn Templates, Zeitstempel, Dokumentreihenfolge oder dynamisch generierte Metadaten sich in der Nähe des Anfangs jedes Prompts ändern. Kleine Unterschiede in der Tokenisierung können verhindern, dass das Präfix übereinstimmt.

Parallele und verteilte Inferenz

vLLM unterstützt verschiedene Formen der Parallelität, einschließlich Tensor-, Pipeline-, Daten-, Experten- und Kontext-Parallelität. Nicht jede Deployment benötigt diese Modi, aber ihre Verfügbarkeit ist wichtig, wenn ein Dienst über eine GPU hinaus wächst.

Für einen Arbeitsplatz mit zwei geeigneten GPUs kann Tensorparallelität es ermöglichen, ein größeres Modell über beide Geräte hinweg auszuführen. Für einen replizierten Dienst kann Datenparallelität mehrere Engine-Replikate für zusätzlichen Durchsatz erstellen.

Diese Funktionen führen zu operativer Komplexität. Sie sollten nur dann übernommen werden, wenn Messwerte ein Kapazitätsproblem demonstrieren, nicht weil verteilte Inferenz fortschrittlicher erscheint.

Breitere Produktionskontrollen

vLLM stellt Kontrollen für die GPU-Speicherutilisation, maximale Modelllänge, maximale aktive Sequenzen, Quantisierung, Cache-Datentypen, [Spekulatives Dekodieren](https://www.glukhov.org/de/llm-performance/optimization/speculative-decoding/ “Draft-Verify-Mechanik, EAGLE-3, P-EAGLE, n-Gramm, MTP und Einrichtung für llama.cpp, vLLM, SGLang und TensorRT-LLM”}, Tool-Aufrufe, strukturierte Ausgabe, Modellalias, Authentifizierungsschlüssel und verteilte Ausführung bereit.

Diese Flexibilität macht den Server leichter für eine bestimmte Arbeitslast anzupassen, aber sie schafft auch mehr Möglichkeiten für eine ungültige oder ineffiziente Konfiguration. Die Migration zu vLLM bedeutet, die Verantwortung für diese Entscheidungen zu übernehmen.

Wo Ollama immer noch gewinnt

Eine Migrationsanleitung sollte Ollama nicht als unterlegenes vorläufiges Werkzeug behandeln. Für viele lokale Deployments bleibt es der bessere Server.

Persönliche Arbeitsstationen

Für einen Entwickler, der eine Chat-Oberfläche, einen Code-Assistenten oder eine gelegentliche lokale API verwendet, können die operativen Vorteile von vLLM die zusätzliche Einrichtung nie ausgleichen.

Ollama installiert schnell, lädt Modelle über ein einfaches Registry herunter und versteckt viele modell-spezifische Details. Es ist gut für Experimente und privaten Desktop-Gebrauch geeignet.

GGUF-Modellsammlungen

Ollama hat einen natürlichen Workflow um GGUF-Modelle und Modelfiles. Bestehende Benutzer können kuratierte Quantisierungen, Adapter, Templates, System-Prompts und Parameter haben, die zuverlässig mit ihrer Hardware funktionieren.

vLLM unterstützt GGUF, aber sein stärkster Weg ist im Allgemeinen über unterstützte Hugging Face Modell-Repositories und Quantisierungsformate wie AWQ, GPTQ, BitsAndBytes, FP8 oder vendor-spezifische Formate. Eine bestehende GGUF-Deployment ohne Bewertung eines nativeren Checkpoint-Formats zu vLLM zu verschieben, kann die Unbequemlichkeit der Migration erhalten, während einige der Leistungsvorteile verpasst werden.

Gemischtes CPU- und GPU-Offloading

Desktop-Inferenz verlässt sich manchmal auf teilweises GPU-Offloading, weil das gesamte Modell nicht in die VRAM passt. Das kann für gelegentliche Nutzung praktisch sein, besonders wenn Latenz nicht kritisch ist.

vLLM ist im Allgemeinen am überzeugendsten, wenn das Modell und die erforderliche KV-Cache-Kapazität effektiv von der verfügbaren Beschleuniger-Konfiguration bedient werden können. Eine Arbeitslast, die stark von System-RAM und CPU-Offloading abhängt, ist möglicherweise besser für Ollama oder llama.cpp geeignet.

Schneller Modellwechsel

Ollama macht es leicht, viele lokale Modelle zu ziehen, auszuführen, anzuhalten und zwischen ihnen zu wechseln. Das ist nützlich für Evaluation, Schreiben, Coding, Embeddings, Vision und spontane Experimente.

Eine vLLM-Deployment wird häufiger um ein bewusst ausgewähltes Modell herum gebaut, das als Dienst geladen bleibt. Multi-Modell-Deployment ist möglich, erfordert aber eine explizitere Ressourcenplanung.

Minimale Verwaltung

Ollama ist absichtlich meinungsvoll (opinionated). Das kann eine Beschränkung unter Last sein, aber es ist ein Vorteil, wenn niemand eine Inferenzplattform warten möchte, und wenn der lokale Server einen Benutzer hat, akzeptable Latenz und keine signifikante Warteschlange, wird die Migration wahrscheinlich Arbeit erzeugen, statt sie zu entfernen.

Migrationsentscheidungen nicht nur auf Tokens pro Sekunde basieren

Die Token-Generierungsgeschwindigkeit für einzelne Anfragen ist ein unvollständiger Benchmark. Zwei Server können für eine Sequenz ähnliche Decode-Durchsatzraten erzielen, aber sich bei acht parallelen Clients sehr unterschiedlich verhalten.

Eine nützliche Evaluation sollte mindestens Folgendes messen:

  • Zeit bis zum ersten Token
  • Token-Intervall-Latenz
  • End-to-End-Anfrage-Latenz
  • Prompt-Verarbeitungsdurchsatz
  • Ausgabe-Token-Durchsatz
  • Abgeschlossene Anfragen pro Minute
  • Wartezeit in der Warteschlange
  • GPU-Speicherverbrauch
  • GPU-Auslastung
  • Fehler- und Timeoutrate

Führen Sie die gleiche Modellfamilie, Präzision, Kontextlänge, Prompt-Sammlung, Ausbegrenzung und Parallelitätsstufe auf beiden Servern aus. Andernfalls vergleicht der Test eher Modellverpackung und Konfiguration als Serving-Engines.

Der nützlichste Vergleich ist ein kleiner Lasttest, der Ihren echten Verkehr darstellt. Für einen gemeinsamen Coding-Assistenten könnte dies lange System-Prompts, wiederholte Präfixe, gestreamte Antworten und zwei bis acht gleichzeitige Sitzungen umfassen.

Die Modellmigration zuerst planen

Ollama-Modellnamen werden nicht automatisch auf äquivalente vLLM-Modellkennungen abgebildet. Ein Ollama-Paket kann eine bestimmte GGUF-Quantisierung, ein Prompt-Template, eine Stop-Token-Konfiguration und Standardparameter enthalten.

Bevor Sie den Server ändern, identifizieren Sie:

  1. Die ursprüngliche Modellfamilie und -version
  2. Ob es sich um ein Basis- oder ein anweisungsgestuftes Modell handelt
  3. Die aktuelle Quantisierung und effektive Präzision
  4. Das Prompt- oder Chat-Template
  5. Die konfigurierte Kontextlänge
  6. Stop-Tokens und Generierungsstandardwerte
  7. Anforderungen an Tool-Aufrufe oder strukturierte Ausgabe
  8. Alle LoRA-Adapter oder benutzerdefinierten System-Prompts

Wählen Sie dann einen von vLLM unterstützen Checkpoint, der dem beabsichtigten Verhalten entspricht. Nehmen Sie nicht an, dass ein AWQ- oder FP8-Checkpoint identisch zu dem GGUF-Build funktioniert, der zuvor in Ollama verwendet wurde – die Modellmigration ist oft signifikanter als die API-Migration.

VRAM vor dem Start von vLLM überprüfen

Dass ein Modell in den GPU-Speicher passt, bedeutet nicht, dass es die erforderliche Arbeitslast bedienen kann. VRAM muss mehr als nur Modellgewichte abdecken.

Das praktische Speicherbudget umfasst:

Modellgewichte
+ KV-Cache
+ CUDA-Graphen und Laufzeit-Zuteilungen
+ Temporärer Arbeitsbereich
+ Multimodale Processor-Caches, falls verwendet
+ Sicherheitsmarge

Lange Kontexte und parallele Sequenzen erweitern hauptsächlich die KV-Cache-Anforderung. Das Erhöhen der maximalen Kontextlänge reduziert daher die Anzahl gleichzeitiger Anfragen, die passen können, selbst wenn die meisten Anfragen die volle Grenze nie nutzen.

Beginnen Sie mit einem realistischen --max-model-len anstatt des größten Werts, der vom Modell beworben wird, und vermeiden Sie es, die GPU-Speicherutilisation so aggressiv zu setzen, dass geringe Variationen der Arbeitslast zu Out-of-Memory-Fehlern führen. Ein stabiler Dienst mit etwas geringer theoretischer Kapazität ist nützlicher als einer, der bei seinem ersten Verkehrsspitze versagt.

Ein minimales vLLM Docker Compose Deployment

Das folgende Beispiel startet einen OpenAI-kompatiblen vLLM-Server auf Port 8000:

services:
  vllm:
    image: vllm/vllm-openai:latest
    container_name: vllm
    restart: unless-stopped
    ports:
      - "8000:8000"
    ipc: host
    gpus: all
    volumes:
      - ${HOME}/.cache/huggingface:/root/.cache/huggingface
    environment:
      HF_TOKEN: ${HF_TOKEN:-}
    command:
      - --model
      - Qwen/Qwen3-8B
      - --served-model-name
      - local-model
      - --max-model-len
      - "16384"
      - --gpu-memory-utilization
      - "0.90"
      - --api-key
      - ${VLLM_API_KEY:-change-me}

Erstellen Sie eine Umgebungsdatei:

cat > .env <<'EOF'
HF_TOKEN=
VLLM_API_KEY=replace-with-a-long-random-value
EOF

Starten Sie den Server:

docker compose up -d

Prüfen Sie die Logs:

docker compose logs -f vllm

Testen Sie den Modelle-Endpunkt:

curl http://localhost:8000/v1/models \
  -H "Authorization: Bearer replace-with-a-long-random-value"

Senden Sie eine Chat-Anfrage:

curl http://localhost:8000/v1/chat/completions \
  -H "Authorization: Bearer replace-with-a-long-random-value" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "local-model",
    "messages": [
      {
        "role": "user",
        "content": "Explain continuous batching in two paragraphs."
      }
    ],
    "temperature": 0.2,
    "max_tokens": 300,
    "stream": false
  }'

Für ein gewartetes Deployment binden Sie das Image an eine getestete vLLM-Version fest, anstatt es auf latest zu lassen. Prüfen Sie die Release-Notizen vor dem Upgrade, da Befehlszeilenoptionen, Modellimplementierungen, Metriken und Engine-Verhalten sich entwickeln können. Diese Compose-Datei ist absichtlich minimal; für die vollständige Setup-Anleitung – OpenAI-API-Kompatibilität, PagedAttention-Einrichtung und ein tieferer Vergleich von vLLM mit Ollama – siehe den vLLM Quickstart.

OpenAI-API-Kompatibilität ist keine vollständige Austauschbarkeit

Sowohl Ollama als auch vLLM bieten OpenAI-kompatible Endpunkte, was die Anwendungsmigration relativ klein machen kann. In vielen Clients reicht es, die Basis-URL, den API-Schlüssel und den Modellnamen zu ändern, um eine Verbindung herzustellen.

Zum Beispiel:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="replace-with-a-long-random-value",
)

response = client.chat.completions.create(
    model="local-model",
    messages=[
        {
            "role": "user",
            "content": "What should I monitor on an LLM server?",
        }
    ],
    temperature=0.2,
)

print(response.choices[0].message.content)

Die Kompatibilität sollte jedoch immer noch auf Funktionsebene getestet werden. Prüfen Sie:

  • Verhalten von Streaming-Events
  • Unterstützte Anfrageparameter
  • Auswahl des Chat-Templates
  • Parsing von Tool-Aufrufen
  • Behandlung von Reasoning-Output
  • JSON- oder Schema-beschränkte Ausgabe
  • Embeddings-Endpunkte
  • Multimodale Eingaben
  • Token-Verbrauchsmeldungen
  • Fehlerantwortformate
  • Modellname-Erkennung
  • Durchsetzung der Kontextlänge

Ein Client, der nur normale Chat-Vervollständigungen sendet, ist normalerweise leichter zu migrieren als ein Agenten-Framework, das von einem bestimmten Tool-Aufruf-Parser oder einer nicht standardmäßigen Erweiterung abhängt.

Chat-Templates sind ein häufiger Migrationsfehler

Anweisungsgestufte Modelle erwarten, dass Gespräche mit einem spezifischen Chat-Template serialisiert werden. Das Template fügt Rollennmarker, Trennzeichen, Steuerungstokens und Generierungsaufforderungen in dem Format ein, das während des Trainings verwendet wurde.

Ollama packt viel von diesem Verhalten in seine Modelldefinition. Bei vLLM wird das Template normalerweise aus der Modell-Tokenisierungs-Konfiguration bezogen, obwohl ein Betreiber es explizit bereitstellen kann.

Ein Server kann erfolgreich starten, selbst wenn das ausgewählte Template falsch ist. Die Symptome erscheinen im Modellverhalten:

  • Das Modell wiederholt Rollennbezeichnungen
  • Antworten enthalten spezielle Tokens
  • Systemanweisungen werden ignoriert
  • Tool-Aufrufe sind fehlerhaft formatiert
  • Das Modell setzt die Nutzernachricht fort
  • Die Ausgabegüte ist viel schlechter als erwartet

Vergeleichen Sie den vollständig gerenderten Prompt, der von jeder Deployment verwendet wird, bevor Sie die Inferenz-Engine beschuldigen.

Eine gestufte Migration verwenden

Einen funktionierenden lokalen Server in einem Schritt zu ersetzen, schafft unnötiges Risiko. Ollama und vLLM können nebeneinander auf verschiedenen Ports laufen, während Sie die neue Deployment validieren.

Stufe 1: Ein Modell reproduzieren

Wählen Sie das Modell, das für den meisten API-Verkehr verantwortlich ist, und passen Sie seine Anweisungsgestufung, Kontextanforderung, Generierungsparameter und Chat-Verhalten so eng wie möglich an. Beginnen Sie nicht damit, jedes experimentelle Modell zu verschieben.

Stufe 2: API-Verhalten validieren

Führen Sie bestehende Integrationstests gegen den vLLM-Endpunkt aus, einschließlich Streaming, Abbruch, Timeouts, Tool-Aufrufe, fehlerhafte Anfragen, Kontextüberlauf und parallelem Zugriff. Dokumentieren Sie Verhaltensunterschiede, anstatt sie hinter Client-Retries zu verstecken.

Stufe 3: Eine Basislinie festlegen

Messen Sie zuerst die Leistung für eine Anfrage. Dies bestätigt, dass das Modell korrekt geladen ist, und bietet eine Referenz für spätere Tests.

Protokollieren Sie Prompt-Tokens pro Sekunde, Ausgabe-Tokens pro Sekunde, Zeit bis zum ersten Token, Gesamtlatenz und GPU-Speicherausnutzung.

Stufe 4: Realistischen Parallelverkehr hinzufügen

Testen Sie die Anzahl gleichzeitiger Anfragen, die im normalen Betrieb und während eines plausiblen Peaks erwartet werden, mit repräsentativen Prompt- und Auslängen, anstatt identischen synthetischen Anfragen. Achten Sie auf Warteschlangen, Cache-Auslastung, Vorgriffe, Zeit bis zum ersten Token und Tail-Latenz.

Stufe 5: Einen Client verschieben

Leiten Sie eine nicht kritische Anwendung oder einen kleinen Prozentsatz des Verkehrs zu vLLM. Halten Sie Ollama als Fallback bereit, bis der neue Server zuverlässig im realen Gebrauch betrieben hat.

Stufe 6: Aus Messwerten anpassen

Passen Sie Modelllänge, Speicherausnutzung, maximale aktive Sequenzen, Präfix-Caching, Parallelität und Quantisierung nur nach Identifizierung eines gemessenen Engpasses an. Das Ändern mehrerer Parameter gleichzeitig macht Leistungsregressionen schwer zu erklären.

Eine praktische Migrationscheckliste

Bevor Sie Clients wechseln, überprüfen Sie Folgendes:

[ ] Das Ziellmodell wird von vLLM unterstützt
[ ] Der ausgewählte Checkpoint und die Quantisierung passen in die VRAM
[ ] Genug VRAM bleibt für den erforderlichen KV-Cache
[ ] Die maximale Kontextlänge spiegelt die reale Nutzung wider
[ ] Das korrekte Chat-Template ist verfügbar
[ ] Stop-Tokens und Generierungsstandardwerte sind getestet
[ ] Streaming funktioniert mit bestehenden Clients
[ ] Tool-Aufrufe und strukturierte Ausgabe sind validiert
[ ] Der öffentliche Modellalias bleibt stabil
[ ] Authentifizierung ist aktiviert
[ ] Der Server wird nicht direkt an das Internet exponiert
[ ] Prometheus-Metriken werden gesammelt
[ ] GPU-Metriken werden separat gesammelt
[ ] Lasttests umfassen realistische Parallelität
[ ] Timeouts und Abbrüche werden behandelt
[ ] Ein Rollback-Pfad zu Ollama existiert

Diese Liste ist absichtlich operativ. Die Installation von vLLM ist normalerweise einfacher, als zu beweisen, dass es für eine bestehende Anwendung korrekt funktioniert.

Sicherheit und Netzwerk-Exposition

Weder ein lokaler Ollama-Endpunkt noch ein vLLM-Endpunkt sollten leichtfertig an das öffentliche Internet exponiert werden. Ein nicht authentifizierter Inferenzserver kann teure GPU-Kapazität verbrauchen, Modellverhalten offenlegen und zu einem Weg für Denial-of-Service-Angriffe durch sehr lange Prompts oder Ausgaben werden.

vLLM kann einen API-Schlüssel für seine OpenAI-kompatiblen Endpunkte erfordern, aber ein API-Schlüssel ist keine vollständige Sicherheitsgrenze. Für gemeinsamen oder entfernten Zugriff stellen Sie den Dienst hinter einen Reverse Proxy oder API-Gateway, der TLS, Netzwerkbeschränkungen, Anfragegrößenbeschränkungen, Ratenbeschränkungen, Zugriffsprotokollierung und angemessene Authentifizierung bereitstellt – dasselbe Muster, das in Ollama hinter einem Reverse Proxy mit Caddy oder Nginx behandelt wird, gilt genauso gut vor vLLM.

Betrachten Sie auch modell-spezifische Risiken. Multimodales URL-Laden, benutzerdefinierter Modellcode, entfernte Dateien und unbeschränkte Tool-Ausführung können die Angriffsfläche über die normale Textgenerierung hinaus erweitern.

Wann nicht migrieren

Bleiben Sie bei Ollama, wenn:

  • Ein oder zwei Benutzer auf den Server zugreifen
  • Anfragen meistens sequenziell sind
  • Das Modell bereits akzeptable Latenz liefert
  • Einfache GGUF-Verwaltung wichtig ist
  • CPU- oder teilweises GPU-Offloading erforderlich ist
  • Modelle häufig geändert werden
  • niemand zusätzliche Infrastruktur betreiben möchte
  • Es kein gemessenes Parallelitäts- oder Durchsatzproblem gibt

Ein Wechsel zu vLLM sollte eine konkrete Beschränkung lösen. „Produktion" ist keine magische Schwelle, die Ollama ungültig macht, besonders für einen internen Dienst mit mäßigem Verkehr.

Umgekehrt sollten Sie Ollama nicht nur deshalb beibehalten, weil es einfacher zu installieren war. Wenn Benutzer regelmäßig in einer Warteschlange warten, wiederholte Präfixe signifikante Prefill-Zeit verbrauchen oder ein größeres Modell über GPUs verteilt werden muss, kann der einfachere Server zum teureren Betriebswahl geworden sein.

Ollama für Entwicklung beibehalten und vLLM für gemeinsamen Serving hinzufügen

Die praktischste Architektur ist oft keine vollständige Ersetzung. Entwickler können Ollama in Docker Compose laufen lassen} auf ihren Arbeitsstationen für Modell-Exploration, GGUF-Tests und privaten interaktiven Gebrauch, während eine gemeinsame vLLM-Instanz ein stabiles Modell für Anwendungen und Teams bedient. Diese Aufteilung ist auch wichtig für AI-Souveränität – indem beide Laufzeitumgebungen selbst gehostet bleiben, bleiben Prompts, Gewichte und Inferenz-Logs unter Ihrer Kontrolle, unabhängig davon, welcher Server eine gegebene Anfrage bearbeitet.

Dies trennt zwei verschiedene Workflows:

Ollama:
Experimentation -> Modellwechsel -> persönliche Tools -> lokaler Chat

vLLM:
Ausgewähltes Modell -> gemeinsamer Endpunkt -> paralleler Verkehr -> Überwachung

Die Anordnung senkt auch das Migrationsrisiko. Modelle können lokal getestet werden, bevor ein geeigneter Checkpoint in die gemeinsame vLLM-Deployment überführt wird.

Migrationsentscheidungsfluss

Das folgende Diagramm fasst die wichtigsten Entscheidungspunkte zusammen:

flowchart TD A[Ollama bedient LLM] --> B{Mehrere Benutzer
mit instabiler Latenz?} B -->|Nein| C[Bei Ollama bleiben] B -->|Ja| D{Lange geteilte
Präfixe?} D -->|Ja| E[Starkes vLLM-Signal] D -->|Nein| F{Multi-GPU
oder Observability benötigt?} F -->|Ja| E F -->|Nein| G{Gemessenes
Parallelitätsproblem?} G -->|Nein| C G -->|Ja| E E --> H[Gestufte Migration planen] H --> I[Nebeneinander validieren] I --> J[Clients allmählich wechseln]

Fazit

Ollama ist schwer zu schlagen als lokaler Modell-Laufzeit. Es entfernt genug Verpackung- und Konfigurationsarbeit, dass Entwickler sich auf das Modell und die Anwendung konzentrieren können, statt auf den Inferenz-Stack.

vLLM wird zur stärkeren Wahl, wenn der Server selbst das Problem ist, das engineered werden muss. Paralleler Verkehr, Warteschlangen, wiederholte lange Präfixe, Multi-GPU-Modelle, Kapazitätsplanung und Produktions-Observability sind die Migrationsanzeichen, die zählen.

Migrieren Sie nicht, weil vLLM eine längere Funktionsliste hat. Migrieren Sie, wenn Messwerte zeigen, dass das einfachere Betriebsmodell von Ollama nicht mehr zur Arbeitslast passt. Bis zu diesem Punkt ist Einfachheit keine technische Schwäche; es ist eine Optimierung.

Abonnieren

Neue Beiträge zu Systemen, Infrastruktur und KI-Engineering.