主流推理框架对比(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 为核心创新,是目前生产环境中最广泛使用的推理框架。
GitHub:github.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。
GitHub:github.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 推理。
GitHub:github.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 深度优化。
GitHub:github.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、结构化输出等文档 |