Skip to content

vLLM 架构设计与核心原理

vLLM 是当前最流行的大语言模型推理引擎之一,其核心创新在于 PagedAttention 机制和 Continuous Batching 调度策略,显著提升了 GPU 利用率和推理吞吐量。

vLLM架构总览

整体架构

vLLM 的架构可以分为以下几个核心模块:

  • LLMEngine:顶层推理引擎,协调调度器、块管理器和模型执行器
  • Scheduler:请求调度器,决定每步哪些请求参与计算
  • BlockManager:KV Cache 块管理器,基于虚拟内存思想管理显存
  • ModelExecutor:模型执行器,负责实际的 GPU 计算前向传播
  • Worker:分布式工作进程,每个 GPU 对应一个 Worker
python
from vllm import LLM, SamplingParams

# 初始化推理引擎
llm = LLM(
    model="meta-llama/Llama-2-7b-hf",
    tensor_parallel_size=2,
    gpu_memory_utilization=0.9,
    max_model_len=4096,
)

# 配置采样参数
sampling_params = SamplingParams(
    temperature=0.8,
    top_p=0.95,
    max_tokens=512,
)

# 批量推理
outputs = llm.generate(["你好,请介绍一下自己"], sampling_params)
for output in outputs:
    print(output.outputs[0].text)

请求处理流程

vLLM 的请求处理遵循以下流程:

  1. 请求通过 API Server 进入等待队列
  2. Scheduler 根据显存预算从队列中选取请求
  3. BlockManager 为新请求分配 KV Cache 块
  4. ModelExecutor 执行模型前向计算
  5. 生成的 Token 写入对应请求的输出流
  6. 完成的请求释放 KV Cache 块

核心优势

vLLM 的 PagedAttention 将 KV Cache 按块管理,避免了传统方案中预分配固定大小显存导致的碎片化问题,显存利用率可提升至 90% 以上。

异步执行模型

vLLM 采用了异步执行架构,CPU 上的调度逻辑与 GPU 上的计算可以重叠执行:

  • Step 1:Scheduler 在 CPU 上准备下一批次的输入张量
  • Step 2:GPU 执行当前批次的前向计算
  • Step 3:两者通过双缓冲机制实现流水线化

这种设计使得调度开销几乎可以完全隐藏在 GPU 计算时间中。

分布式推理支持

vLLM 原生支持张量并行(Tensor Parallelism),通过 NCCL 实现多 GPU 间的通信:

python
# 张量并行推理启动
from vllm import LLM

llm = LLM(
    model="meta-llama/Llama-2-70b-hf",
    tensor_parallel_size=4,  # 4卡并行
    pipeline_parallel_size=1,
)

注意

张量并行度需要与模型的注意力头数对齐。例如 Llama-2-70B 有 64 个注意力头,TP=4 时每个 GPU 处理 16 个头,这是合法的配置。

与传统方案对比

特性vLLMHuggingFace TGITriton
KV Cache 管理PagedAttention连续分配连续分配
批处理策略Continuous BatchingDynamic BatchingDynamic Batching
显存利用率~90%~60-70%~60-70%
张量并行原生支持原生支持需额外配置

相关资源

最近更新