Skip to content

vLLM 架构总览

源码版本v0.25.1

一句话

vLLM 是一个高吞吐 LLM 推理引擎,v0.25 已切到 v1 架构:LLMEngine 是薄壳,真正核心是 EngineCore(可跑在 ZMQ 后台进程 EngineCoreProc 里),通过 EngineCoreClient(Inproc/MP/AsyncMP)对外暴露;运行时 Scheduler 做 waiting/running 队列与连续批处理、抢占,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 维护 waiting/running 队列,schedule 决定这一步跑哪些请求,支持抢占和 prefill throttle。
  • 执行器: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)、「怎么管显存」(KV cache)、「怎么算注意力」(attention backend)、「怎么通信」(distributed)、「怎么对外」(serving)完全解耦。这样换 attention 后端不影响调度,换执行后端(单卡/Ray)不影响 KV cache 逻辑,加 prefix cache 不改模型代码。EngineCore 是唯一的中枢,所有请求都经它流转。

常见误读

  • 「vLLM 的核心是 PagedAttention」——PagedAttention 是 KV cache 管理的关键技术,但 v1 架构的核心是 EngineCore + Scheduler + 连续批处理三件套,PagedAttention 只是 KV cache 那一层的实现。
  • 「LLMEngine 就是引擎」——v1 里 LLMEngine 是薄壳,真正干活的是 EngineCore,LLMEngine 主要做参数校验和 request 转发。
  • 「continuous batching 和 PagedAttention 是一回事」——不是。continuous batching 是调度策略(每步都能加入/移除请求),PagedAttention 是显存管理(块状 KV cache),两者配合但独立。

推荐阅读顺序

先看 启动与配置,再看 LLMEngineEngineCore,然后按 调度器执行器Worker 与 ModelRunnerKV CacheAttention采样分布式与 serving 的顺序往下。

对照官方资料:vLLM 文档 · 设计文档 · GitHub