跳转至

主流推理框架对比(vLLM / SGLang / llama.cpp / TensorRT-LLM)

面试高频考点

  • vLLM 的 PagedAttention 和 Continuous Batching 分别解决什么问题?
  • SGLang 的 RadixAttention 相比 vLLM 的前缀缓存有什么优势?
  • llama.cpp 的 GGUF 格式是什么?Q4_K_M 代表什么含义?
  • 生产服务选 vLLM 还是 SGLang?边缘部署用什么?
  • 什么是 Disaggregated Prefill/Decode?解决什么问题?

一、vLLM

细化理解: vLLM 的核心价值是高吞吐在线服务,代表技术是 PagedAttention。它把 KV Cache 按块管理,减少碎片并支持更灵活的请求调度,适合多用户并发和 OpenAI-compatible API 部署。选型时通常看模型支持、吞吐、显存利用率、LoRA 支持和运维复杂度。

vLLM 是加州大学伯克利分校开发的高性能 LLM 推理框架,以 PagedAttention 为核心创新,是目前生产环境中最广泛使用的推理框架。

GitHubgithub.com/vllm-project/vllm

核心特性

① PagedAttention(核心创新)

借鉴操作系统虚拟内存分页,将 KV Cache 切成固定大小的物理 Block,通过 Block Table 维护映射,按需分配,彻底消除内存碎片:

传统 KV Cache:为每个请求预分配 max_seq_len 的连续显存
              → 未用完的空间全部浪费(内部碎片)

PagedAttention:KV Cache 切成 Block(默认 16 tokens/block)
               → 按需分配 Block,Copy-on-Write 实现 Prefix Sharing
               → 显存利用率接近 100%

② Continuous Batching

每个解码步骤动态调度:完成的序列立即退出,新请求即时插入,GPU 始终满负荷运转。

③ Chunked Prefill

将长 prompt 的预填充(prefill)拆分成小 chunk 与解码步骤交错执行,降低首 token 延迟(TTFT)同时保持吞吐量。

④ Multi-LoRA Serving

单个 vLLM 实例可同时服务多个 LoRA adapter,adapter 动态加载卸载,无需为每个 LoRA 启动独立服务。

快速启动

pip install vllm

# 启动 OpenAI 兼容 API 服务
python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen3-8B \
  --tensor-parallel-size 2 \
  --max-model-len 32768 \
  --enable-prefix-caching \
  --quantization fp8
from vllm import LLM, SamplingParams

llm = LLM(model="deepseek-ai/DeepSeek-V3", tensor_parallel_size=4)
outputs = llm.generate(["解释 Transformer 架构"], SamplingParams(temperature=0.7))

二、SGLang

SGLang(Structured Generation Language)由斯坦福大学开发,在结构化输出和 KV Cache 复用上有独特优势,2025 年在多项吞吐量测试中超越 vLLM。

GitHubgithub.com/sgl-project/sglang

核心创新

① RadixAttention(基数树 KV 复用)

vLLM 的前缀缓存只能复用完全相同的前缀。SGLang 用基数树(Radix Tree)管理 KV Cache,实现任意公共前缀的复用:

多个请求共享的 KV Cache 示意:

"你是一个专业助手。" → [KV Block A]  ← 多请求共享
├─ "帮我写代码:..." → [KV Block B]
└─ "帮我翻译:..."   → [KV Block C]

基数树自动识别公共前缀,Block A 只计算一次

② Compressed FSM(压缩有限状态机)

强制模型输出符合特定格式(JSON schema、正则表达式)时,传统方法需要逐 token 验证状态机,开销大。SGLang 预先编译 FSM 并压缩跳过无效 token,大幅提升结构化输出速度。

import sglang as sgl

@sgl.function
def extract_info(s, text):
    s += sgl.user(f"从以下文本提取信息:{text}")
    s += sgl.assistant(sgl.gen("result", max_tokens=200,
                               regex=r'\{"name": ".+", "age": \d+\}'))

③ Overlap Scheduling

CPU 调度与 GPU 计算重叠执行,消除调度等待开销,在高并发场景下比 vLLM 吞吐量高 10-40%。

④ DeepSeek 专项优化

SGLang 对 DeepSeek-V3/R1 的 MoE 路由、MLA 注意力进行了深度优化,是运行 DeepSeek 系列模型的首选框架。


三、llama.cpp

llama.cpp 是 Georgi Gerganov 开发的纯 C++ 推理引擎,专注于消费级硬件边缘部署,支持 CPU 推理。

GitHubgithub.com/ggml-org/llama.cpp

GGUF 格式

GGUF(GPT-Generated Unified Format)是 llama.cpp 的统一模型格式,将模型权重、量化参数、词表、架构配置打包在单个文件中:

model.gguf
├── 文件头(magic, version, metadata)
├── 模型元数据(架构、上下文长度、词表等)
├── 张量信息(名称、形状、量化类型)
└── 量化权重数据

量化级别对比

量化格式 精度 7B 模型大小 速度 质量损失
F32 全精度 ~28 GB
F16 半精度 ~14 GB 极小
Q8_0 8-bit ~7.7 GB 较快 极小
Q4_K_M 4-bit ~4.1 GB
Q4_K_S 4-bit 小 ~3.8 GB
Q3_K_M 3-bit ~3.1 GB 中等
Q2_K 2-bit ~2.2 GB 最快 较大

Q4_K_M 命名解析:Q=量化,4=4bit,K=K-Quant(分组量化,不同重要性的权重用不同精度),M=Medium(中等质量,均衡选择)。日常推荐 Q4_K_M,在 4GB 显存/内存的设备上运行 7B 模型的最佳平衡点。

跨平台后端

# CUDA(NVIDIA)
cmake -B build -DLLAMA_CUDA=ON && cmake --build build

# Metal(Apple Silicon)
cmake -B build -DLLAMA_METAL=ON && cmake --build build

# CPU only(任何设备)
cmake -B build && cmake --build build

# 运行
./build/bin/llama-cli -m model.Q4_K_M.gguf -p "你好" -n 200

四、TensorRT-LLM(NVIDIA 官方)

TensorRT-LLM 是 NVIDIA 官方推理框架,专为 NVIDIA GPU 深度优化。

GitHubgithub.com/NVIDIA/TensorRT-LLM

特性 说明
In-flight Batching 等同于 Continuous Batching,NVIDIA 官方实现
XQA Kernel H100 专用注意力 kernel,比 FlashAttention-2 更快
FP8 / INT4 AWQ 原生支持,与 CUDA 深度绑定
Triton 集成 与 NVIDIA Triton Inference Server 无缝集成
适用场景 数据中心 NVIDIA GPU,对延迟要求极高的生产环境

五、四框架横向对比

维度 vLLM SGLang llama.cpp TensorRT-LLM
最适合场景 通用生产 GPU 服务 高并发/结构化输出 边缘/消费级/CPU NVIDIA 数据中心
吞吐量 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐
首 token 延迟 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐
CPU 推理
结构化输出 ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
量化支持 FP8, INT8 FP8, INT4 Q2~Q8, IQ FP8, INT4 AWQ
多模态 ✅(部分)
OpenAI API ✅(server) ✅(via Triton)
易用性 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
社区活跃度 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐

选型建议

生产 GPU 服务(通用)     → vLLM(首选,社区最大)
高并发 / DeepSeek 模型   → SGLang(吞吐更高)
本地开发 / 消费级 GPU     → llama.cpp(Q4_K_M 格式)
NVIDIA 专有数据中心      → TensorRT-LLM(性能最极致)
研究实验 / 快速验证      → vLLM 或 HuggingFace Transformers

六、前沿趋势:Disaggregated Prefill/Decode

问题:Prefill(处理 prompt)和 Decode(逐 token 生成)对硬件需求不同: - Prefill:计算密集(大量并行矩阵运算) - Decode:内存带宽密集(每步加载全部权重)

Disaggregated P/D:将两个阶段部署在不同机器/GPU 上,各自独立扩容:

Prefill 集群(A100 计算型)←→ KV Cache 传输 ←→ Decode 集群(大显存型)

优势:TTFT(首 token 延迟)和 TBT(token 间延迟)可以独立优化,整体吞吐量提升 40%+。vLLM v1、SGLang 均已支持。


面试延伸

Q:vLLM 的 Prefix Caching 和 SGLang 的 RadixAttention 的本质区别是什么?

vLLM 的前缀缓存基于哈希匹配,只能复用完全相同的前缀(如系统 prompt)。SGLang 的 RadixAttention 用基数树结构管理所有历史 KV Cache,可以复用任意公共子序列,包括多轮对话中间的公共部分。在 few-shot prompting、多轮对话等场景下,RadixAttention 的缓存命中率更高。

Q:为什么 llama.cpp 的 Q4_K_M 比简单的 INT4 量化质量更好?

简单 INT4(如 Q4_0)对所有权重使用相同量化步长(absmax 量化),忽略了不同权重的重要性差异。K-Quant(Q4_K_M 等)将权重按 block 分组,每个 block 独立确定量化参数,同时对"超级 block"用更高精度量化关键权重(如注意力层的权重比 FFN 用更多 bit)。这种自适应分配使精度损失更小。

Q:如果要部署一个支持 100 并发用户、使用 DeepSeek-V3 的生产服务,你会怎么选型?

首选 SGLang:① DeepSeek-V3 是 MoE 模型,SGLang 对其有专项优化;② RadixAttention 对系统 prompt 的 KV Cache 复用率更高,100 并发下大量请求共享前缀,显存节省显著;③ 吞吐量测试 SGLang 在 DeepSeek 系列上普遍比 vLLM 快 20-40%。配置上:4-8 张 A100/H100,tensor_parallel=4,启用 FP8 量化,RadixAttention 默认开启。


原始论文与资源

资源 链接
vLLM / PagedAttention 论文 (SOSP 2023) arxiv.org/abs/2309.06180
vLLM GitHub github.com/vllm-project/vllm
SGLang 论文 (2024) arxiv.org/abs/2312.07104
SGLang GitHub github.com/sgl-project/sglang
llama.cpp GitHub github.com/ggml-org/llama.cpp
TensorRT-LLM GitHub github.com/NVIDIA/TensorRT-LLM
Mooncake: KVCache-centric Disaggregated Architecture (2024) arxiv.org/abs/2407.00079
EAGLE-3: Scaling Inference via Training-Time Test (2025) arxiv.org/abs/2503.01840
ChunkAttention: Prefix-Aware KV Cache Sharing (2024) arxiv.org/abs/2402.15220

延伸阅读与视频

平台 标题 说明
📺 B站 怎么加快大模型推理?10分钟学懂vLLM内部原理 12.4万播放,最受欢迎的vLLM+PagedAttention讲解
📺 B站 AI INFRA学习 02 - vLLM PagedAttention论文精读 近2小时精读vLLM原始论文,深度学习必备
📺 B站 什么是PagedAttention?为什么它能提高GPU显存使用效率? 1.1万播放,图文并茂讲解PagedAttention
📖 vLLM Docs vLLM documentation PagedAttention、serving、调度与部署文档
📖 SGLang Docs SGLang documentation 推理服务、RadixAttention、结构化输出等文档