Inferenz-Engines im Vergleich
Die Engine ist das Programm, das Gewichte in Tokens verwandelt: Sie lädt die Datei, fährt den Transformer-Forward-Pass und spricht oben drauf üblicherweise HTTP. Die gute Nachricht ist, dass fast jede Engine dasselbe Model auf derselben Hardware mit ungefähr derselben Geschwindigkeit fährt — die Engine-Wahl handelt von Workflow, Format-Unterstützung und Parallelität, nicht von rohen tok/s. Die schlechte Nachricht ist dieselbe: Benchmark-Shopping zwischen ihnen ist meist vergebliche Mühe.
Das Feld
| Engine | Was sie ist | Formate | Hardware-Reichweite | Gebaut für |
|---|---|---|---|---|
| llama.cpp | C/C++-Inferenz-Kern mit eingebautem Server | GGUF | CPU, CUDA, ROCm, Metal, Vulkan — die breiteste Reichweite | Das Fundament; läuft fast überall |
| Ollama | llama.cpp eingewickelt mit Modellbibliothek, CLI und REST | GGUF | Was auch immer llama.cpp kann | Frictionsloser Desktop-Gebrauch |
| LM Studio | Polierte GUI plus OpenAI-kompatibler Server | GGUF (und MLX auf dem Mac) | Windows/macOS/Linux-GUI | Menschen, die Knöpfe wollen, keine Flags |
| vLLM | Python-Serving-Engine: Paged Attention, Continuous Batching | Safetensors | CUDA (plus etwas ROCm/TPU-Unterstützung) | gleichzeitiges Serving auf Rechenzentrums-Niveau |
| SGLang | Serving-Engine mit RadixAttention-Präfix-Caching | Safetensors | CUDA | schnelle strukturierte Ausgabe; Agenten mit geteilten Präfixen |
| exllamav2 | Reinrassiger GPU-Loader, auf Decode-Geschwindigkeit getunt | EXL2, GPTQ | nur CUDA | maximale Single-User-tok/s auf einer Consumer-NVIDIA-GPU |
| MLX | Apples Array-Framework; mlx-lm fährt Modelle darauf |
MLX | Apple Silicon | der schnelle praktische Weg auf aktuellen Macs |
| transformers (HF) | Die Referenzimplementierung, von der alles portiert wurde | Safetensors | CPU, CUDA | Korrektheits-Checks, Experimente, Training-Verrohrung |
Eine Anmerkung zur Abstammung: Ollama und LM Studio fahren beide llama.cpp unter der Haube. Sie mit llama.cpp zu vergleichen heißt, Verpackungen zu vergleichen, nicht Inferenz.
Außerdem wissenswert: llama.cpp liefert mehr als einen Server — Quantisierungs- und Konvertierungswerkzeuge, einen Benchmark-Testrahmen und Bindings für ein Dutzend Sprachen.
Vertiefungen
vLLM wurde aus der Paged-Attention-Einsicht geboren (siehe Parallelität): GPU-Speicher so behandeln, wie ein OS RAM behandelt, und weit mehr Anfragen passen hinein. Es ist die Standardantwort auf „Ich habe einen GPU-Server und echten Traffic“.
SGLang cached Präfixe über Anfragen hinweg (RadixAttention): Teilen sich 40 Agenten denselben zweiseitigen System-Prompt, wird der Prompt einmal verarbeitet, nicht 40-mal. Es ist auch bekannt für schnelles Constrained Decoding — siehe Strukturierte Ausgabe.
exllamav2 ist die geschärfte Klinge für genau eine Nische: ein einzelner Nutzer auf einer einzelnen NVIDIA-GPU, der die meisten tok/s pro Bit Quantisierung will. Die Server-Geschichte und die Hardware-Breite sind dünn; die Nische ist echt.
MLX ist Apples ML-Framework, gebaut für Unified Memory. Zum Zeitpunkt dieses Textes schlägt mlx-lm llama.cpps Metal-Pfad bei größeren Modellen oft — knapp genug, dass es sich auf einem Mac lohnt, beide zu probieren (mehr in Apple Silicon).
transformers ist die langsame, treue Referenz: Tut eine quantisierte Engine etwas Seltsames, beantwortet das Fahren desselben Modells durch sie die Frage „ist es die Engine oder das Model?“. Sie ist auch die Verrohrung unter Fine-Tuning-Werkzeugen (siehe Fine-Tuning).
Nach Bedarf wählen
| Sie sind... | Starten Sie mit |
|---|---|
| Am eigenen Schreibtisch chattend | Ollama oder LM Studio |
| Skriptend aus der Shell (Pipes, Cron, kleine Werkzeuge) | Ollamas REST-API oder llama-server |
| Ein App-Backend mit leichtem Traffic bauend | llama-server — ein Prozess, null Ops |
| Viele gleichzeitige Nutzer versorgend | vLLM oder SGLang |
| Agenten-Flotten mit langen geteilten System-Prompts fahrend | SGLang oder vLLM; siehe Agenten |
| Ein komplett Mac-Haushalt | Ollama/LM Studio zuerst; MLX, wenn Sie mehr Geschwindigkeit wollen |
Zwei Anmerkungen zur Tabelle:
- „Starten Sie mit“ heißt nicht „bleiben Sie bei“ — jede Desktop-Engine liest dasselbe GGUF, also kostet der Versuch einer zweiten fünf Minuten, keine Migration.
- Wenn Sie doch vergleichen, halten Sie alles konstant: gleiches Model, gleiches Quant, gleicher Prompt, Model schon warm.
Die Format-Spaltung spiegelt die Desktop-/Server-Spaltung
GGUF gegen Safetensors (siehe Modellformate) ist nicht bloß eine Container-Präferenz — es entscheidet über Ihre Engine. GGUF ist das Ein-Datei-, vorquantisierte, überall-laufende Format, und das gesamte Desktop-Ökosystem (llama.cpp, Ollama, LM Studio) ist darauf gebaut. Safetensors ist das Shard-Tensor-Format des Hugging-Face-Ökosystems; die Server-Engines mit hohem Durchsatz (vLLM, SGLang, transformers) konsumieren es, meist spontan quantisiert (AWQ/GPTQ-Varianten) statt vorverpackt.
Der echte Entscheidungsbaum ist also kurz: Desktop und Einzelnutzer → GGUF-Engines; Server und parallel → Safetensors-Engines. Alles andere ist Detail.
Wenn etwas „nicht laufen kann“, prüfen Sie zuerst das Format — die Hälfte von „Engine X kann Model Y nicht ausführen“ ist ein GGUF/Safetensors-Missverhältnis, keine Fähigkeitslücke.
Overhead ist nicht die Geschichte
Auf identischer Hardware mit identischem Quant landen Engines für Single-Stream-Decode grob innerhalb von 10–20% voneinander — oft, weil sie sich ein Backend teilen. Was Ihre erlebte Geschwindigkeit wirklich um Faktoren bewegt, nicht um Prozent:
- Ob das Model schon geladen ist — eine Kaltladung kostet Sekunden bis eine Minute.
- Ob die ganze Konversation jede Runde erneut gesendet wird — Kontextkosten, siehe Tokens.
- Ob Anfragen hintereinander in die Warteschlange gehen — siehe Parallelität.
- Ob Layer auf der GPU liegen — siehe Engine-Regler.
Gleiche GPU, gleiches 8B Q4_K_M, ein Stream (illustrativ, keine Specs):
llama.cpp / Ollama / LM Studio ~130–145 tok/s (dieselbe Engine darunter)
exllamav2 EXL2 ~4bpw ~160–180 tok/s (auf Decode getunter Loader)
Gleiche GPU, 8 gleichzeitige Chat-Streams:
llama-server serielle Warteschlange jeder Stream wartet; Gesamtdurchsatz flach
vLLM alle Streams nahe Single-Stream-Geschwindigkeit
Wählen Sie die Engine, die zu Ihrem Workflow passt, und investieren Sie Ihre Energie in I/O-Muster statt in Engine-Benchmarks.
Eine Datei, viele Engines
Ein GGUF, das Sie für Ollama heruntergeladen haben, läuft auch direkt in llama.cpp und in LM Studio — Engines konvertieren nicht und laden nicht erneut herunter; Sie lassen sie auf dieselbe Datei zeigen (Ollama kann einen lokalen Pfad mit einem einzeiligen Modelfile importieren). Dasselbe gilt serverseitig für Safetensors zwischen vLLM und SGLang. Praktische Konsequenz: Es gibt kein Vendor-Lock-In auf Dateiebene, und sich über eine Engine zu irren kostet Sie Minuten.
Deshalb drängt diese Seite ständig auf Workflow statt Benchmarks: Wenn sich Ihre Bedürfnisse ändern, ziehen die bereits heruntergeladenen Modelle mit Ihnen um.
Wann Sie Ollama entwachsen
Ollamas Defaults sind exzellent, bis sie es nicht sind. Wechseln Sie zu einer Serving-Engine, wenn:
- Sie anhaltende Parallelität über eine Handvoll Streams hinaus brauchen (siehe Parallelität).
- Sie Präfix-Caching über viele Agenten hinweg wollen, die einen System-Prompt teilen (SGLang).
- Sie AWQ/GPTQ-Safetensors-Quants direkt aus dem HF-Ökosystem serven müssen.
- Sie eine Produktfunktion vor dem Ausliefern lasttesten.
- Sie Multi-GPU-Tensor-Parallelismus brauchen, um ein großes Model über Karten zu verteilen.
Bis eine davon wahr ist, ist die Bequemlichkeit mehr wert als der Durchsatz.
Verwandt: Modellformate · Engine-Regler · Einen Endpunkt serven · Modellauswahl