[{"data":1,"prerenderedAt":764},["ShallowReactive",2],{"blog-vllm-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":21,"sources":25,"cover":53,"og":54,"expertise":55,"locales":56,"lang":58,"title":60,"description":61,"coverAlt":62,"metaTitle":63,"takeaways":64,"faq":70,"toc":86,"blocks":111,"others":521},"vllm","2026-06-30",11,"llmops",[9,10,11,12,13],"Self-hosted inference","OpenAI API","PagedAttention","GPU serving","LLM runtime",[4,15,16,17,18,19,20],"vllm vs sglang","vllm vs tensorrt-llm","self-hosted llm server","openai compatible api server","llm inference throughput","pagedattention",[22],{"name":23,"url":24},"vLLM","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FvLLM",[26,29,32,35,38,41,44,47,50],{"title":27,"url":28},"vLLM documentation","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Flatest\u002F",{"title":30,"url":31},"Optimization and tuning for the V1 engine","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Fstable\u002Fconfiguration\u002Foptimization.html",{"title":33,"url":34},"Architecture overview and the V1 process layout","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Fstable\u002Fdesign\u002Farch_overview.html",{"title":36,"url":37},"Metrics design","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Fstable\u002Fdesign\u002Fmetrics.html",{"title":39,"url":40},"Automatic prefix caching and its documented limits","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Fstable\u002Ffeatures\u002Fautomatic_prefix_caching.html",{"title":42,"url":43},"Online serving and the HTTP API surface","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Fstable\u002Fserving\u002Fonline_serving.html",{"title":45,"url":46},"Inside vLLM: anatomy of a high-throughput inference system","https:\u002F\u002Fvllm.ai\u002Fblog\u002F2025-09-05-anatomy-of-vllm",{"title":48,"url":49},"vLLM: easy, fast and cheap LLM serving with PagedAttention","https:\u002F\u002Fblog.vllm.ai\u002F2023\u002F06\u002F20\u002Fvllm.html",{"title":51,"url":52},"Release history","https:\u002F\u002Fgithub.com\u002Fvllm-project\u002Fvllm\u002Freleases","\u002Fimages\u002Fblog\u002Fvllm\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fvllm\u002Fog.jpg","ai-engineer",[57,58,59],"en","de","hu","vLLM geprüft: Inferenz auf eigener Hardware","vLLM macht aus einem Hugging-Face-Checkpoint einen OpenAI-kompatiblen Server: Was PagedAttention und kontinuierliches Batching bringen und was der Betrieb kostet.","Ein geteiltes Tablett mit losen Blättern speist eine schmale wachsende Säule, ein Pfeil geht hinaus.","vLLM geprüft: Inferenz auf eigener Hardware · Balázs Csorba",[65,66,67,68,69],"vLLM ist die Standard-Engine für selbst gehostete Inferenz mit offenen Gewichten auf NVIDIA- und AMD-Hardware, gewählt wegen der Breite bei Modellen, Quantisierung und API-Abdeckung, nicht wegen der Geschwindigkeit.","PagedAttention und kontinuierliches Batching sind der Grund für die Existenz; die belastbare Aussage ist, dass die paging-basierte Allokation die KV-Cache-Verschwendung von 60 bis 80 Prozent auf unter 4 Prozent senkte, nicht das 24-Fache im Durchsatz von 2023.","Prefix-Caching ist standardmäßig aktiv und verkürzt nur den Prefill; Workloads mit langen, wiederholten Prompts profitieren am meisten, lange Generierungen ohne gemeinsames Präfix gar nicht.","Der Produktionsfehler ist Preemption per Recompute bei zu kleinem KV-Cache; KV-Cache-Auslastung und die kumulative Preemption-Zahl beobachten, nicht den aggregierten Durchsatz.","Ein Aufbau mit vier GPUs läuft als sechs Prozesse und braucht mindestens sechs physische CPU-Kerne, der häufigste Grund für enttäuschenden Durchsatz.",[71,74,77,80,83],{"q":72,"a":73},"Ist vLLM schneller als SGLang oder TensorRT-LLM?","Nicht pauschal, und die meisten publizierten Vergleiche sind nicht vergleichbar. Der Launch-Blog von vLLM aus 2023 nennt bis zu 24-mal den Durchsatz von Hugging Face Transformers und das 2,2- bis 3,5-Fache von TGI, gemessen mit LLaMA-7B und LLaMA-13B bei aus dem ShareGPT-Datensatz gezogenen Anfragelängen. Das datiert vor dem Zugang der Wettbewerber zu Paged Caches; benchmarke die eigene Anfragelängenverteilung.",{"q":75,"a":76},"Brauche ich eine GPU für vLLM?","Linux mit CUDA oder ROCm ist das dokumentierte Ziel, mit Python 3.10 bis 3.13. Intel XPU und Google TPU werden separat unterstützt, Apple Silicon über ein anderes, auf MLX basierendes Projekt, nicht über vLLM selbst. Reine CPU-Inferenz ist das Terrain von llama.cpp.",{"q":78,"a":79},"Wie viel VRAM braucht vLLM?","vLLM reserviert einen konfigurierbaren Anteil der VRAM für Gewichte und KV-Cache, misst den Rest mit einem Profiling-Forward beim Start und meldet, wie viele Blöcke hineinpassen. Praktisch ist die Grenze meist das Modellgewicht in der gewählten Quantisierung; der Rest ist KV-Cache, und dessen Größe bestimmt die Parallelität.",{"q":81,"a":82},"Kann ein vLLM-Server mehrere Modelle hosten?","Nicht nativ. Ein Serverprozess hostet ein Modell zur Zeit, daher betreiben Multi-Modell-Setups einen Prozess pro Modell hinter einem Router oder nutzen Data-Parallelismus, um dasselbe Modell über mehrere GPUs zu replizieren. Ausnahme sind LoRA-Adapter: die lassen sich zur Laufzeit laden und entladen, laut Dokumentation nur für die lokale Entwicklung.",{"q":84,"a":85},"Wie bleibt vLLM-Ausgabe über Upgrades hinweg reproduzierbar?","Die Engine-Version pinnen, da Minor-Releases etwa alle zwei Wochen erscheinen, und --generation-config vllm setzen, damit der Server nicht generation_config.json aus dem Hugging-Face-Repository anwendet und die Sampling-Defaults still überschreibt. Für deterministische Läufe zusätzlich die Temperatur auf null setzen und die Modellrevision pinnen.",[87,90,93,96,99,102,105,108],{"id":88,"title":89},"what-it-is","Was es wirklich ist",{"id":91,"title":92},"how-it-works","Wie es funktioniert",{"id":94,"title":95},"getting-started","Einen Server aufsetzen",{"id":97,"title":98},"performance","Was die Durchsatzversprechen wert sind",{"id":100,"title":101},"running-in-production","Im Produktivbetrieb",{"id":103,"title":104},"where-it-stings","Wo es kratzt",{"id":106,"title":107},"verdict","Urteil",{"id":109,"title":110},"sources","Quellen",[112,116,119,122,125,147,148,151,157,160,161,164,167,194,196,211,212,215,280,283,301,302,306,317,351,354,357,363,366,377,397,398,409,455,458,459,462,476,481,482],{"type":113,"content":114},"paragraph",[115],"vLLM ist eine Open-Source-Inferenz-Engine, die aus einem Hugging-Face-Checkpoint einen HTTP-Server macht, der die OpenAI-API spricht. Sie ist die Schicht zwischen Modell und allem, was es aufruft, und ihre einzige Aufgabe ist, die GPU beschäftigt zu halten. Das Urteil vorab: auf NVIDIA- oder AMD-Hardware mit offenen Gewichten ist sie die Standardwahl, weil kein anderes Projekt so viel Fläche mit so wenig Klebercode abdeckt. Auf einem Laptop, auf einem reinen CPU-Host oder bei einem Modell und einem Nutzer ist sie weit zu viel Maschinerie.",{"type":113,"content":117},[118],"Sie konkurriert in der Serving-Schicht, nicht in der Modell-Schicht. Die Alternativen sind SGLang, das den Großteil des Designs teilt; NVIDIAs TensorRT-LLM, das Breite gegen Spitzenwerte auf NVIDIA-Teilen tauscht; llama.cpp, das dort anfängt, wo vLLM aufgibt; und Hugging Face TGI, dessen letzte Release v3.3.7 vom Dezember 2025 ist. Sie ist zugleich der übliche Ersatz für eine gehostete API, denn derselbe OpenAI-Client, der einen Anbieter anspricht, lässt sich auf einen lokalen Prozess umbiegen.",{"type":120,"level":121,"id":88,"text":89},"heading",2,{"type":113,"content":123},[124],"Die Fakten, die bei der Wahl einer Serving-Engine zählen, alle aus der Projektdokumentation und nicht von einer Anbieterseite:",{"type":126,"ordered":127,"items":128},"list",false,[129,135,137,139,141,143,145],[130,134],{"tag":131,"children":132},"strong",[133],"Apache-2.0",", ohne kostenpflichtige Stufe und ohne Control Plane beim Anbieter.",[136],"Entstanden im Sky Computing Lab der UC Berkeley; die Dokumentation nennt mehr als 2.000 Mitwirkende und eines der aktivsten Open-Source-KI-Projekte.",[138],"Mehr als 200 Modellarchitekturen auf Hugging Face, darunter Decoder-only, Mixture-of-Experts, hybride Attention, multimodale Modelle, Embedding-, Rerank- und Reward-Modelle.",[140],"OpenAI-kompatibler Server plus Anthropic-Messages- sowie Cohere-Embed- und Rerank-Endpunkte, dazu Sprache und strukturiertes Output. Ein Modell pro Serverprozess.",[142],"CUDA und ROCm als erste Klasse, Intel XPU und Google TPU unterstützt, Hardware-Plugins für Ascend NPUs, Gaudi, Spyre, Apple Silicon, MetaX und weitere.",[144],"Quantisierung über FP8, NVFP4, MXFP4, INT8 und INT4 sowie GPTQ-, AWQ-, GGUF- und compressed-tensors-Checkpoints.",[146],"Eine Minor-Release etwa alle zwei Wochen: v0.24.0 erschien am 29. Juni 2026, sechs Wochen nach v0.20.2 vom 10. Mai.",{"type":120,"level":121,"id":91,"text":92},{"type":113,"content":149},[150],"Zwei Ideen tragen den Großteil des Durchsatzes. PagedAttention legt den Key-Value-Cache in Blöcke fester Größe ab und bildet ihn über eine Block-Tabelle auf nicht zusammenhängenden GPU-Speicher ab, so wie ein Betriebssystem Seiten abbildet; das Paper von 2023 maß in früheren Systemen 60 bis 80 Prozent des KV-Cache als durch Fragmentierung und Überreservierung verschwendet, bei paging-basierter Allokation unter 4 Prozent. Kontinuierliches Batching nimmt danach bei jedem Decode-Schritt neue Anfragen an, statt zu warten, bis sich ein Batch füllt, und daher kommt der größte Teil der Latenzverbesserung.",{"type":152,"src":153,"alt":154,"wide":155,"caption":156},"image","\u002Fimages\u002Fblog\u002Fvllm\u002Fdiagram-7.webp","Eine Anfrage durch die vLLM-V1-Engine Clients rufen einen API-Server-Prozess auf, der den Prompt tokenisiert und ihn über einen Socket an einen Engine-Core-Prozess weiterreicht. Der Engine Core hält Scheduler und KV-Cache-Manager, die Blöcke an einen Worker-Prozess pro GPU übergeben. Token für Token schreiben die Worker in Blöcke des KV-Cache im Paging-Verfahren, und die gestreamte Ausgabe läuft über denselben Weg zurück.",true,"vLLM V1 verteilt die Arbeit auf Prozesse: HTTP und Tokenisierung im API-Server, Scheduling und Cache-Verwaltung im Engine Core, ein Worker pro GPU.",{"type":113,"content":158},[159],"Die V1-Engine, die V0 während 2025 ablöste, mischt Prefill und Decode im selben Schritt und gibt Decode Vorrang, damit ein langer Prompt den Streaming-Verkehr nicht mehr ausbremst. Chunked Prefill ist standardmäßig aktiv. Auch Prefix-Caching ist standardmäßig aktiv und hasht Token-Blöcke, sodass ein wiederholter System-Prompt nur einmal vorgeprefüllt wird; die Projektdokumentation weist ausdrücklich darauf hin, dass es nur den Prefill verkürzt und für das Decode nichts bringt, es also bei langen Generierungen ohne gemeinsames Präfix fast nichts kauft. Spekulatives Decoding steht über n-Gram-, EAGLE- und DFlash-Proposer bereit, nicht über ein eigenes kleines Draft-Modell.",{"type":120,"level":121,"id":94,"text":95},{"type":113,"content":162},[163],"Die Installation ist ein Befehl, die dokumentierte Plattform ist Linux mit Python 3.10 bis 3.13. Ein Modell zu serven sieht so aus:",{"type":165,"code":166},"code","uv venv --python 3.12 --seed\nsource .venv\u002Fbin\u002Factivate\nuv pip install vllm --torch-backend=auto\n\n# Prefix caching and chunked prefill are on by default in V1.\nvllm serve Qwen\u002FQwen3-8B \\\n  --served-model-name qwen3-8b \\\n  --max-model-len 32768 \\\n  --gpu-memory-utilization 0.9 \\\n  --tensor-parallel-size 2 \\\n  --api-key \"$VLLM_TOKEN\"",{"type":113,"content":168},[169,170,173,174,177,178,181,182,185,186,189,190,193],"Die Flags sind im Wesentlichen Kapazitätsentscheidungen. ",{"tag":165,"children":171},[172],"--max-model-len"," begrenzt den Kontext und damit den KV-Cache, den eine einzelne Anfrage halten kann; setze ihn auf den längsten Prompt, den das Produkt wirklich braucht, nicht auf das Modellmaximum. ",{"tag":165,"children":175},[176],"--gpu-memory-utilization"," ist der Anteil der VRAM, der im Voraus für Gewichte und Cache reserviert wird; was nach den Gewichten übrig bleibt, misst der Profiling-Durchlauf beim Start und wandert in Blöcke. ",{"tag":165,"children":179},[180],"-O0"," bis ",{"tag":165,"children":183},[184],"-O3"," steuern, wie hart die Engine kompiliert und CUDA-Graphen aufnimmt, mit ",{"tag":165,"children":187},[188],"-O2"," als Standard; ",{"tag":165,"children":191},[192],"--enforce-eager"," überspringt beides. Das Ansprechen braucht keinen neuen Client:",{"type":165,"code":195},"from openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"EMPTY\",\n    base_url=\"http:\u002F\u002Flocalhost:8000\u002Fv1\",\n)\n\nstream = client.chat.completions.create(\n    model=\"qwen3-8b\",\n    messages=[\n        {\"role\": \"system\", \"content\": \"Answer in one sentence.\"},\n        {\"role\": \"user\", \"content\": \"Why beat a contiguous KV cache?\"},\n    ],\n    max_tokens=200,\n    temperature=0,\n    stream=True,\n)\n\nfor chunk in stream:\n    print(chunk.choices[0].delta.content or \"\", end=\"\", flush=True)",{"type":197,"variant":198,"title":199,"body":200},"callout","note","Die Sampling-Defaults kommen vom Modell, nicht von dir",[201],[202,203,206,207,210],"Standardmäßig wendet der Server ",{"tag":165,"children":204},[205],"generation_config.json"," aus dem Hugging-Face-Repository an, sodass die vom Modellautor empfohlenen Sampling-Werte stillschweigend überschreiben, was die Anfrage verlangt. ",{"tag":165,"children":208},[209],"--generation-config vllm"," liefert die Defaults der Engine, und wer über Upgrades stabile Ausgaben braucht, pinnt das Sampling im Client.",{"type":120,"level":121,"id":97,"text":98},{"type":113,"content":213},[214],"Die berühmten Zahlen stammen aus dem Launch-Blog von 2023, nicht aus aktuellen Benchmarks: LLaMA-7B auf einer A10G und LLaMA-13B auf einer A100 40GB, mit aus dem ShareGPT-Datensatz gezogenen Anfragelängen, ergaben bis zu 24-mal den Durchsatz von Hugging Face Transformers und das 2,2- bis 3,5-Fache von TGI. Diese Werte sind inzwischen Geschichte statt Spezifikation, und das Belastbare daran ist die Speicherverschwendung, nicht die Vielfachen. Geändert hat sich, dass das Niveau gewandert ist: die ernstzunehmenden Wettbewerber haben alle Paged Caches und In-Flight-Batching übernommen. Die nützliche Frage ist deshalb nicht mehr, wer besser bündelt, sondern wer schneller tuned, patcht und Modelle ergänzt.",{"type":216,"head":217,"rows":224},"table",[218,220,222],[219],"Stellschraube",[221],"Was sie ändert",[223],"Wann sie drehen",[225,233,241,250,259,272],[226,229,231],[227],{"tag":165,"children":228},[172],[230],"Begrenzt den Kontext und damit den KV-Cache einer einzelnen Anfrage",[232],"Der längste reale Prompt liegt weit unter dem Modellmaximum",[234,237,239],[235],{"tag":165,"children":236},[176],[238],"Anteil der VRAM, der im Voraus für Gewichte und KV-Cache reserviert wird",[240],"Das Start-Log meldet wenige Blöcke, oder Anfragen werden verdrängt",[242,246,248],[243],{"tag":165,"children":244},[245],"max_num_batched_tokens",[247],"Prefill-Tokens pro Schritt: kleine Werte begünstigen die Inter-Token-Latenz, große die Zeit bis zum ersten Token",[249],"Interaktiver Chat gegenüber Offline-Batch-Arbeit",[251,255,257],[252],{"tag":165,"children":253},[254],"--tensor-parallel-size",[256],"Teilt die Gewichte auf mehrere GPUs und schafft so KV-Cache-Raum pro Karte",[258],"Das Modell passt nicht, oder der KV-Cache ist die engere Grenze",[260,265,270],[261,181,263],{"tag":165,"children":262},[180],{"tag":165,"children":264},[184],[266,267,269],"Kompilierung und CUDA-Graph-Aufnahme; ",{"tag":165,"children":268},[188]," ist der Standard",[271],"Die Startzeit zählt mehr als das Decode im Steady State",[273,276,278],[274],{"tag":165,"children":275},[192],[277],"Überspringt Kompilierung und Graph-Aufnahme vollständig",[279],"Entwicklungsschleifen oder die Messung, wie viel eines Bootvorgangs die Aufnahme ist",{"type":113,"content":281},[282],"Der Fehlermodus, der in der Produktion wirklich auftritt, ist Preemption. Wenn der KV-Cache nicht alle laufenden Sequenzen fasst, verdrängt vLLM Anfragen und berechnet sie aus dem Prompt neu, sobald Platz ist; im aggregierten Durchsatz fällt das kaum auf, in der Tail-Latenz dominiert es. V1 setzt standardmäßig auf Recompute statt Swap, weil Swap mehr kostete, das Gegenmittel ist also Kapazität und kein Flag.",{"type":197,"variant":284,"title":285,"body":286},"warn","Im Log erkennen",[287],[288,289,292,293,296,297,300],"Der Scheduler warnt mit ",{"tag":165,"children":290},[291],"Sequence group 0 is preempted by PreemptionMode.RECOMPUTE mode because there is not enough KV cache space",". Setze ",{"tag":165,"children":294},[295],"disable_log_stats=False",", um die kumulative Preemption-Zahl zu loggen, oder alarmiere auf ",{"tag":165,"children":298},[299],"vllm:kv_cache_usage_perc"," nahe 1,0. Utilisation oder Tensor-Parallelismus zu erhöhen hilft; sie zu weit zu erhöhen ist der Weg, auf dem ein Mitbewohner auf demselben Host zu einem Out-of-Memory-Kill wird.",{"type":120,"level":121,"id":100,"text":101},{"type":120,"level":303,"id":304,"text":305},3,"observability","Observability zuerst",{"type":113,"content":307},[308,309,312,313,316],"Die Engine stellt einen Prometheus-Endpunkt unter ",{"tag":165,"children":310},[311],"\u002Fmetrics"," mit dem Präfix ",{"tag":165,"children":314},[315],"vllm:"," bereit. Das Metrics-Design-Dokument ist ungewöhnlich explizit: Server-Level-Gauges sollen die Histogramme auf Request-Ebene erklären, und die Histogramme sind die Serien, auf die ein Operator alarmieren soll.",{"type":126,"ordered":127,"items":318},[319,324,329,334,342],[320,323],{"tag":165,"children":321},[322],"vllm:time_to_first_token_seconds"," — Prefill-Kosten, was ein Nutzer bei einem kalten Prompt spürt",[325,328],{"tag":165,"children":326},[327],"vllm:inter_token_latency_seconds"," — Decode-Geschwindigkeit, was ein Nutzer nach Beginn der Generierung spürt",[330,333],{"tag":165,"children":331},[332],"vllm:e2e_request_latency_seconds"," — die Serie, gegen die eine Timeout-Regel geschrieben gehört",[335,337,338,341],{"tag":165,"children":336},[299]," und ",{"tag":165,"children":339},[340],"vllm:num_requests_running"," — Kapazität; wenn beide gleichzeitig am Limit stehen, wächst die Warteschlange",[343,346,347,350],{"tag":165,"children":344},[345],"vllm:prefix_cache_queries"," gegen ",{"tag":165,"children":348},[349],"vllm:prefix_cache_hits"," — das Verhältnis zeigt, ob gemeinsame Prompts wirklich wiederverwendet werden und ob die Workload zur Engine passt",{"type":120,"level":303,"id":352,"text":353},"process-and-cpu","Prozesszahl und CPU",{"type":113,"content":355},[356],"Ein Aufbau mit vier GPUs ist kein einzelner Prozess. V1 betreibt einen API-Server-Prozess, einen Engine-Core-Prozess und einen Worker-Prozess pro GPU, also sechs insgesamt für einen Knoten mit Tensor-Parallelität 4; ein Data-Parallel-Aufbau kommt obendrauf mit einem Koordinator. Der Tuning-Guide nennt als Untergrenze 2 plus N physische Kerne für N GPUs, weil der Engine Core eine Busy-Loop fährt und unter CPU-Hunger sichtbar leidet.",{"type":197,"variant":358,"title":359,"body":360},"tip","Verhungerte CPU sieht aus wie eine langsame GPU",[361],[362],"Der Guide nennt Tokenisierung, Scheduler-Latenz und gestreamtes Detokenisieren als das, was zuerst leidet, mit geringerer GPU-Auslastung als Symptom. Mit aktiviertem Hyperthreading also das Doppelte von (2 + N) vCPUs einplanen.",{"type":120,"level":303,"id":364,"text":365},"security","Sicherheitslage",{"type":113,"content":367},[368,369,372,373,376],"Authentifizierung ist ein geteiltes Geheimnis. Das Flag ",{"tag":165,"children":370},[371],"--api-key"," oder die Umgebungsvariable ",{"tag":165,"children":374},[375],"VLLM_API_KEY"," schaltet eine Header-Prüfung ein und akzeptiert mehrere Schlüssel zugleich, damit sie rotiert werden können. Es gibt kein Nutzermodell, keine Quoten pro Mandant und keine Autorisierungsschicht; was den Port erreicht, darf die ganze GPU nutzen.",{"type":197,"variant":284,"title":378,"body":379},"Entwicklungs-Endpunkte warten auf einen Produktionsvorfall",[380],[381,382,385,386,389,390,337,393,396],"Mit ",{"tag":165,"children":383},[384],"VLLM_SERVER_DEV_MODE=1"," werden unter anderem ",{"tag":165,"children":387},[388],"\u002Fpause",", ",{"tag":165,"children":391},[392],"\u002Freset_prefix_cache",{"tag":165,"children":394},[395],"\u002Fcollective_rpc"," registriert, und die Dokumentation trägt selbst eine Sicherheitswarnung dazu. Den Port im vertrauenswürdigen Netz halten und davor Authentifizierung, Kontingente und Rate-Limiting setzen.",{"type":120,"level":121,"id":103,"text":104},{"type":113,"content":399},[400,401,404,405,408],"Zuerst drei Dinge. Es ist ein GPU-Server, keine Universal-Laufzeit: das dokumentierte Ziel ist Linux mit CUDA oder ROCm, ein reiner CPU-Host oder eine Apple-Silicon-Maschine bedeutet ein anderes Projekt und ein anderes Modellformat. Die Startzeit ist real, weil das voreingestellte Optimierungsniveau das Modell kompiliert und CUDA-Graphen aufnimmt, und ein kalter Container kann Minuten im Compiler verbringen, bevor das erste Token kommt. Und die API ist OpenAI-geformt, nicht OpenAI-vollständig: der Parameter ",{"tag":165,"children":402},[403],"suffix"," wird nicht unterstützt, ",{"tag":165,"children":406},[407],"user"," wird ignoriert, und parallele Tool-Calls sind modellabhängig und bestenfalls vorhanden.",{"type":216,"head":410,"rows":419},[411,413,415,417],[412],"Engine",[414],"Lizenz",[416],"Wo sie gewinnt",[418],"Was sie kostet",[420,429,437,446],[421,424,425,427],[422],{"tag":131,"children":423},[23],[133],[426],"Breite: die meisten Architekturen, die weiteste Menge an Quantisierungen und Hardware-Zielen, eine API für Text, Embeddings, Rerank, Sprache und strukturiertes Output",[428],"Kompilierung und Graph-Aufnahme bei jedem Boot, ein Modell pro Server und eine Busy-Loop, die CPU dahinter braucht",[430,432,433,435],[431],"SGLang",[133],[434],"Radix-artiges Prefix-Sharing und Wiederverwendung von Zustand über Turns, passend zu Agent- und Retrieval-Verkehr mit immer demselben langen Kontext",[436],"Kleinerer Modellzoo und dünnere Serving-Fläche außerhalb von Chat-Completions",[438,440,442,444],[439],"TensorRT-LLM",[441],"Apache-2.0, nur NVIDIA-Stack",[443],"Spitzenwerte auf den neuesten NVIDIA-Teilen, FP4- und FP8-Kernels, native Integration mit Dynamo und Triton",[445],"Nur NVIDIA und ein Neubau, sobald sich Modell, Quantisierung oder GPU-Generation ändern",[447,449,451,453],[448],"llama.cpp",[450],"MIT",[452],"CPU, Apple Silicon und Edge-Hardware, GGUF-Quantisierung, eine einzelne Binärdatei ohne Python-Laufzeit",[454],"Ein anderes Modellformat, eine schwächere Geschichte beim Batching, keine vergleichbare Fläche für Embeddings oder Rerank",{"type":113,"content":456},[457],"Für die meisten Teams ist der wahre Vergleich die erste Zeile gegen die zweite. vLLM und SGLang lösen dasselbe Problem mit denselben Primitive, beide Apache-2.0, beide OpenAI-kompatibel, und beide bedienen einen normalen Chat-Workload gut. Der Prefix-Baum von SGLang passt besser, wenn immer wieder derselbe lange Kontext getroffen wird; Modellabdeckung und Quantisierungsmatrix von vLLM passen besser, wenn neue Checkpoints schneller ankommen als sich Workloads wiederholen.",{"type":120,"level":121,"id":106,"text":107},{"type":113,"content":460},[461],"vLLM ist das Werkzeug der Wahl per Voreinstellung, und der Grund ist keine rohe Geschwindigkeit, sondern Fläche: die meisten Modelle, die meisten Quantisierungsformate, die meisten Hardware-Ziele und eine API, die Completions, Chat, Embeddings, Rerank, Sprache und strukturiertes Output abdeckt. Die Kosten sind real und meist mühelos zu beheben. Die Startzeit ist einstellbar, Preemption ist ein Kapazitätsproblem und eine verhungerte CPU ist ein Deployment-Fehler. Keines davon ist ein Grund, etwas anderes zu wählen.",{"type":126,"ordered":155,"items":463},[464,466,468,470,472,474],[465],"Wählen, wenn offene Gewichte auf NVIDIA- oder AMD-GPUs serviert werden und die Workload gebündelt ist: viele gleichzeitige Anfragen statt einer nach der anderen.",[467],"Wählen, wenn der Modellwechsel häufig ist, denn ein neuer Checkpoint läuft meist vor der Unterstützung der Alternativen.",[469],"Wählen, wenn der umgebende Stack schon die OpenAI-API spricht, denn die Migration ist eine Base-URL.",[471],"Nicht wählen für Laptop, Edge-Box oder Single-User-Werkzeug; llama.cpp oder eine MLX-Laufzeitumgebung erledigt das mit einem Bruchteil des Speichers.",[473],"Nicht wählen, wenn ein Modell auf einer NVIDIA-Generation festgeschrieben ist und Spitzen-Token pro Sekunde das einzige Ziel ist, denn TensorRT-LLM gewinnt diesen Handel um den Preis der Bindung.",[475],"SGLang vor der Festlegung benchmarken, wenn der Verkehr agentisch oder retrieval-lastig ist und Kontext stark wiederverwendet wird; die beiden liegen so nah beieinander, dass meist entscheidet, welches um drei Uhr nachts debugbar ist.",{"type":197,"variant":198,"title":477,"body":478},"Der opinionierte Teil",[479],[480],"Das Argument für vLLM ist still zu einem Argument über Breite statt Geschwindigkeit geworden, und die Projekte, die es überholen, werden es nicht beim Batching gewinnen. Sie werden gewinnen, indem sie in einer Workload besser sind. Teams sind meist besser bedient mit einer allgemeinen Engine plus einem Spezialisten als mit einer Engine pro Workload, und genau das ist das Argument für die Standardisierung auf vLLM, auch wenn ein Rivale für eine einzelne Verkehrsform messbar schneller ist.",{"type":120,"level":121,"id":109,"text":110},{"type":126,"ordered":155,"items":483},[484,489,493,497,501,505,509,513,517],[485],{"tag":486,"href":28,"children":487},"a",[488],"vLLM-Dokumentation",[490],{"tag":486,"href":31,"children":491},[492],"Optimierung und Tuning der V1-Engine",[494],{"tag":486,"href":34,"children":495},[496],"Architekturübersicht und Prozesslayout von V1",[498],{"tag":486,"href":37,"children":499},[500],"Metrics-Design",[502],{"tag":486,"href":40,"children":503},[504],"Automatisches Prefix-Caching und seine dokumentierten Grenzen",[506],{"tag":486,"href":43,"children":507},[508],"Online-Serving und die HTTP-API-Fläche",[510],{"tag":486,"href":46,"children":511},[512],"Inside vLLM: Anatomie eines hochdurchsatzigen Inferenzsystems",[514],{"tag":486,"href":49,"children":515},[516],"vLLM: einfaches, schnelles und billiges LLM-Serving mit PagedAttention",[518],{"tag":486,"href":52,"children":519},[520],"Release-Verlauf",[522,579,647,708],{"slug":523,"published":524,"minutes":525,"category":7,"tags":526,"keywords":532,"about":546,"sources":554,"cover":573,"og":574,"expertise":55,"locales":575,"lang":58,"title":576,"description":577,"coverAlt":578},"deepseek-v4-1-flash-1017","2026-10-17",15,[527,528,529,530,531],"DeepSeek","Open-weight models","KV cache","Mixture of experts","LLM cost",[533,534,535,536,537,538,539,540,541,542,543,544,545],"DeepSeek V4.1 Flash 1017","DeepSeek V4.1 Flash","Causal Encoder-Decoder","Compressed Sparse Attention 2","CSA2","FP4 KV cache","KV cache compression","SWA Bounded Replay","Engram conditional memory","DSpark speculative decoding","DeepSeek pricing","DeepSWE benchmark","open-weight coding model",[547,549,551],{"name":527,"url":548},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDeepSeek",{"name":530,"url":550},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMixture_of_experts",{"name":552,"url":553},"Transformer (deep learning architecture)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransformer_(deep_learning_architecture)",[555,558,561,564,567,570],{"title":556,"url":557},"DeepSeek-AI: DeepSeek-V4.1-Flash: Pushing the Limits of KV Cache Compression (arXiv:2609.19969)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2609.19969",{"title":559,"url":560},"Hugging Face: deepseek-ai\u002FDeepSeek-V4.1-Flash-1017 model card","https:\u002F\u002Fhuggingface.co\u002Fdeepseek-ai\u002FDeepSeek-V4.1-Flash-1017",{"title":562,"url":563},"OpenRouter: DeepSeek V4.1 Flash 1017, pricing and providers","https:\u002F\u002Fopenrouter.ai\u002Fdeepseek\u002Fdeepseek-v4.1-flash-1017",{"title":565,"url":566},"The Decoder: Deepseek V4.1 Flash 1017 beats larger rivals in agentic tasks while once again massively cutting per-task costs","https:\u002F\u002Fthe-decoder.com\u002Fdeepseek-v4-1-flash-1017-beats-larger-rivals-in-agentic-tasks-while-once-again-massively-cutting-per-task-costs\u002F",{"title":568,"url":569},"AI Weekly: DeepSeek opens V4.1-Flash-1017 weights and $0.75 Search API","https:\u002F\u002Faiweekly.co\u002Falerts\u002Fdeepseek-opens-v41-flash-1017-weights-and-075-search-api",{"title":571,"url":572},"DeepSeek on X: DeepSeek-V4.1-Flash-1017 announcement","https:\u002F\u002Fx.com\u002Fdeepseek_ai\u002Fstatus\u002F2111375640717033777","\u002Fimages\u002Fblog\u002Fdeepseek-v4-1-flash-1017\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fdeepseek-v4-1-flash-1017\u002Fog.jpg",[57,58,59],"DeepSeek V4.1 Flash 1017: 890 Byte KV-Cache pro Token, und was ein Agent davon hat","Technischer Deep Dive zu DeepSeek V4.1 Flash 1017: Encoder-Decoder-Aufteilung, CSA2-Cache-Sharing, FP4-KV-Cache, Benchmarks und die echten Kosten pro Agenten-Task.","Links ein hoher Stapel dünner Karten, ein Pfeil, rechts dieselben Karten auf ein Viertel der Höhe zusammengepresst.",{"slug":580,"published":524,"minutes":581,"category":7,"tags":582,"keywords":588,"about":600,"sources":610,"cover":641,"og":642,"expertise":55,"locales":643,"lang":58,"title":644,"description":645,"coverAlt":646},"llm-rate-limits-retries-provider-fallback",10,[583,584,585,586,587],"Rate limits","Retries","Fallback","Reliability","LLM gateway",[589,590,591,592,593,594,595,596,597,598,599],"llm rate limit handling","429 too many requests llm api","exponential backoff with jitter","anthropic 529 overloaded error","openai rate limit retry","llm provider fallback","litellm fallbacks","retry-after header","llm circuit breaker","multi provider llm failover","claude api rate limits",[601,604,607],{"name":602,"url":603},"Token bucket","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FToken_bucket",{"name":605,"url":606},"Exponential backoff","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FExponential_backoff",{"name":608,"url":609},"Circuit breaker design pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCircuit_breaker_design_pattern",[611,614,617,620,623,626,629,632,635,638],{"title":612,"url":613},"Claude Platform Docs: Rate limits","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Frate-limits",{"title":615,"url":616},"Claude Platform Docs: API errors","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Ferrors",{"title":618,"url":619},"OpenAI API Docs: Rate limits","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Frate-limits",{"title":621,"url":622},"AWS Builders Library: Timeouts, retries and backoff with jitter","https:\u002F\u002Fbuilder.aws.com\u002Fcontent\u002F3EumjoZascWd1oZiEgL8ORlv3qE\u002Ftimeouts-retries-and-backoff-with-jitter",{"title":624,"url":625},"MDN: Retry-After header","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FRetry-After",{"title":627,"url":628},"Martin Fowler: Circuit Breaker (2014)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FCircuitBreaker.html",{"title":630,"url":631},"LiteLLM Docs: Router, retries and cooldowns","https:\u002F\u002Fdocs.litellm.ai\u002Fdocs\u002Frouting",{"title":633,"url":634},"LiteLLM Docs: Proxy fallbacks and reliability","https:\u002F\u002Fdocs.litellm.ai\u002Fdocs\u002Fproxy\u002Freliability",{"title":636,"url":637},"OpenRouter Docs: Model fallbacks","https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fguides\u002Frouting\u002Fmodel-fallbacks",{"title":639,"url":640},"AI SDK Docs: Settings (maxRetries, timeout)","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Fsettings","\u002Fimages\u002Fblog\u002Fllm-rate-limits-retries-provider-fallback\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-rate-limits-retries-provider-fallback\u002Fog.jpg",[57,58,59],"LLM-Rate-Limits in Produktion: Retries, Backoff und Provider-Fallback","Wie LLM-Rate-Limits funktionieren, welche Fehler man wiederholt, Backoff mit Jitter, Retries in nur einer Schicht und Fallback-Ketten ohne kaputte Ausgaben.","Kleine Quadrate steigen drei Stufen zu einem breiten Rechteck, dahinter zwei weitere in einer Reihe.",{"slug":648,"published":524,"minutes":649,"category":7,"tags":650,"keywords":656,"about":667,"sources":677,"cover":702,"og":703,"expertise":55,"locales":704,"lang":58,"title":705,"description":706,"coverAlt":707},"prompt-versioning-management",8,[651,652,653,654,655],"Prompt management","Versioning","LLMOps","Evals","Langfuse",[657,658,659,660,661,662,663,664,665,666],"prompt versioning","prompt management","prompt registry","version control for prompts","langfuse prompt management","mlflow prompt registry","prompts in git","openai prompt object deprecation","prompt rollback production","prompt ci evaluation",[668,671,674],{"name":669,"url":670},"Prompt engineering","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_engineering",{"name":672,"url":673},"Version control","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVersion_control",{"name":675,"url":676},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[678,681,684,687,690,693,696,699],{"title":679,"url":680},"OpenAI API Docs: Migrate from prompt objects","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fprompting\u002Fmigrate-from-prompt-object",{"title":682,"url":683},"OpenAI API Docs: Prompt engineering (reusable prompts deprecation note)","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fprompt-engineering",{"title":685,"url":686},"Langfuse Docs: Prompt version control","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Fprompt-version-control",{"title":688,"url":689},"Langfuse Docs: Prompt caching in the SDKs","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Fcaching",{"title":691,"url":692},"Langfuse Docs: Link prompts to traces","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Flink-to-traces",{"title":694,"url":695},"MLflow Docs: Prompt Registry","https:\u002F\u002Fmlflow.org\u002Fdocs\u002Flatest\u002Fgenai\u002Fprompt-registry\u002F",{"title":697,"url":698},"Promptfoo Docs: GitHub Action","https:\u002F\u002Fwww.promptfoo.dev\u002Fdocs\u002Fintegrations\u002Fgithub-action\u002F",{"title":700,"url":701},"Claude Platform Docs: Prompt caching","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fprompt-caching","\u002Fimages\u002Fblog\u002Fprompt-versioning-management\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fprompt-versioning-management\u002Fog.jpg",[57,58,59],"Prompt-Versionierung in Produktion: Git, Registries, Labels und Rollbacks","Prompts in Produktion versionieren: was zu einer Version gehört, Git oder Prompt-Registry, Labels und Rollbacks, Eval-Gates in CI und Folgen für Caches.","Fünf aufrechte Karten in einer Reihe, die dritte schwenkt an einem Bogenpfeil zurück, ein Tor vor der letzten.",{"slug":709,"published":524,"minutes":710,"category":7,"tags":711,"keywords":716,"about":727,"sources":737,"cover":758,"og":759,"expertise":55,"locales":760,"lang":58,"title":761,"description":762,"coverAlt":763},"llm-batch-api-offline-workloads",9,[712,713,653,714,715],"Batch API","Cost","Prompt caching","Data pipelines",[717,718,719,720,721,722,723,724,725,726],"llm batch api","anthropic message batches api","openai batch api","gemini batch mode","batch inference llm cost","batch api 50 percent discount","openai flex processing","bedrock batch inference","llm offline processing","batch api prompt caching",[728,731,734],{"name":729,"url":730},"Batch processing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBatch_processing",{"name":732,"url":733},"JSON Lines","https:\u002F\u002Fjsonlines.org\u002F",{"name":735,"url":736},"Large language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model",[738,741,743,744,747,750,752,755],{"title":739,"url":740},"Claude Platform Docs: Batch processing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fbatch-processing",{"title":742,"url":613},"Claude Platform Docs: Rate limits (Message Batches API)",{"title":700,"url":701},{"title":745,"url":746},"OpenAI API Docs: Batch API","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fbatch",{"title":748,"url":749},"OpenAI API Docs: Flex processing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fflex-processing",{"title":751,"url":619},"OpenAI API Docs: Rate limits (batch queue limits)",{"title":753,"url":754},"Google AI for Developers: Gemini Batch API","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fbatch-api",{"title":756,"url":757},"Amazon Bedrock User Guide: Batch inference","https:\u002F\u002Fdocs.aws.amazon.com\u002Fbedrock\u002Flatest\u002Fuserguide\u002Fbatch-inference.html","\u002Fimages\u002Fblog\u002Fllm-batch-api-offline-workloads\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-batch-api-offline-workloads\u002Fog.jpg",[57,58,59],"LLM-Batch-APIs: Inferenz zum halben Preis für Arbeit, die warten kann","Wann sich die Batch-APIs von Anthropic, OpenAI und Gemini lohnen, wie Limits, Zuordnung und Fehler funktionieren und wie sich Rabatte mit Caching addieren.","Eine breite Kiste mit acht kleinen Quadraten, Zulauf von links, ein langer Pfeil kehrt zurück.",1792261158005]