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
2
3
4
5
6
7
vLLM 的主轴:LLM runtime / inference engine
核心亮点:paged KV Cache、request scheduling、prefix caching、chunked prefill
优先目标:serving 性能和调优空间

TGI 的主轴:完整生产服务框架
核心亮点:HF 生态衔接、工程链条完整、容器化部署和平台接入成熟
优先目标:稳定可用的文本生成服务

这两个主轴有重叠,但侧重不同。一个直观的类比: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 有两个并列的设计目标:

  1. 高性能 serving runtime(这部分和 vLLM 直接竞争)
  2. 前端程序表达能力:支持多轮程序式调用、复杂控制流、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 程序执行当终点。

选型不是找峰值吞吐的冠军,而是在你的约束条件(硬件环境、模型迭代速度、团队能力、业务场景)下,找到性能与工程成本之间最合适的平衡点。


系列导航