vLLM-Architekturüberblick
In einem Satz
vLLM ist eine High-Throughput-LLM-Inferenz-Engine, v0.25 ist auf die v1-Architektur umgestellt: LLMEngine ist eine dünne Hülle, der eigentliche Kern ist EngineCore (kann im ZMQ-Hintergrundprozess EngineCoreProc laufen) und wird über EngineCoreClient (Inproc/MP/AsyncMP) nach außen geführt; zur Laufzeit macht Scheduler die waiting/running-Warteschlangen und Continuous Batching (continuous batching) sowie Preemption, GPUModelRunner.execute_model führt auf den Workern den Forward-Pass aus, KVCacheManager + BlockPool implementieren PagedAttention + Prefix-Caching (prefix caching), AttentionBackend abstrahiert Attention über mehrere Backends hinweg.
Schichtung
Jede Schicht in einem Satz
- Start und Konfiguration: EngineArgs parst alle Startparameter und deriviert VllmConfig; LLM ist die Offline-Inferenzklasse, AsyncLLM der asynchrone Einstiegspunkt.
- Engine-Hauptlinie v1: LLMEngine ist eine dünne Hülle, EngineCore ist der eigentliche Kern (kombiniert scheduler+worker), EngineCoreProc verpackt ihn als ZMQ-Hintergrundprozess.
- EngineCoreClient: InprocClient (in-process) / MPClient (multiprocess) / AsyncMPClient, einheitlich nach oben mit add_request/abort-Schnittstellen.
- Scheduler: Scheduler verwaltet waiting/running-Warteschlangen, schedule entscheidet, welche Requests in diesem Schritt laufen, unterstützt Preemption und prefill throttle.
- Executor: Executor abstrahiert das Ausführungs-Backend, UniProc/Multiproc/Ray in drei Ausprägungen, verantwortlich für Worker-Start und verteilte Umgebung.
- Worker und ModelRunner: Worker hält Modell und KV-Cache (KV cache), GPUModelRunner.execute_model führt einen Forward-Pass aus, ubatch macht Mikrobatches, cudagraph beschleunigt.
- Modellladung: DefaultModelLoader lädt Gewichte, TP lineare Schichten (ColumnParallel/QKVParallel/RowParallel) splitten, quant-Schichten handhaben Quantisierung.
- KV-Cache: KVCacheManager verwaltet Block-Lebenszyklus, KVCacheCoordinator (Hybrid/Unitary/NoPrefix) definiert Strategie, BlockPool macht Allokation + Prefix-Cache-Index.
- Attention-Backends: AttentionBackend abstrahiert, FlashAttention/FlashInfer/Triton/MLA/Mamba als mehrere Backends umschaltbar.
- Sampling: Sampler forward/sample wandelt logits in Token, LogitsProcessor macht Vorverarbeitung.
- Prefix-Cache und Distributed: Prefix-Cache trifft und wiederverwendet KV-Blöcke, GroupCoordinator verwaltet TP/PP-Kommunikation, OpenAI serving legt HTTP-API offen.
Schichtungsmotivation
vLLM entkoppelt vollständig: «wie konfigurieren» (engine args), «wie schedulen» (scheduler), «wie ausführen» (executor+worker), «wie VRAM verwalten» (KV cache), «wie Attention berechnen» (attention backend), «wie kommunizieren» (distributed), «wie nach außen» (serving). So berührt ein Wechsel des Attention-Backends nicht die Schedulung, ein Wechsel des Executor-Backends (single-GPU/Ray) nicht die KV-Cache-Logik, und das Hinzufügen von Prefix-Cache erfordert keine Modellcodeänderung. EngineCore ist der einzige Knotenpunkt, alle Requests fließen durch ihn.
Häufige Missverständnisse
- «vLLMs Kern ist PagedAttention» — PagedAttention ist die Schlüsseltechnologie für das KV-Cache-Management, aber der Kern der v1-Architektur ist die Triade EngineCore + Scheduler + Continuous Batching (continuous batching); PagedAttention ist lediglich die Implementierung auf der KV-Cache-Schicht.
- «LLMEngine ist die Engine» — in v1 ist LLMEngine eine dünne Hülle, die eigentliche Arbeit leistet EngineCore; LLMEngine macht hauptsächlich Parametervalidierung und Request-Weiterleitung.
- «Continuous Batching und PagedAttention seien dasselbe» — nein. Continuous Batching ist eine Scheduling-Strategie (in jedem Schritt können Requests hinzukommen/entfernt werden), PagedAttention ist VRAM-Verwaltung (blockweiser KV-Cache); beide arbeiten zusammen, sind aber unabhängig.
Empfohlene Lesereihenfolge
Zuerst Start und Konfiguration, dann LLMEngine und EngineCore, danach in der Reihenfolge Scheduler → Executor → Worker und ModelRunner → KV-Cache → Attention → Sampling → Distributed und Serving weiterlesen.
Siehe offizielle Dokumentation: vLLM-Dokumentation · Design-Dokumente · GitHub.