vLLM系统拆解-13-推理框架对比:vLLM、TGI、TensorRT-LLM与SGLang
vLLM系统拆解-13-推理框架对比:vLLM、TGI、TensorRT-LLM与SGLang
推理框架的对比题很容易被答成速度排名,但那种答案其实站不住脚——不同框架面向的问题不同,放在不同团队/不同场景下结论会完全不一样。
这篇文章建立一个比较框架,然后用它拆解四组对比:Transformers vs vLLM、TGI vs vLLM、TensorRT-LLM vs vLLM、SGLang vs vLLM。读完应该能回答"为什么很多团队先考虑 vLLM",同时也能说清楚"什么情况下 vLLM 不是最合适的选项"。
比较框架:先明确在比什么
不同定位的系统放在一起比,结论必然失真。比较之前,先统一五个维度:
| 维度 | 要回答的问题 |
|---|---|
| 定位 | 这是模型库、推理引擎,还是完整服务框架? |
| 核心优化点 | 它主要靠什么变快——调度、KV 管理、底层 kernel,还是减少重复计算? |
| 工程风格 | 更偏易用/通用,还是更偏硬件极致优化? |
| 适用场景 | 离线、在线、研究、生产、多卡、MoE、复杂 agent 工作流等 |
| 代价 | 迁移成本、调试成本、模型支持成本、硬件依赖 |
“核心优化点"这个维度要说具体——快在 batching、快在 KV 管理、快在 kernel、快在减少重复计算,这些是有区别的。一个成熟的选型判断一定包含"它强在哪,也弱在哪;适合谁,也不适合谁”。
推理系统选型,本质上是在性能、灵活性、可维护性、硬件绑定程度、生态兼容性之间做平衡,不是找峰值吞吐的冠军。
vLLM vs Transformers:不在同一层,没有直接可比性
这是最基础的一组,也是最容易答歪的一组。
两者解决的是不同层次的问题
Transformers 是通用模型调用库:提供 tokenizer、model class、generate API,方便研究、实验、单机调用、微调前后衔接。它的目标不是高并发在线服务,模型覆盖广、训练/推理兼容、社区生态强、新模型接入快——这些才是它的优先项。
vLLM 是面向 LLM serving 的推理引擎:重点解决多请求并发、KV Cache 管理、动态调度、吞吐和延迟平衡。
差别不只是性能数字,而是设计目标从一开始就不同。
用 model.generate() 做服务会遇到什么
直接基于 Transformers 做在线服务可以"能用",但并发一多就会暴露三个典型问题:
KV Cache 不够服务化。 Transformers 的 KV Cache 更像"单请求执行过程中的内部状态"。vLLM 把 KV Cache 提升为一个被专门管理的系统资源——分 block 管理、可回收、可复用、可调度、可参与 prefix caching。这是"库"和"引擎"在设计层面的根本差异。
批处理不面向在线场景。 Transformers 可以做 batch,但不是围绕 continuous batching 和在线请求生命周期设计的。vLLM 从一开始就把"不断有请求进入、退出、继续生成"的场景当成核心。
服务性能优化不是主线。 Transformers 要同时服务研究、训练、推理、生态扩展等多个目标;vLLM 的目标更集中:把 LLM serving 这件事做强。
更准确的理解是:Transformers 主要解决"模型怎么定义和调用",vLLM 主要解决"模型怎么高效服务化"。两者不是替代关系,是不同层次。实际工程里的常见做法——模型生态靠 HF,对外服务靠 vLLM。
vLLM vs TGI:同样面向生产,工程主轴不同
这组是真正的直接竞品比较。TGI(Text Generation Inference)是 Hugging Face 官方的生产级推理服务框架,不要把它当成"简陋 baseline"——它本身就有 continuous batching、paged attention、KV Cache、streaming、quantization、tensor parallel 等能力,服务工程化成熟,与 HF 平台生态天然衔接。
两者在 feature 层面高度重叠,真正的差异在工程主轴:
1 | vLLM 的主轴:LLM runtime / inference engine |
这两个主轴有重叠,但侧重不同。一个直观的类比:vLLM 更像 runtime / engine,TGI 更像 production serving stack。
选型参考:
- 更追求推理 runtime 的性能上限和调优空间 → vLLM 更自然
- 团队已深度基于 HF 工具链,追求快速搭建稳定服务 → TGI 也是合理选择
vLLM vs TensorRT-LLM:通用强 vs 深度 NVIDIA 绑定
这是最容易被说偏的一组。
TensorRT-LLM 现在是什么
TensorRT-LLM 已经是完整的大模型推理系统栈,不只是底层 kernel 库。它同样有:
- In-flight batching(等同于 continuous batching)
- Paged KV Cache / paged attention
- Chunked context(等同于 chunked prefill)
- Speculative decoding
- 大规模并行部署支持
所以在 feature 层面两者重叠很多,"TensorRT-LLM 就是底层 kernel"这个说法已经不准确。
真正的差异:工程权衡不同
| 维度 | vLLM | TensorRT-LLM |
|---|---|---|
| 硬件绑定 | 相对通用,支持多种 GPU | 深度 NVIDIA 绑定,针对 CUDA / 特定 GPU 架构优化 |
| 工程门槛 | 较低,与 HF 模型兼容性好 | 较高,需要更多编译和优化配置 |
| 新模型接入速度 | 快,紧跟 HF 生态 | 相对慢,需要更多适配工程 |
| 极致性能上限 | 高 | 在 NVIDIA 平台上通常更高 |
| 主要代价 | 某些极端场景不如专用方案 | 更强硬件绑定,工程复杂度更高 |
TensorRT-LLM 适合的条件比较具体:单一 NVIDIA 集群、模型族相对固定、非常重视极限吞吐和低延迟、有足够 infra 人力支撑。这几个条件同时成立,TensorRT-LLM 往往很值得深入。
如果团队更需要较低迁移成本、快速接主流 HF 模型、更通用的 serving 框架,vLLM 通常更容易先落地。
两者不是"一个先进、一个落后"的关系,是面向不同约束条件下的不同工程权衡。
vLLM vs SGLang:serving 引擎 vs LLM 程序执行框架
这组最容易被忽视,但近两年越来越重要。
SGLang 不只是"另一个高性能 serving 框架"
SGLang 有两个并列的设计目标:
- 高性能 serving runtime(这部分和 vLLM 直接竞争)
- 前端程序表达能力:支持多轮程序式调用、复杂控制流、agent / workflow / structured generation、多次生成之间的上下文复用
第二点是 vLLM 没有着重做的部分。这让 SGLang 常被描述为"既是 serving runtime,也是 LLM program runtime"。
两者的思维重心
vLLM 的出发点:怎样把单轮/多请求 LLM serving 做得又快又稳。
SGLang 的出发点:怎样把复杂 LLM 程序写出来,并让 runtime 帮你高效执行。
当然两者有重叠,但不是完全相同的问题。
RadixAttention vs Prefix Caching
两者都重视上下文复用,但侧重不同:
- vLLM 的 prefix caching 是 serving 层面的跨请求 KV 块复用,核心在调度和内存管理
- SGLang 的 RadixAttention 更强调多次相关调用之间的前缀共享,使程序式调用之间的 KV 复用更自然
不建议在面试里把两者讲成"谁更先进",更准确的说法是:两者都很重视上下文复用和高性能 serving,但 vLLM 更偏通用高性能推理引擎,SGLang 更进一步把复杂 LLM 程序执行当成一等公民。
场景判断:
- 标准 chat completion、高并发文本生成、以 serving 稳定性和吞吐为主 → vLLM 更自然
- agent workflow、多步程序式生成、多段 prompt 多次调用共享上下文 → SGLang 可能更有吸引力
五系统横向对比
把四组比较收束,加上 Transformers,整理成一张对比表:
| 系统 | 更像什么 | 核心优势 | 主要代价/局限 | 更适合的场景 |
|---|---|---|---|---|
| Transformers | 通用模型库 | 模型生态最广,调用简单,研究友好 | 不以高并发服务为第一目标,缺乏服务化 KV 管理 | 研究、实验、原型、离线调用 |
| vLLM | 高性能通用 serving runtime | paged KV Cache、continuous batching、prefix caching、综合平衡强 | 某些极端场景不如专用框架 | 主流 LLM 在线服务、性能与工程成本平衡场景 |
| TGI | 生产级文本生成服务框架 | HF 生态衔接自然,服务工程化成熟 | runtime 调优主轴不如 vLLM 鲜明 | HF 平台生态、快速搭建生产服务 |
| TensorRT-LLM | NVIDIA 深度优化推理系统 | NVIDIA 平台极致性能,底层优化深度高 | 强硬件绑定,工程复杂度更高 | 固定 NVIDIA 集群、追求极限性能、有足够 infra 投入 |
| SGLang | 高性能 runtime + LLM 程序执行框架 | 高性能 serving + 强程序表达能力 | 使用范式比标准 serving 更复杂 | agent workflow、复杂多步程序式推理 |
为什么很多团队会先考虑 vLLM
vLLM 成为很多团队默认优先选项,不是因为它在所有 benchmark 上绝对第一,原因更务实。
有明显强于普通调用库的系统级优化。 Paged KV Cache、continuous batching、prefix caching、chunked prefill、speculative decoding、serving runtime 级别的调度——这些机制使它和"直接拿 Transformers 开服务"不在一个层次。
没有像某些极致优化方案那样把门槛拉得很高。 与 HF 模型衔接自然,上手相对容易,快速落地的同时仍保留很强的调优空间。
处在一个实用的平衡点: 比通用库更像推理系统,比极致硬件框架更容易用,比平台封装方案更可研究和理解。
这个平衡点不是最极端的,但在真实工程约束下(模型经常迭代、硬件环境不是单一 NVIDIA 集群、团队 infra 人力有限),它是很多团队最容易接受的选择。
六个常见的比较误区
这六个误区在对比类问题里非常高频,值得专门列出来:
| 误区 | 正确理解 |
|---|---|
| 把 Transformers 和 vLLM 当成同一层产品比较 | 一个是模型库,一个是服务引擎,层次不同,直接比快慢没有意义 |
| 只说"vLLM 更快" | 要说清楚快在 KV 管理、调度、跨请求复用这些具体机制上 |
| 把 TensorRT-LLM 描述成"只有底层 kernel" | 它已经是完整的大模型推理系统栈,有 in-flight batching / paged KV Cache / chunked context / speculative decoding |
| 把 TGI 讲得很弱 | TGI 是成熟的生产 serving 方案,不是简陋 baseline |
| 把 SGLang 讲成"另一个 vLLM" | SGLang 还把复杂 LLM 程序执行当成一等公民,这是独立的设计目标 |
| 只比较速度,不比较工程成本 | 真正的选型考量包括:性能、延迟、模型兼容性、部署复杂度、调试成本、硬件依赖、运维成本 |
选型的实质
各系统的关键词——continuous batching、paged KV Cache、chunked prefill、speculative decoding——现在已经高度重叠,这意味着"有没有这个 feature"越来越不是核心差异。
真正拉开差别的,是它们把这些 feature 组织成了一个什么风格的系统:追求通用还是极致、绑定 HF 生态还是 NVIDIA 生态、把 serving 当终点还是把 LLM 程序执行当终点。
选型不是找峰值吞吐的冠军,而是在你的约束条件(硬件环境、模型迭代速度、团队能力、业务场景)下,找到性能与工程成本之间最合适的平衡点。

