推理框架对比:vLLM vs TensorRT-LLM vs SGLang
推理框架选择很多:vLLM、TensorRT-LLM、SGLang、Text Generation Inference...
各有特点,怎么选?这篇对比主流框架,帮你做决策。
框架概览
| 框架 | 开发者 | 主要特点 |
|---|---|---|
| vLLM | UC Berkeley | PagedAttention,高吞吐 |
| TensorRT-LLM | NVIDIA | 极致优化,低延迟 |
| SGLang | UC Berkeley | 结构化生成,编程友好 |
| TGI | Hugging Face | 易部署,生态好 |
| DeepSpeed-MII | 微软 | 低延迟,易用 |
| LMDeploy | 商汤 | 国产,性能不错 |
vLLM
特点
- PagedAttention:显存利用率高
- Continuous Batching:高吞吐
- 兼容 OpenAI API:迁移方便
- 社区活跃:更新快
优点
- 吞吐高,并发能力强
- 显存效率好
- 支持模型多(LLaMA、Mistral、Qwen 等)
- 易用,开箱即用
- 社区大,问题好解决
缺点
- TTFT 不是最优
- 自定义 kernel 较少
- 部分模型支持不如 TensorRT-LLM
适合场景
- 高并发在线服务
- 对吞吐要求高
- 快速部署
代码示例
from vllm import LLM, SamplingParams
llm = LLM(model="meta-llama/Llama-2-7b-hf")
outputs = llm.generate(["Hello"], SamplingParams(max_tokens=100))
TensorRT-LLM
特点
- NVIDIA 官方:针对 GPU 深度优化
- 极致性能:延迟最低
- FP8 支持:H100 上效果好
- 量化支持全:INT8、INT4、FP8
优点
- 延迟最低(kernel 级优化)
- H100 上性能最强
- 量化效果好
- 官方支持,稳定
缺点
- 配置复杂,学习成本高
- 需要先编译模型
- 灵活性不如 vLLM
- 部分特性需要 Triton 配合
适合场景
- 延迟敏感场景
- NVIDIA 硬件(尤其 H100)
- 有专业团队
使用流程
# 1. 转换模型
python convert_checkpoint.py \
--model_dir ./llama-7b \
--output_dir ./trt_ckpt \
--dtype float16
# 2. 构建引擎
trtllm-build \
--checkpoint_dir ./trt_ckpt \
--output_dir ./trt_engine \
--gemm_plugin float16
# 3. 运行推理
python run.py --engine_dir ./trt_engine
比 vLLM 复杂不少。
SGLang
特点
- 结构化生成:支持 JSON、正则约束
- RadixAttention:前缀缓存优化
- 编程友好:Python 原生语法
优点
- 结构化输出(JSON、正则)原生支持
- 前缀缓存效率高
- API 设计优雅
- Agent 场景友好
缺点
- 社区相对小
- 模型支持不如 vLLM 全
- 文档相对少
适合场景
- 需要结构化输出
- Agent / Tool Use 场景
- 对 API 设计有要求
代码示例
import sglang as sgl
@sgl.function
def example(s):
s += "Write a JSON object with name and age:\n"
s += sgl.gen("json_output", regex=r'\{"name": "\w+", "age": \d+\}')
state = example.run()
print(state["json_output"])
结构化生成很方便。
Text Generation Inference (TGI)
特点
- Hugging Face 官方
- 易部署:Docker 一键启动
- 生态好:和 HF 无缝集成
优点
- 部署最简单
- HuggingFace 模型开箱即用
- 文档全
- 稳定
缺点
- 性能不如 vLLM 和 TRT-LLM
- 功能更新较慢
- 自定义能力弱
适合场景
- 快速验证
- HuggingFace 生态用户
- 对性能要求不极端
部署示例
docker run --gpus all -p 8080:80 \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id meta-llama/Llama-2-7b-hf
一行命令启动。
性能对比
吞吐(tokens/s)
LLaMA-7B,A100 80GB:
| 框架 | 并发 1 | 并发 32 | 并发 128 |
|---|---|---|---|
| vLLM | 35 | 800 | 1500 |
| TensorRT-LLM | 40 | 900 | 1700 |
| TGI | 30 | 500 | 900 |
| SGLang | 35 | 750 | 1400 |
TensorRT-LLM 最高,vLLM 和 SGLang 接近。
延迟(TTFT)
| 框架 | TTFT(ms) |
|---|---|
| TensorRT-LLM | 50 |
| vLLM | 80 |
| SGLang | 85 |
| TGI | 120 |
TensorRT-LLM 延迟最低。
显存效率
| 框架 | 显存利用率 |
|---|---|
| vLLM | ~95% |
| SGLang | ~90% |
| TensorRT-LLM | ~85% |
| TGI | ~70% |
vLLM 显存效率最高。
功能对比
| 功能 | vLLM | TRT-LLM | SGLang | TGI |
|---|---|---|---|---|
| Continuous Batching | ✅ | ✅ | ✅ | ✅ |
| PagedAttention | ✅ | ✅ | ✅ | ✅ |
| FP8 量化 | ✅ | ✅ | ✅ | ❌ |
| INT4 量化 | ✅ | ✅ | ✅ | ✅ |
| 结构化生成 | 有限 | ❌ | ✅ | 有限 |
| Speculative Decoding | ✅ | ✅ | ✅ | ❌ |
| 多模态 | ✅ | ✅ | ✅ | ✅ |
| OpenAI API 兼容 | ✅ | 需配合 | ✅ | ✅ |
| 易用性 | 高 | 低 | 中 | 高 |
怎么选
决策树
需要结构化输出(JSON、正则)?
├── 是 → SGLang
└── 否 →
延迟要求极高(<50ms TTFT)?
├── 是 → TensorRT-LLM
└── 否 →
需要快速部署,不想折腾?
├── 是 → TGI 或 vLLM
└── 否 →
高并发,吞吐优先?
├── 是 → vLLM
└── 否 → 根据团队情况选
按场景推荐
| 场景 | 推荐 | 理由 |
|---|---|---|
| 高并发 API 服务 | vLLM | 吞吐高,显存效率好 |
| 延迟敏感服务 | TensorRT-LLM | 延迟最低 |
| Agent / Tool Use | SGLang | 结构化生成好 |
| 快速验证 | TGI | 部署最简单 |
| H100 部署 | TensorRT-LLM | FP8 优化 |
| 显存紧张 | vLLM | PagedAttention |
按团队推荐
| 团队 | 推荐 |
|---|---|
| 小团队/个人 | vLLM 或 TGI |
| 有 infra 能力 | TensorRT-LLM |
| 做 Agent 产品 | SGLang |
| HuggingFace 重度用户 | TGI |
组合使用
一些高级用法:
vLLM + 其他
vLLM 做主力推理,其他框架做特定场景:
在线服务:vLLM
延迟敏感场景:TensorRT-LLM
结构化输出:SGLang
Triton + TensorRT-LLM
NVIDIA Triton Inference Server + TensorRT-LLM:
- Triton 做请求管理、负载均衡
- TensorRT-LLM 做实际推理
这是企业级部署的常见方案。
未来趋势
性能趋同
各框架都在互相学习,性能差距在缩小:
- vLLM 在优化延迟
- TensorRT-LLM 在改善易用性
- SGLang 在提升吞吐
新特性
- Speculative Decoding:都在支持
- 长上下文优化:128K+ 上下文
- 多模态:图片、视频输入
- FP8/FP4:更激进的量化
生态整合
框架之间可能会更好地集成,或者出现统一的抽象层。
小结
框架选择速查:
| 框架 | 一句话 |
|---|---|
| vLLM | 高吞吐首选,生产环境主力 |
| TensorRT-LLM | 延迟极致,需要专业能力 |
| SGLang | 结构化生成,Agent 友好 |
| TGI | 快速部署,入门友好 |
建议:
- 先用 vLLM 跑通
- 有延迟要求上 TensorRT-LLM
- 需要结构化输出试 SGLang
推理篇结束。下一部分讲模型评测。