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 | maurice_wen@proton.me