LLM推理框架对比:vLLM vs TGI vs SGLang vs TensorRT-LLM
AI 导读
LLM推理框架对比:vLLM vs TGI vs SGLang vs TensorRT-LLM 四大推理框架的吞吐量、延迟优化、显存效率与工程化部署对比 | 2026-02 一、推理框架的核心价值 大模型的推理成本占总运营成本的 80% 以上。推理框架的选择直接决定了每 token 的成本、首 token 延迟(TTFT)、生成吞吐量和并发承载能力。 本文对比 vLLM、TGI(Text...
LLM推理框架对比:vLLM vs TGI vs SGLang vs TensorRT-LLM
四大推理框架的吞吐量、延迟优化、显存效率与工程化部署对比 | 2026-02
一、推理框架的核心价值
大模型的推理成本占总运营成本的 80% 以上。推理框架的选择直接决定了每 token 的成本、首 token 延迟(TTFT)、生成吞吐量和并发承载能力。
本文对比 vLLM、TGI(Text Generation Inference)、SGLang 和 TensorRT-LLM 四大推理框架。
二、架构设计
2.1 基础信息
| 维度 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| 团队 | UC Berkeley | Hugging Face | UC Berkeley / LMSYS | NVIDIA |
| 语言 | Python + C++/CUDA | Rust + Python | Python + C++/CUDA | C++ + Python |
| 协议 | Apache 2.0 | Apache 2.0 | Apache 2.0 | Apache 2.0 |
| 核心创新 | PagedAttention | Continuous Batching | RadixAttention | TensorRT 编译优化 |
| API 兼容 | OpenAI | OpenAI + HF | OpenAI | OpenAI + Triton |
| 模型支持 | 广泛 | 广泛 | 广泛 | 需编译 |
2.2 核心架构对比
vLLM Architecture:
Request Queue -> Scheduler -> PagedAttention Engine
| |
Dynamic KV Cache managed
Batching like virtual memory
| |
GPU Kernel Physical blocks
Execution allocated on demand
TGI Architecture:
Request Queue -> Token Streaming Router -> Model Shard
| |
Continuous Rust-native
Batching HTTP server
| |
Flash Attention CUDA graphs
+ Paged Attention
SGLang Architecture:
Request Queue -> RadixAttention Engine -> Constrained Decoding
| |
Radix Tree for JSON schema
KV cache sharing enforcement
| |
Prefix-aware Jump-forward
scheduling decoding
TensorRT-LLM Architecture:
Model Definition -> TensorRT Compiler -> Optimized Engine
| |
Graph fusion FP8/INT4 kernels
Layer merging Custom CUDA kernels
| |
Quantization Inflight batching
calibration
2.3 关键技术创新
| 技术 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| PagedAttention | 发明者 | 采用 | 采用 | 采用 |
| RadixAttention | 否 | 否 | 发明者 | 否 |
| Continuous Batching | 是 | 发明者 | 是 | 是 |
| Speculative Decoding | 是 | 是 | 是 | 是 |
| Prefix Caching | 是 | 是 | 原生(Radix) | 是 |
| Chunked Prefill | 是 | 是 | 是 | 是 |
| CUDA Graphs | 是 | 是 | 是 | 深度优化 |
| 量化推理 | AWQ/GPTQ/FP8 | AWQ/GPTQ/EETQ | AWQ/GPTQ/FP8 | FP8/INT4/INT8 |
三、性能基准
3.1 吞吐量对比(Llama-3-70B, 2xA100-80G)
| 指标 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| 吞吐量(tokens/s) | 2800 | 2400 | 3200 | 3500 |
| TTFT p50 (ms) | 120 | 150 | 100 | 90 |
| TTFT p99 (ms) | 350 | 400 | 280 | 250 |
| ITL p50 (ms) | 25 | 30 | 22 | 20 |
| ITL p99 (ms) | 45 | 55 | 40 | 35 |
| 最大并发 | 256 | 128 | 256 | 256 |
| GPU 利用率 | 85% | 80% | 88% | 92% |
3.2 显存效率(Llama-3-8B, 1xA100-80G)
| 指标 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| 模型加载 | 16GB | 16GB | 16GB | 14GB(编译后) |
| KV Cache | 动态分配 | 动态分配 | Radix 共享 | 预分配 |
| 最大 batch size | 128 | 64 | 128 | 128 |
| 显存利用率 | 90% | 85% | 92% | 95% |
| Prefix 复用率 | 30-50% | 20-30% | 50-70% | 30-40% |
3.3 SGLang RadixAttention 优势
SGLang 在有大量共享前缀的场景下表现最突出:
# Scenario: Chat application with system prompt reuse
# System prompt: 2000 tokens (shared across all requests)
# User messages: 100-500 tokens (unique per request)
# Traditional approach: each request processes full context
# SGLang RadixAttention: system prompt KV cache shared via radix tree
"""
Radix Tree KV Cache Structure:
[System Prompt: 2000 tokens]
/ | \
[User A: [User B: [User C:
100 tok] 300 tok] 200 tok]
| | |
[Asst A: [Asst B: [Asst C:
200 tok] 150 tok] 300 tok]
Prefix sharing ratio: 2000 / (2000 + avg_unique) = ~80%
Memory saving: ~4x compared to no sharing
TTFT improvement: ~3-5x for subsequent requests
"""
# Benchmark results for chat with shared system prompt:
# Framework | Throughput | TTFT (cached) | Memory
# vLLM | 2800 t/s | 120ms | 60GB
# SGLang | 4200 t/s | 25ms | 35GB <-- 50% more throughput
# TensorRT-LLM | 3500 t/s | 90ms | 45GB
四、模型支持
4.1 模型兼容性矩阵
| 模型 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| Llama 3/3.1 | Day-0 | Day-0 | Day-0 | Day-0 |
| Qwen2.5 | 是 | 是 | 是 | 是 |
| DeepSeek-V3 (MoE) | 社区 | 否 | 官方推荐 | 部分 |
| Mistral/Mixtral | 是 | 是 | 是 | 是 |
| Gemma 2 | 是 | 是 | 是 | 是 |
| GLM-4 | 是 | 是 | 是 | 部分 |
| 多模态(VLM) | 是(LLaVA等) | 是 | 是 | 部分 |
| Embedding 模型 | 是 | 否 | 否 | 否 |
| 新模型适配速度 | 1-3天 | 1-7天 | 1-3天 | 7-30天 |
4.2 量化支持
| 量化方法 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| FP16/BF16 | 是 | 是 | 是 | 是 |
| FP8 (E4M3) | 是 | 是 | 是 | 是(最优) |
| AWQ (INT4) | 是 | 是 | 是 | 是 |
| GPTQ (INT4) | 是 | 是 | 是 | 是 |
| SqueezeLLM | 是 | 否 | 否 | 否 |
| INT8 Smooth | 否 | 否 | 否 | 是 |
| Marlin kernel | 是 | 否 | 是 | 否 |
五、部署工程化
5.1 部署复杂度
| 维度 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| pip install | 是 | 否(Docker优先) | 是 | 是(trtllm-build) |
| Docker 镜像 | 官方 | 官方(推荐) | 官方 | 官方(NVIDIA NGC) |
| 编译步骤 | 无 | 无 | 无 | 需要(模型编译) |
| 配置复杂度 | 低 | 低 | 低 | 高 |
| 首次启动时间 | <30s | <30s | <30s | 5-30min(编译) |
| K8s Operator | 社区 | 官方 | 社区 | NVIDIA Triton |
5.2 快速部署示例
# vLLM: Simplest deployment
pip install vllm
vllm serve meta-llama/Llama-3.1-8B-Instruct \
--tensor-parallel-size 1 \
--max-model-len 8192 \
--gpu-memory-utilization 0.9
# TGI: Docker-first
docker run --gpus all \
-p 8080:80 \
-v /data/models:/data \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id meta-llama/Llama-3.1-8B-Instruct \
--max-input-length 4096 \
--max-total-tokens 8192
# SGLang: Similar to vLLM
pip install sglang[all]
python -m sglang.launch_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--tp 1 \
--port 30000
# TensorRT-LLM: Multi-step compilation
# Step 1: Convert model to TRT-LLM format
python convert_checkpoint.py \
--model_dir /models/llama-3.1-8b \
--output_dir /engines/llama-3.1-8b/checkpoint \
--dtype float16
# Step 2: Build TensorRT engine
trtllm-build \
--checkpoint_dir /engines/llama-3.1-8b/checkpoint \
--output_dir /engines/llama-3.1-8b/engine \
--max_batch_size 128 \
--max_input_len 4096 \
--max_seq_len 8192 \
--gemm_plugin float16
# Step 3: Serve
python -m tensorrt_llm.serve \
--model_dir /engines/llama-3.1-8b/engine \
--port 8000
5.3 生产化配置
# vLLM production configuration
# serve_config.yaml
engine_args:
model: "meta-llama/Llama-3.1-70B-Instruct"
tensor_parallel_size: 2
max_model_len: 32768
gpu_memory_utilization: 0.92
enable_prefix_caching: true
max_num_seqs: 256
quantization: "awq"
enforce_eager: false # Use CUDA graphs
serving_args:
host: "0.0.0.0"
port: 8000
api_key: "${VLLM_API_KEY}"
max_log_len: 100
disable_log_stats: false
uvicorn_log_level: "warning"
# Health check: GET /health
# Metrics: GET /metrics (Prometheus format)
# OpenAI API: POST /v1/chat/completions
六、高级功能
6.1 Speculative Decoding
| 维度 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| Draft model | 是 | 是 | 是 | 是 |
| Medusa heads | 是 | 是 | 否 | 否 |
| Eagle | 否 | 否 | 是 | 否 |
| 加速比 | 1.5-2x | 1.3-1.8x | 1.5-2.2x | 1.5-2x |
6.2 结构化输出 / Constrained Decoding
# SGLang: Native constrained decoding (fastest)
import sglang as sgl
@sgl.function
def extract_info(s, text):
s += sgl.system("Extract structured information.")
s += sgl.user(text)
s += sgl.assistant(
sgl.gen("output", regex=r'\{"name": "[^"]+", "age": \d+\}')
)
# vLLM: Guided decoding via outlines
from vllm import LLM, SamplingParams
llm = LLM(model="meta-llama/Llama-3.1-8B-Instruct")
# JSON schema guided generation
from pydantic import BaseModel
class UserInfo(BaseModel):
name: str
age: int
city: str
params = SamplingParams(
temperature=0.0,
max_tokens=256,
guided_json=UserInfo.model_json_schema(),
)
outputs = llm.generate(["Extract user info from: ..."], params)
6.3 多模态推理支持
| 维度 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| Vision (图片) | LLaVA/Qwen-VL | IDEFICS/LLaVA | LLaVA/Qwen-VL | 部分支持 |
| 音频 | Whisper(有限) | 否 | 否 | Whisper |
| 视频 | 否 | 否 | 否 | 否 |
| 图片批处理 | 是 | 是 | 是 | 否 |
七、运维与可观测性
7.1 监控指标
| 指标 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| Prometheus | 是 | 是 | 是 | Triton 集成 |
| Grafana 模板 | 社区 | 官方 | 社区 | NVIDIA 模板 |
| 请求延迟分布 | 是 | 是 | 是 | 是 |
| GPU 利用率 | 是 | 是 | 是 | 是 |
| KV Cache 命中率 | 是 | 否 | 是(Radix) | 否 |
| 队列深度 | 是 | 是 | 是 | 是 |
| Token 吞吐量 | 是 | 是 | 是 | 是 |
7.2 故障处理
| 能力 | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| OOM 恢复 | 重启 | 重启 | 重启 | 重启 |
| 请求超时 | 可配置 | 可配置 | 可配置 | Triton 配置 |
| 热更新模型 | 否 | 否 | 否 | 否 |
| 多副本负载均衡 | 外部(nginx) | 外部 | 外部 | Triton 内置 |
| 优雅关闭 | 是 | 是 | 是 | 是 |
八、选型决策
8.1 按场景推荐
| 场景 | 首选 | 理由 |
|---|---|---|
| 通用 LLM 服务 | vLLM | 最广模型支持,社区最大 |
| 聊天应用(共享前缀多) | SGLang | RadixAttention 前缀复用最优 |
| NVIDIA GPU 极致优化 | TensorRT-LLM | 编译优化吞吐量最高 |
| HuggingFace 生态 | TGI | 原生集成,Inference Endpoints |
| DeepSeek-V3 MoE | SGLang | 官方推荐框架 |
| 结构化输出需求 | SGLang | 约束解码原生最快 |
| 快速部署/测试 | vLLM | 一行 pip install 即可 |
| Embedding 服务 | vLLM | 唯一支持 Embedding 的框架 |
8.2 综合评分
| 维度(权重) | vLLM | TGI | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| 吞吐量(25%) | 8.0 | 7.0 | 9.0 | 9.5 |
| 延迟(20%) | 8.0 | 7.5 | 9.0 | 9.5 |
| 易用性(20%) | 9.5 | 8.0 | 9.0 | 5.0 |
| 模型支持(15%) | 9.5 | 8.5 | 9.0 | 7.0 |
| 生态/社区(10%) | 9.0 | 8.5 | 7.5 | 7.0 |
| 高级功能(10%) | 8.0 | 7.0 | 9.0 | 8.0 |
| 加权总分 | 8.7 | 7.6 | 8.9 | 7.8 |
九、总结
LLM 推理框架的竞争正在从"谁更快"转向"谁在特定场景更优"。vLLM 以广泛兼容性和简易部署成为默认选择;SGLang 在前缀缓存和结构化输出上领先;TensorRT-LLM 在纯吞吐量上仍是王者但牺牲了灵活性;TGI 适合 HuggingFace 生态用户。
实际选型建议:先用 vLLM 快速验证,有性能瓶颈时按场景迁移到 SGLang 或 TensorRT-LLM。
Maurice | [email protected]
深度加工(NotebookLM 生成)
基于本文内容生成的 PPT 大纲、博客摘要、短视频脚本与 Deep Dive 播客,用于多场景复用
PPT 大纲(5-8 张幻灯片) 点击展开
LLM推理框架对比:vLLM vs TGI vs SGLang vs TensorRT-LLM — ppt
这是一份基于您提供的文章整理的 PPT 大纲,共包含 6 张幻灯片,采用 Markdown 格式输出:
幻灯片 1:LLM 推理框架的核心价值与对比
- 降低运营成本:大模型的推理成本通常占总运营成本的 80% 以上,框架的选择至关重要 [1]。
- 核心优化指标:优秀的推理框架能够直接优化每 token 的成本、首 token 延迟(TTFT)、生成吞吐量和并发承载能力 [1]。
- 四大主流框架:本次重点对比行业内四大主流框架:vLLM、TGI、SGLang 和 TensorRT-LLM [1]。
幻灯片 2:核心架构与技术创新
- vLLM:首创 PagedAttention 技术,像管理虚拟内存一样动态管理 KV Cache,具有极其广泛的模型支持 [1, 2]。
- TGI (Text Generation Inference):由 Hugging Face 团队开发,采用 Rust 原生 HTTP 服务器与连续批处理(Continuous Batching)技术 [1, 2]。
- SGLang:首创 RadixAttention 技术,实现前缀感知调度与 KV cache 共享,擅长约束解码 [1, 2]。
- TensorRT-LLM:基于深度图融合与自定义 CUDA 核心优化,支持 FP8/INT4 量化推理,但需要提前编译模型 [2]。
幻灯片 3:性能基准与显存效率对比
- 吞吐量表现极限:在 Llama-3-70B 测试中,TensorRT-LLM (3500 tokens/s) 和 SGLang (3200 tokens/s) 的吞吐量位居前两名 [2]。
- 响应延迟(TTFT):首 token 延迟最低的是 TensorRT-LLM (90ms) 和 SGLang (100ms) [2]。
- 显存与并发利用率:四大框架显存利用率均在 85% 以上,其中 TensorRT-LLM 通过预分配方式达到了最高的 95% [2, 3]。
- 前缀复用优势:在共享系统提示词的聊天场景下,SGLang 的 RadixAttention 可节省约 4 倍显存,并将后续请求延迟降低 3-5 倍 [3]。
幻灯片 4:模型兼容性与量化支持
- 新模型适配速度:vLLM 和 SGLang 适配极快(1-3天),TGI 需 1-7 天,而 TensorRT-LLM 适配较慢(7-30天) [4]。
- 多模态与特殊模型:多数框架支持视觉(VLM)模型,但目前仅有 vLLM 唯一支持 Embedding 模型服务 [4, 5]。
- 量化方案支持:四大框架均支持 FP16/BF16 以及 AWQ/GPTQ (INT4) 量化,TensorRT-LLM 在 FP8 与 INT8 Smooth 量化上支持最全面 [2, 4]。
幻灯片 5:部署复杂度与工程化
- 部署便捷度:vLLM 和 SGLang 最易部署,仅需一行
pip install即可完成安装并启动 [4, 5]。 - 容器化支持:TGI 官方优先推荐 Docker 部署模式;TensorRT-LLM 则需要依赖官方的 NVIDIA NGC 镜像 [4]。
- 启动与配置成本:前三者首次启动时间均小于 30 秒且配置简单,而 TensorRT-LLM 需要 5-30 分钟进行多步编译转换 [4, 6]。
幻灯片 6:场景化选型决策建议
- 通用服务与快速验证:首选 vLLM,它拥有最大的社区生态、最广泛的模型支持以及最简单的部署体验 [5, 7]。
- 聊天应用与结构化输出:推荐使用 SGLang,它在共享前缀(RadixAttention)复用和原生约束解码上速度最快 [5, 7]。
- 追求极致性能:在 NVIDIA GPU 环境下追求最高吞吐量时,选择 TensorRT-LLM(适合固定模型长期部署) [5, 7]。
- Hugging Face 生态:如果深度依赖 Hugging Face 平台或 Inference Endpoints,推荐使用原生集成的 TGI 框架 [7]。
博客摘要 + 核心看点 点击展开
LLM推理框架对比:vLLM vs TGI vs SGLang vs TensorRT-LLM — summary
这是一份为您定制的 SEO 友好博客摘要及核心看点:
SEO 友好博客摘要(约 150 字)
大模型的推理成本占总运营成本的 80% 以上,选择合适的推理框架至关重要 [1]。本文深度对比了当前主流的四大 LLM 推理框架:vLLM、TGI、SGLang 与 TensorRT-LLM [1]。文章从生成吞吐量、首 token 延迟(TTFT)、显存利用率及工程部署复杂度等核心维度进行了全方位剖析 [1, 2]。无论您是寻求 TensorRT-LLM 的极致吞吐量,还是需要 SGLang 高效处理大量共享前缀,亦或是追求 vLLM 一键部署的易用性,本文都为您提供了明确的场景化选型决策指南 [3]。建议开发者遵循“先用 vLLM 验证,遇瓶颈按需迁移”的最佳实践 [3]。
3 条核心看点
- vLLM 主打易用,TensorRT-LLM 追求极致:vLLM 兼容性最广且易部署,是默认首选;TensorRT-LLM 则能提供最高吞吐量 [3]。
- SGLang 专精前缀复用与结构化输出:凭借 RadixAttention 技术,在聊天等共享前缀场景下大幅提升吞吐量与显存效率 [3, 4]。
- 基于特定业务场景的务实选型:TGI 契合 HF 生态;框架选择不再盲从速度,建议先以 vLLM 快速跑通,再按需平滑迁移 [3]。
60 秒短视频脚本 点击展开
LLM推理框架对比:vLLM vs TGI vs SGLang vs TensorRT-LLM — video
这是一段为您定制的 60 秒短视频脚本,已严格按照您的字数和结构要求撰写:
【钩子开场】(14字)
推理占八成成本,框架怎么选?[1]
【核心解说1】(26字)
vLLM兼容最广、一行代码即可部署,是通用场景的默认首选。[2-4]
【核心解说2】(28字)
聊天场景选SGLang,Radix机制优化前缀复用,极致省显存![4, 5]
【核心解说3】(27字)
追求极致吞吐选TensorRT-LLM,性能最强但编译配置复杂。[4, 6, 7]
【收束】(1 句)
建议先用vLLM快速验证,遇到性能瓶颈再按需迁移![4]
课后巩固
与本文内容匹配的闪卡与测验,帮助巩固所学知识
延伸阅读
根据本文主题,为你推荐相关的学习资料