Skip to content

vLLM アーキテクチャ概要

源码版本v0.25.1

一言で

vLLM は高スループットな LLM 推論エンジンで、v0.25 では v1 アーキテクチャに移行済み。LLMEngine は薄い殻で、真の核心は EngineCore(ZMQ バックグラウンドプロセス EngineCoreProc として実行可能)であり、EngineCoreClient(Inproc/MP/AsyncMP)経由で外部に公開される。実行時は Scheduler が waiting/running キューと連続バッチング (continuous batching)・プリエンプションを管理し、GPUModelRunner.execute_model が Worker 上でフォワードを走らせ、KVCacheManager + BlockPool が PagedAttention とプレフィックスキャッシュ (prefix caching) を実装、AttentionBackend がマルチバックエンドのアテンションを抽象化する。

階層構造

各層を一言で

  • 起動と設定:EngineArgs がすべての起動パラメータを解析して VllmConfig を派生。LLM はオフライン推論クラス、AsyncLLM は非同期エントリ。
  • エンジン主線 v1:LLMEngine は薄い殻、EngineCore こそが核心(scheduler+worker を組合せ)、EngineCoreProc がそれを ZMQ バックグラウンドプロセスに包む。
  • EngineCoreClient:InprocClient(同プロセス)/MPClient(マルチプロセス)/AsyncMPClient、上位に add_request/abort などのインターフェースを統一的に公開。
  • スケジューラ (scheduler):Scheduler が waiting/running キューを管理、schedule がこのステップでどのリクエストを走らせるか決定、プリエンプションと prefill throttle をサポート。
  • 実行器 (executor):Executor が実行バックエンドを抽象化、UniProc/Multiproc/Ray の三種類、Worker の起動と分散環境を担う。
  • Worker と ModelRunner:Worker はモデルと KV cache を保持、GPUModelRunner.execute_model が一回のフォワードを走らせ、ubatch がマイクロバッチ、cudagraph が高速化。
  • モデル読み込み:DefaultModelLoader が重みを読み込み、TP 線形層(ColumnParallel/QKVParallel/RowParallel)が分割、quant 層が量子化を処理。
  • KV Cache:KVCacheManager が block ライフサイクルを管理、KVCacheCoordinator(Hybrid/Unitary/NoPrefix)が戦略を決定、BlockPool が割り当て+prefix cache インデックスを担う。
  • Attention バックエンド:AttentionBackend を抽象化、FlashAttention/FlashInfer/Triton/MLA/Mamba のマルチバックエンドを切替可能。
  • サンプリング:Sampler forward/sample が logits を token に変換、LogitsProcessor が前処理。
  • Prefix Cache と分散:prefix cache がヒット時に KV block を再利用、GroupCoordinator が TP/PP 通信を管理、OpenAI serving が HTTP API を公開。

階層化の動機

vLLM は「どう設定するか」(engine args)、「どうスケジュールするか」(scheduler)、「どう実行するか」(executor+worker)、「どう VRAM を管理するか」(KV cache)、「どうアテンションを計算するか」(attention backend)、「どう通信するか」(distributed)、「どう外部に公開するか」(serving) を完全に疎結合にしている。これによりアテンションバックエンドを変えてもスケジューリングに影響せず、実行バックエンド(単一 GPU/Ray)を変えても KV cache ロジックに影響せず、prefix cache を追加してもモデルコードを変更しなくて済む。EngineCore は唯一の中核であり、すべてのリクエストがここを経由して流れる。

よくある誤解

  • 「vLLM の核心は PagedAttention」——PagedAttention は KV cache 管理のキー技術だが、v1 アーキテクチャの核心は EngineCore + Scheduler + 連続バッチングの三件セットであり、PagedAttention は KV cache 層の実装に過ぎない。
  • 「LLMEngine がそのままエンジン」——v1 では LLMEngine は薄い殻で、本当に仕事をするのは EngineCore であり、LLMEngine は主にパラメータ検証とリクエスト転送を行う。
  • 「continuous batching と PagedAttention は同じもの」——違う。continuous batching はスケジューリング戦略(各ステップでリクエストを追加/削除可能)、PagedAttention はメモリ管理(ブロック状 KV cache)であり、両者は連携するが独立している。

推薦読書順序

まず 起動と設定 を読み、次に LLMEngineEngineCore を読み、その後 スケジューラ実行器Worker と ModelRunnerKV CacheAttentionサンプリング分散と serving の順で下へ進む。

公式資料: vLLM ドキュメント · 設計ドキュメント · GitHub