LLM 推理引擎全面对比:vLLM、SGLang、LMDeploy、TensorRT-LLM、llama.cpp
把大模型部署上线,绕不开一个选择:用哪个推理引擎。同样的模型,用 vLLM 和用 llama.cpp,吞吐量能差两个数量级;同样在 NVIDIA GPU 上,TensorRT-LLM 和通用框架的延迟也能差出一倍。
vLLM 靠 PagedAttention 开创了高效推理的新时代,但它的身后已经站了一排同样优秀的推理引擎。这篇文章把它们放在同一张桌上对比——核心优化技术、硬件支持、优势场景、吞吐量参考,以及最后怎么选。
本文 outline
- 一张表看懂主流推理引擎
- 技术要点解析:每个引擎的杀手锏
- 六项核心优化技术:所有引擎的共同地基
- 如何选择:按需求对号入座
1. 一张表看懂主流推理引擎
| 框架 | 核心优化技术 | 硬件支持 | 优势场景 | 吞吐量参考 (H100, Llama 3.1 8B) |
|---|---|---|---|---|
| vLLM | PagedAttention, 连续批处理 | NVIDIA, AMD, Intel, TPU 等 | 通用生产环境,高并发 API 服务,模型兼容性最广 | ~12,500 tok/s |
| SGLang | RadixAttention(基数树缓存), 结构化输出 | GPU-first | 多轮对话、AI Agent、RAG 等共享前缀的负载 | ~16,200 tok/s |
| LMDeploy | TurboMind(C++ 引擎), 极致量化支持 | NVIDIA GPU (CUDA) | 量化模型部署,对 H100 性能有极致要求 | ~16,100 tok/s |
| TensorRT-LLM | 算子融合, FP8/INT4 量化, In-flight Batching | NVIDIA only | 追求 NVIDIA GPU 上的峰值性能,可接受较高部署复杂度 | 最高(70B 模型 2500-4000+ tok/s) |
| TGI | 流式输出, 连续批处理 (v3) | GPU-first | Hugging Face 生态集成(已进入维护模式) | 中等(70B 模型 800-1500 tok/s) |
| llama.cpp | GGML 张量库, CPU/混合推理 | CPU, GPU(多种后端), Apple Silicon | 边缘设备、本地开发、CPU 推理 | 较低(M2 Ultra 上 7B 模型 80-100 tok/s) |
| Ollama | 基于 llama.cpp, 极简用户体验 | CPU, GPU | 本地快速原型验证、个人使用(不推荐用于生产) | 低 |
一个关键提醒:吞吐量数字只是参考,实际表现取决于模型规模、硬件、批大小、量化等级。同一引擎在 8B 和 70B 模型上的表现差异巨大(表格里 TensorRT-LLM 和 TGI 特意标了 70B 档)。
2. 技术要点解析:每个引擎的杀手锏
vLLM —— PagedAttention。受操作系统虚拟内存启发,把 KV 缓存分割成固定大小的块(page),解决了显存碎片问题。在 PagedAttention 之前,KV 缓存需要连续显存,碎片率极高;分页后显存利用率能从约 30% 提升到 90% 以上。这是 vLLM 成为行业默认选择的基石,也是它"模型兼容性最广"的原因——庞大社区 + 持续适配。
SGLang —— RadixAttention。用基数树(radix tree)来管理和复用 KV 缓存。不同请求如果共享相同前缀(比如同一个 system prompt、同一段对话历史),这些前缀的 KV 缓存可以在请求间复用,避免重复计算。在多轮对话、Agent、RAG 这类"共享前缀"的负载下,缓存命中率极高,吞吐能显著超越 vLLM(表格里 16.2k vs 12.5k)。SGLang 还支持结构化输出(JSON Schema 约束生成)。
LMDeploy —— TurboMind。一个纯 C++ 后端,消除了 Python 的开销。PyTorch 的 Python 层在每次调用都有解释开销,TurboMind 用 C++ 把整个推理路径压到最低。它和极致量化(Int4/Int8)深度配合,在量化模型上的性能表现尤为突出——这就是它"H100 上 16.1k tok/s"的底气。
TensorRT-LLM —— 算子融合 + 极致量化。NVIDIA 官方库,能用上 NVIDIA 硬件最底层的优化。算子融合把多个计算合并减少 kernel 启动,FP8/INT4 量化 + In-flight Batching(请求级动态批处理)进一步压榨性能。代价是部署复杂度高——需要编译引擎、调优配置,通常要专门的工程投入。追求 NVIDIA 峰值性能的团队值得,但要算上人力成本。
TGI —— 现状要特别注意。Hugging Face 的 TGI 已于 2025 年 12 月进入维护模式,官方建议新项目考虑 vLLM 或 SGLang。它曾经是 HF 生态的默认选择(流式、连续批处理),但现在生态地位已被 vLLM 取代。如果你的新项目还没选型,直接跳过 TGI。
llama.cpp —— GGML 张量库。主打 CPU 推理和边缘部署。GGML 是专为本地推理设计的张量库,支持 CPU、GPU(多种后端)、Apple Silicon。在消费级硬件(Mac、无独显笔记本)上,它是在本地跑模型的事实标准。吞吐低(M2 Ultra 上 7B 模型 80-100 tok/s),但"能跑起来"本身就是它的价值。
Ollama —— 极简封装。基于 llama.cpp,把推理封装成一键安装、一条命令运行的体验。适合本地快速原型验证和个人使用,但不推荐用于生产——它的设计目标是易用性,不是高吞吐和精细控制。
3. 六项核心优化技术:所有引擎的共同地基
这些推理引擎的性能差异,本质上都源于对以下六项技术的采用程度和实现深度:
① PagedAttention / 分页注意力。受操作系统虚拟内存启发,将 KV 缓存分块管理,极大减少显存碎片。vLLM 的基石,现在也被多个引擎借鉴。
② 连续批处理(Continuous Batching)。动态地把新请求加入正在运行的批次,并在请求完成后立即移除,避免 GPU 空闲。传统批处理要等整批完成才处理下一批,连续批处理让 GPU 始终满载——这是吞吐量提升最直接的手段。
③ 前缀缓存 / RadixAttention。识别并复用不同请求中相同的提示词前缀(如系统提示、对话历史),避免重复计算。对多轮对话和 Agent 场景非常有效——这正是 DeepSeek 硬盘缓存、OpenAI/Claude 前缀缓存在推理引擎层的对应物。
④ 量化(Quantization)。用 FP8、INT4 等低精度格式压缩模型权重和 KV 缓存,减少显存占用并加速计算。TensorRT-LLM 和 LMDeploy 对此有深度优化,也是本地推理(llama.cpp)能在消费级硬件上跑大模型的原因。
⑤ 推测解码(Speculative Decoding)。使用一个小型"草稿模型"快速生成候选 token,再由大模型并行验证,加速生成过程。用"小模型猜、大模型验"的方式,在不损失质量的前提下显著提速。
⑥ Prefill/Decode 分离。将计算密集的预填充阶段(处理输入)和内存密集的解码阶段(生成输出)部署在不同的硬件或节点上,实现资源最优利用。代表方案有 NVIDIA Dynamo——大模型服务的新一代架构方向。
4. 如何选择:按需求对号入座
选哪个引擎,取决于三个维度:硬件平台、性能瓶颈、部署复杂度容忍度。
追求生态成熟与通用性 → vLLM。最稳妥的默认选择,社区最大、模型支持最广,遇到问题最容易找到答案。如果你的需求没有特殊性,从 vLLM 开始不会错。
追求极致吞吐,尤其是对话/Agent 场景 → SGLang。RadixAttention 在共享前缀负载下的优势是实打实的。如果你的负载是多轮对话、Agent 编排、RAG,SGLang 值得认真评估。
部署量化模型或追求 H100 上的极致性能 → LMDeploy。TurboMind 的 C++ 引擎 + 极致量化,在量化模型部署场景是性价比之选,尤其适合国内团队(国产模型适配好)。
NVIDIA 生态深度用户,追求峰值性能 → TensorRT-LLM。能榨出 NVIDIA 硬件的最后一点性能,但要接受更高的部署复杂度和调优投入。大厂核心服务、对延迟极度敏感的场景值得。
边缘/本地部署或 CPU 环境 → llama.cpp。消费级硬件上跑模型的事实标准。Apple Silicon 用户、边缘设备、无 GPU 环境的首选。
本地快速原型/个人使用 → Ollama。一条命令跑起来,体验最好,但别上生产。
一个实操建议:不要只看 benchmark 数字。同一引擎在不同模型、不同硬件、不同负载下的表现差异巨大。正确做法是——选定 2-3 个候选引擎(通常 vLLM 做基线 + 一个针对你场景的),在你的真实模型、真实硬件、真实负载下跑压测,用数据说话。吞吐量表格只能帮你缩小范围,不能替你拍板。
另一个趋势提醒:推理引擎正在走向"场景专用化"。vLLM 做通用底座,SGLang 攻共享前缀,Dynamo 做分离式部署,llama.cpp 占边缘——没有万能引擎。选型时先明确你的瓶颈(吞吐?延迟?显存?成本?),再对号入座。
参考
- vLLM GitHub — PagedAttention、连续批处理
- SGLang GitHub — RadixAttention、结构化输出
- LMDeploy GitHub — TurboMind C++ 引擎
- TensorRT-LLM GitHub — NVIDIA 官方推理库
- TGI GitHub — 已进入维护模式
- llama.cpp GitHub — GGML、CPU/边缘推理
- 前篇:OpenAI 和 Claude 的 API 缓存原理 — 前缀缓存的 API 层视角
作者: itech001 来源: 公众号:AI人工智能时代(the-ai-era) 网站: https://www.theaiera.top/ 关注每日最新AI新闻和技术博客,主页有更多的文章的AI 技术参考:https://www.theaiera.top
关注公众号,获取更多 AI 技术干货!