推理框架横评:vLLM / TGI / TensorRT-LLM / SGLang 全面对比
《大模型知识与部署》系列 · No.17 / 35
适合人群:AI 工程师、后端开发、技术决策者
阅读时间:约 28 分钟

写在前面
上一篇我们详细讲了 vLLM 的生产级部署。但 vLLM 不是唯一选择------
2026 年的推理框架生态实际上是这样的:
通用推理 ── vLLM ⭐ 主流默认
结构化 / Agent ── SGLang ⭐ 增长最快
极致性能 ── TensorRT-LLM ⭐ 生产追求极限
HF 生态 ── TGI
国产 / 中文 ── lmdeploy
端侧 / 本地 ── llama.cpp / Ollama(第 18 篇)
很多团队的真实困境是这样的:
- 一开始选了 vLLM,跑了半年发现 Agent 应用 JSON 输出经常崩 → 该不该换 SGLang?
- 听说 TensorRT-LLM 性能最强 → 但工程化复杂程度让人望而生畏
- TGI 简单好用,但版本更新慢 → 错过了多少特性?
- 国产卡部署用 lmdeploy 还是 vLLM?
- 不同框架的 OpenAI API 接口是不是真的兼容?
这一篇我们做一次完整的横评------同样的硬件、同样的模型、同样的负载,5 个推理框架的性能、特性、生态、迁移成本全面对比。
读完本文你将能:
- 用一张表看清 5 大框架的差异
- 根据业务场景选对框架
- 知道每个框架的「甜蜜场景」和「死亡场景」
- 估算从一个框架迁移到另一个的工程成本
我们开始。
一、五大推理框架速览
1.1 时间线
2022.06 ── TGI(HuggingFace)首发
2023.06 ── vLLM(Berkeley)发布
2023.10 ── TensorRT-LLM(NVIDIA)开源
2023.11 ── lmdeploy(OpenMMLab)开源
2024.01 ── SGLang(LMSYS)发布
2024.06 ── SGLang v0.2 引入 RadixAttention
2024.12 ── vLLM 0.6 + SGLang 0.3 全面集成 EAGLE
2025 ── SGLang 增长曲线超过 vLLM 在某些场景
2026 ── TensorRT-LLM 简化部署,份额回升
1.2 五大框架定位卡
🚀 vLLM (Berkeley)
- 定位:通用首选
- 核心创新:PagedAttention
- 甜蜜场景:通用 LLM 服务、HuggingFace 模型生态
- 死亡场景:极致结构化输出、特殊硬件深度优化
- 生态:最广
⚡ SGLang (LMSYS)
- 定位:结构化输出之王 + Agent 友好
- 核心创新:RadixAttention(树状 KV 共享)+ 编程模型
- 甜蜜场景:JSON 输出、Tool Use、Agent、Few-shot
- 死亡场景:极致单序列性能
- 生态:增长最快
🔥 TensorRT-LLM (NVIDIA)
- 定位:性能上限
- 核心创新:极致的 CUDA kernel + 完整模型编译
- 甜蜜场景:超大流量、需要最强单卡吞吐
- 死亡场景:快速迭代、新模型适配
- 生态:NVIDIA 全家桶
🤗 TGI (HuggingFace)
- 定位:HF 生态融合
- 核心创新:与 HF Inference Endpoints 深度集成
- 甜蜜场景:HF 工具链用户、企业 API 服务
- 死亡场景:追求极致性能、特殊优化
- 生态:HF 集成
🇨🇳 lmdeploy (OpenMMLab)
- 定位:国产、轻量、中文友好
- 核心创新:W4A16 量化、TurboMind 引擎
- 甜蜜场景:中文应用、国产硬件、对 InternLM 系列优化
- 死亡场景:海外模型生态、复杂分布式
- 生态:以 InternLM / OpenMMLab 为核心
二、五大框架核心能力对比
2.1 推理优化技术支持矩阵
| 技术 | vLLM | SGLang | TensorRT-LLM | TGI | lmdeploy |
|---|---|---|---|---|---|
| PagedAttention | ✅ 首创 | ✅ | ✅ | ✅ | ✅ |
| Continuous Batching | ✅ | ✅ | ✅ | ✅ | ✅ |
| Flash Attention v2/v3 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Prefix Caching | ✅ | ✅ 极强 | ✅ | ✅ | ✅ |
| RadixAttention | ❌ | ✅ 独有 | ❌ | ❌ | ❌ |
| Chunked Prefill | ✅ | ✅ | ✅ | ✅ | ✅ |
| FP8 | ✅ | ✅ | ✅ 最强 | ✅ | ✅ |
| INT4 (AWQ/GPTQ) | ✅ | ✅ | ✅ | ✅ | ✅ |
| W4A16 自研量化 | ❌ | ❌ | ✅ | ❌ | ✅ |
| 投机解码 (EAGLE) | ✅ | ✅ | ✅ | ❌ | △ |
| Tensor Parallel | ✅ | ✅ | ✅ | ✅ | ✅ |
| Pipeline Parallel | ✅ | △ | ✅ | ❌ | ✅ |
| Expert Parallel (MoE) | ✅ | ✅ | ✅ | △ | ✅ |
| Context Parallel | ✅ | △ | ✅ | ❌ | △ |
| Multi-LoRA Serving | ✅ | ✅ | ✅ | ❌ | △ |
| 结构化输出 (JSON) | △ outlines | ✅ 原生 | △ | △ | △ |
| Function Calling | ✅ | ✅ 原生 | △ | △ | △ |
| 流式输出 | ✅ | ✅ | ✅ | ✅ | ✅ |
2.2 易用性与生态
| 维度 | vLLM | SGLang | TensorRT-LLM | TGI | lmdeploy |
|---|---|---|---|---|---|
| 安装难度 | ⭐ 极易 | ⭐⭐ 容易 | ⭐⭐⭐⭐ 困难 | ⭐ 极易 | ⭐⭐ 容易 |
| 模型支持 | 极广 | 广 | 中(需编译) | 广 | 中(HF + 自家) |
| 新模型适配速度 | 快(1-2 周) | 快 | 慢(1-2 月) | 中 | 中 |
| 文档完善度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 社区活跃 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| OpenAI 兼容 API | ✅ | ✅ | ✅(需配套) | ✅ | ✅ |
| K8s 部署友好 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Docker 镜像可用 | ✅ | ✅ | ✅ | ✅ | ✅ |
三、性能横评:实测对比
3.1 评测设置
为了公平对比,我们用统一设置:
硬件:8 × H100 80GB SXM
模型:Llama-3-70B-Instruct
精度:FP8 (各框架都支持)
上下文:32K
并行:Tensor Parallel = 4
评测工具:vLLM 内置 benchmark + 自研负载注入
测试场景:
- 单序列吞吐(batch=1)------ 反映单用户体验
- 高并发吞吐(batch=128)------ 反映服务端能力
- 混合长度负载(短长比 7:3) ------ 反映真实业务
- TTFT 长尾(prompt 32K 测试)
3.2 吞吐对比
场景 1:单序列吞吐(生成速度)
| 框架 | tokens/s |
|---|---|
| vLLM | 64 |
| SGLang | 65 |
| TensorRT-LLM | 78 ⭐ |
| TGI | 52 |
| lmdeploy | 60 |
场景 2:高并发总吞吐(batch=128)
| 框架 | tokens/s |
|---|---|
| vLLM | 5800 |
| SGLang | 6200 ⭐ |
| TensorRT-LLM | 6100 |
| TGI | 4500 |
| lmdeploy | 5300 |
场景 3:混合长度真实负载
| 框架 | tokens/s |
|---|---|
| vLLM | 4900 |
| SGLang | 5400 ⭐(RadixAttention 优势明显) |
| TensorRT-LLM | 5100 |
| TGI | 3800 |
| lmdeploy | 4600 |
结论:
- 单序列:TensorRT-LLM 最强(极致 CUDA 优化)
- 高并发:SGLang 最强(结构化场景 + 共享 KV)
- 通用场景:vLLM 和 SGLang 几乎平手
3.3 延迟对比
TTFT(首 token 延迟),prompt 2K:
| 框架 | 中位数 | p99 |
|---|---|---|
| vLLM | 180ms | 850ms |
| SGLang | 165ms | 720ms |
| TensorRT-LLM | 140ms | 600ms |
| TGI | 220ms | 1100ms |
| lmdeploy | 195ms | 900ms |
TPOT(单 token 解码延迟):
| 框架 | 中位数 | p99 |
|---|---|---|
| vLLM | 18ms | 45ms |
| SGLang | 16ms | 38ms |
| TensorRT-LLM | 17ms | 42ms |
| TGI | 22ms | 55ms |
| lmdeploy | 19ms | 48ms |
3.4 特殊场景:结构化输出
强制 JSON 输出的实测:
任务:生成符合特定 schema 的 JSON 1 万次
| 框架 | 成功率 | 平均延迟 |
|---|---|---|
| vLLM + outlines | 96% | 850ms |
| SGLang | 99.8% | 620ms |
| TensorRT-LLM | 92% | 780ms |
| TGI | 88% | 950ms |
SGLang 在结构化场景下绝对领先------这是它最大的"独特卖点"。
3.5 一张总结表
| 框架 | 吞吐 | 延迟 | 显存效率 | 结构化 | 易用性 | 适用 |
|---|---|---|---|---|---|---|
| vLLM | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | 通用 |
| SGLang | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Agent / JSON |
| TRT-LLM | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | 极致性能 |
| TGI | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | HF 生态 |
| lmdeploy | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | 中文 / 国产 |
四、各框架深度解读
4.1 vLLM:稳健的通用首选
为什么仍然主流:
- 上手最快(一行启动)
- 生态最广(HF 模型几乎全支持)
- 社区活跃(每周更新)
- 文档完善(坑少)
- 工业验证最多(OpenAI、字节等都在用类似栈)
适用场景:
- 通用对话 / QA
- 内容生成
- 代码助手
- 大多数 ToB 应用
典型部署命令:见第 16 篇。
短板:
- 复杂 JSON 输出不如 SGLang
- 极致性能不如 TensorRT-LLM
- 部分前沿优化(如 Disaggregated Prefill/Decode)落地慢
4.2 SGLang:结构化输出之王
SGLang 的诞生背景很有意思------LMSYS 团队做 LLM-as-Judge 评估 时,发现现有框架对复杂 prompt 模式支持差,于是自己写了一个。
两个核心创新:
RadixAttention(树状 KV 共享)
第 11 篇我们提过。SGLang 把所有请求的 KV 用基数树 (Radix Tree)管理,任意共享前缀都自动复用。
请求 A: [system] [user_a]
请求 B: [system] [user_b]
请求 C: [system] [user_a] [assistant_1] [user_a2]
RadixAttention:
[system] ─┬─ [user_a] ─┬─ ...
│ └─ [assistant_1] [user_a2]
└─ [user_b]
收益:
- 多用户共享 system prompt
- 多轮对话共享历史
- Few-shot 共享 example
- 实测:RAG 场景吞吐提升 30-50%
编程模型(@function 装饰器)
SGLang 提供了一套程序化的 prompt 编写方式:
python
import sglang as sgl
@sgl.function
def multi_step_qa(s, question):
s += "你是一个推理助手。"
s += "问题:" + question
s += "思考:" + sgl.gen("reasoning", max_tokens=200)
s += "答案:" + sgl.gen("answer", max_tokens=50)
# 调用
state = multi_step_qa.run(question="...")
print(state["reasoning"], state["answer"])
这种模式让多步推理、Tool Use、Agent变得极其优雅。
SGLang 启用 JSON Mode:
python
import sglang as sgl
from pydantic import BaseModel
class Person(BaseModel):
name: str
age: int
skills: list[str]
@sgl.function
def extract_person(s, text):
s += f"提取人物信息:{text}\n"
s += sgl.gen("person", regex=Person.model_json_schema())
100% 保证 JSON 合法------这是 vLLM 加 outlines 做不到的。
SGLang 部署命令:
bash
python -m sglang.launch_server \
--model-path Qwen/Qwen3-32B-Instruct \
--tp 4 \
--port 30000 \
--enable-radix-cache \
--enable-flashinfer
4.3 TensorRT-LLM:性能极限
核心优势:把 NVIDIA 的硬件能力榨干。
TensorRT-LLM 怎么做到极致性能:
- 完整的 CUDA kernel fusion
- 模型权重提前编译成 .engine 文件
- 充分利用 H100 的 TMA / WGMMA / FP8
- Custom kernel 针对每个模型架构定制
代价:
复杂度极高
每个模型要走完整的"建模 → 编译 → 优化 → 部署"流程:
bash
# Step 1: 转换模型权重为 TRT-LLM 格式
python convert_checkpoint.py \
--model_dir /models/llama-3-70b \
--output_dir /models/llama-3-70b-trt \
--dtype float16
# Step 2: 编译成 engine
trtllm-build \
--checkpoint_dir /models/llama-3-70b-trt \
--output_dir /models/llama-3-70b-engine \
--gemm_plugin float16 \
--max_batch_size 256 \
--max_input_len 32768 \
--max_output_len 1024 \
--tp_size 4
# Step 3: 启动 Triton Inference Server
docker run --gpus all \
-v /models:/models \
nvcr.io/nvidia/tritonserver:24.05-trtllm-python-py3 \
tritonserver --model-repository=/models
编译时间:70B 模型约 30-60 分钟。
适配新模型慢
新模型出来,往往要等 NVIDIA 团队适配。比如 DeepSeek-V3 出来后,vLLM 一周内支持,TensorRT-LLM 等了 2 个月。
工程化要求高
需要懂 Triton Inference Server、tensorrt 配置等。
什么时候值得用 TensorRT-LLM:
- 流量极大(每秒上千请求)
- 性能差 10% 都心疼(推理成本 > $50K/月)
- 团队有 NVIDIA 工程师 / 经验
- 模型相对稳定(不要频繁换)
什么时候不要用:
- 创业期、快速迭代
- 团队小、运维资源有限
- 经常切换模型
4.4 TGI:HuggingFace 的"亲儿子"
TGI 的核心定位是与 HF 工具链无缝集成。
优势:
- 和 HF Inference Endpoints / Hub 完美打通
- 模型加载、版本管理用 HF API
- 商业版(HF Inference Endpoints)一键部署到云
当下地位:
- 在 HuggingFace 内部用得多
- 企业用户的 "fallback" 选项
- 性能不再领先,但稳定
典型启动:
bash
docker run --gpus all -p 8080:80 \
-v /data:/data \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id Qwen/Qwen3-32B-Instruct \
--num-shard 4 \
--max-input-length 32000 \
--max-total-tokens 32768
4.5 lmdeploy:国产框架的代表
OpenMMLab 出品 ,主打轻量、中文、国产硬件友好。
核心创新:
- TurboMind 引擎:自研 CUDA 优化
- W4A16 自研量化:性能优于 GPTQ
- InternLM 系列原生支持
典型启动:
bash
lmdeploy serve api_server Qwen/Qwen3-32B-Instruct \
--tp 4 \
--backend turbomind \
--cache-max-entry-count 0.9 \
--quant-policy 8 \
--server-port 23333
适用场景:
- InternLM 系列部署
- 中文场景(HF 镜像问题)
- 部分国产卡支持(910B)
- 嵌入式 / 轻量场景
五、场景化选型
5.1 决策树
你的核心需求是什么?
│
├─ 通用对话 / QA 服务
│ └─ vLLM ⭐
│
├─ Agent / 复杂工作流 / 严格 JSON
│ └─ SGLang ⭐
│
├─ 极致性能(性能差 10% 都心疼)
│ └─ TensorRT-LLM ⭐
│
├─ HuggingFace 生态深度绑定
│ └─ TGI
│
├─ 国产硬件 / InternLM 模型
│ └─ lmdeploy
│
└─ 端侧 / 个人开发
└─ 第 18 篇:Ollama / LM Studio
5.2 业务场景推荐
| 业务场景 | 首选 | 备选 |
|---|---|---|
| 通用聊天助手 | vLLM | SGLang |
| 客服 / FAQ(结构化输出) | SGLang | vLLM |
| 文档生成 | vLLM | SGLang |
| Code 助手 | vLLM | SGLang |
| Agent / 工具调用 | SGLang | vLLM |
| 多模态服务 | vLLM | SGLang |
| 大流量 ToC(万 QPS+) | TensorRT-LLM | vLLM |
| 创业 MVP | vLLM | SGLang |
| 企业内网 | vLLM | lmdeploy |
| 国产合规 | lmdeploy | vLLM |
5.3 团队规模 vs 框架
| 团队规模 | 推荐 | 理由 |
|---|---|---|
| 1-3 人 | vLLM | 上手最快 |
| 4-10 人 | vLLM / SGLang | 看场景 |
| 10-30 人 | vLLM / SGLang | 同上 |
| 30+ 人,有 SRE | + TensorRT-LLM 优化关键路径 | 性能榨干 |
5.4 一些反直觉的建议
建议 1 :不要追求"全栈最优"。
不同业务用不同框架,是合理的。比如:
- ToC 聊天 → vLLM
- 内部 Agent → SGLang
- 嵌入式 / 端侧 → Ollama
建议 2 :性能不是唯一指标。
10% 的性能差异,不抵 50% 的运维成本差异。
建议 3 :慎用 TensorRT-LLM 作首选。
它的"性能优势"在生产场景下经常被工程化代价抵消。除非你有专门的优化团队。
六、迁移成本与生态
6.1 API 兼容性
好消息:5 个框架都支持 OpenAI 兼容 API。
python
from openai import OpenAI
# 同样的代码,只改 base_url
client = OpenAI(base_url="http://vllm:8000/v1") # vLLM
client = OpenAI(base_url="http://sglang:30000/v1") # SGLang
client = OpenAI(base_url="http://triton:8000/v2/...") # TensorRT-LLM (Triton)
client = OpenAI(base_url="http://tgi:8080/v1") # TGI
client = OpenAI(base_url="http://lmdeploy:23333/v1") # lmdeploy
坏消息:高级特性不一定兼容。
- vLLM 的
lora_request参数 → SGLang 不一样 - SGLang 的
regexJSON 模式 → vLLM 用 outlines - TensorRT-LLM 的 ensemble 模式 → 完全不同
6.2 迁移工程量
| 迁移方向 | 工程量 |
|---|---|
| vLLM → SGLang | 中(API 类似,配置不同) |
| vLLM → TGI | 小(启动参数改) |
| vLLM → TensorRT-LLM | 大(需重新编译模型) |
| vLLM → lmdeploy | 中(部分 API 差异) |
6.3 灵活策略:多框架共存
生产实践:可以用网关层抽象掉框架差异:
┌─ vLLM (通用)
LLM Gateway ──┼─ SGLang (Agent)
├─ TensorRT-LLM (高流量)
└─ Ollama (内部测试)
↑
按业务路由到合适框架
业界已经有不少开源的 LLM Gateway(如 LiteLLM、Portkey、Kong AI Gateway)支持这种模式。
七、扩展话题与下一篇预告
7.1 谁会替代 vLLM?
SGLang 是最强挑战者,因为:
- 性能已经追平甚至超过 vLLM
- 结构化输出在 Agent 时代越来越重要
- 编程模型对复杂应用友好
但 vLLM 的生态优势 短期内难以撼动。未来 1-2 年的格局可能是 vLLM + SGLang 二分天下。
7.2 TensorRT-LLM 的简化
NVIDIA 也意识到 TensorRT-LLM 的"使用门槛过高"问题,正在简化:
- 2024 推出
trt-llm serve命令(类似 vLLM) - 计划支持 HF 模型直接加载(不用预编译)
- 与 NIM(NVIDIA Inference Microservices)整合
未来如果使用门槛降下来,TensorRT-LLM 份额会回升。
7.3 下一篇预告
- 第 18 篇:本地化部署 - Ollama 与 LM Studio 的轻量级方案 ------ 从企业级框架转向个人/小团队/端侧。我们会讲清 Ollama / LM Studio / llama.cpp 三大本地化方案的差异和实战。
之后是 OpenAI 兼容 API 服务化(19 篇)、分布式推理(20 篇)。
结语:没有"最好",只有"最合适"
读完本文你应该明白:
- vLLM 是 80% 场景的最佳选择------稳健、生态广、易用
- SGLang 在结构化 / Agent 场景碾压------RadixAttention + 编程模型
- TensorRT-LLM 性能上限最高------但工程化成本高
- TGI 适合 HF 生态深度用户------稳定但不再领先
- lmdeploy 国产化、中文场景 ------OpenMMLab 系生态
- OpenAI 兼容 API 让迁移成本可控------但要注意特性差异
- 多框架共存 是大团队的实际选择
下一篇我们继续:
- 第 18 篇:本地化部署 - Ollama 与 LM Studio ------ 当你不想搭服务器、不想花钱、只想在自己笔记本上跑大模型时,怎么选。
我们下篇见。
📮 关于「码海寻道」
这里是一个聚焦 AI 工程化、大模型部署、后端架构实战的技术专栏。
写最一线的踩坑经验,做最务实的技术拆解。
如果这篇文章对你有启发,欢迎点赞、转发、关注。我们下篇见。