LLM 推理引擎横评:vLLM vs SGLang vs TensorRT-LLM

作者:Maurice | 灵阙学院


导读

如果你正在为自家产品部署开源大模型,这篇文章能帮你少踩至少半年的坑。推理引擎这个赛道看似底层,但它直接决定你的 GPU 成本、API 延迟和用户体验——对 AI 产品经理和技术负责人而言,选错引擎等于把钱烧进黑洞。

本文基于 2025-2026 年 H100/A100/B200 最新基准测试数据,横向对比三大主流引擎的架构设计、核心技术、性能表现和部署实战,最后给出清晰的选型决策树。


一、推理引擎的本质:把权重变成 API

训练好的模型是一堆浮点数权重文件。把它变成能处理真实并发请求的 HTTP API,中间有一个被严重低估的环节——推理引擎(Inference Serving Engine)。

模型权重 (.safetensors / .gguf)
        |
        v
  [推理引擎]
   - 内存管理(KV-Cache 分配)
   - 批处理调度(Continuous Batching)
   - 计算图优化(算子融合、量化)
   - 分布式协调(Tensor Parallel / Pipeline Parallel)
        |
        v
  HTTP API(OpenAI 兼容)
  /v1/chat/completions
  /v1/completions

推理引擎需要在两个维度上做平衡:

  • 吞吐量(Throughput):单位时间处理的 token 总数,影响 GPU 利用率和成本
  • 延迟(Latency):TTFT(首 token 时间)和 TBT(token 间隔时间),影响用户体验

这两者本质上存在张力:提高吞吐量需要攒批次(等更多请求凑在一起处理),而攒批次会增加单个请求的等待延迟。推理引擎的核心工程挑战就是如何在不同负载下动态平衡这个 trade-off。


二、三大引擎全景对比

2.1 架构速览(ASCII 图)

vLLM(伯克利 LMSYS)
┌─────────────────────────────────────────────┐
│  Python Frontend (FastAPI)                  │
│  ┌──────────────┐   ┌────────────────────┐  │
│  │ Scheduler    │   │  PagedAttention    │  │
│  │ (Continuous  │-->│  KV-Cache Manager  │  │
│  │  Batching)   │   │  (虚拟内存分页)     │  │
│  └──────────────┘   └────────────────────┘  │
│  ┌──────────────────────────────────────┐   │
│  │ Worker (Ray / Multiprocessing)       │   │
│  │ CUDA Kernels / Flash Attention       │   │
│  └──────────────────────────────────────┘  │
└─────────────────────────────────────────────┘

SGLang(伯克利 Sky Computing Lab)
┌─────────────────────────────────────────────┐
│  Python Frontend + SGL Language Runtime     │
│  ┌──────────────┐   ┌────────────────────┐  │
│  │ Scheduler    │   │  RadixAttention    │  │
│  │ + Constraint │-->│  前缀树 KV-Cache   │  │
│  │   Grammar    │   │  共享管理          │  │
│  └──────────────┘   └────────────────────┘  │
│  ┌──────────────────────────────────────┐   │
│  │ FlashInfer Kernels + Triton          │   │
│  └──────────────────────────────────────┘  │
└─────────────────────────────────────────────┘

TensorRT-LLM(NVIDIA 官方)
┌─────────────────────────────────────────────┐
│  C++ Engine Core + Python Bindings          │
│  ┌──────────────┐   ┌────────────────────┐  │
│  │ TRT Engine   │   │  Paged KV-Cache    │  │
│  │ (编译期优化) │-->│  FP8 / INT4 / INT8 │  │
│  │ Graph Fusion │   │  量化内核          │  │
│  └──────────────┘   └────────────────────┘  │
│  ┌──────────────────────────────────────┐   │
│  │ CUDA Graph + Triton / cuDNN          │   │
│  └──────────────────────────────────────┘  │
└─────────────────────────────────────────────┘

2.2 多维对比表格

维度 vLLM SGLang TensorRT-LLM
核心语言 Python / C++ CUDA Python / C++ / Triton C++ / Python Bindings
发布机构 UC Berkeley LMSYS UC Berkeley Sky Lab NVIDIA 官方
GitHub Stars(2026-02) ~46k ~22k ~10k
关键技术 PagedAttention RadixAttention TRT 编译图优化
前缀缓存共享 基础支持 原生前缀树(最优) 有限支持
分布式推理 Ray + Tensor Parallel Tensor / Pipeline Parallel Tensor / Pipeline Parallel
量化支持 INT4/INT8/FP8/AWQ/GPTQ INT4/INT8/FP8 INT4/INT8/FP8(最全)
结构化输出 支持(outlines) 原生支持(XGrammar) 有限
Speculative Decoding 支持 支持(Eagle / Medusa) 支持
多模态 LLaVA、Qwen-VL 等 部分 较全
硬件约束 NVIDIA 为主(AMD ROCm 实验) NVIDIA 为主 仅 NVIDIA
部署难度 低(pip install) 中(环境较重) 高(TRT 编译耗时)
OpenAI 兼容 API 原生 原生 需 Triton Server 封装
社区生态 最活跃(更新最快) 增长最快 企业支持
适用场景 通用、快速上线 Agent/多请求共享前缀 生产极致性能

三、核心技术深度解析

3.1 PagedAttention(vLLM 的基石)

Attention 计算需要在内存中保存每个 token 的 Key-Value 矩阵,称为 KV-Cache。传统方案预分配连续内存块,问题显而易见:

  • 请求长度未知,必须按最大长度预留 → 严重浪费
  • 内存碎片化 → GPU 内存利用率仅 20-40%

PagedAttention 的灵感来自操作系统的虚拟内存分页机制:

物理内存(GPU HBM)
┌───────┬───────┬───────┬───────┬───────┐
│Block 0│Block 1│Block 2│Block 3│Block 4│  <- 固定大小 Block(如 16 tokens)
└───────┴───────┴───────┴───────┴───────┘
    ^           ^       ^
    |           |       |
请求 A(16T)  请求 B(第1块)  请求 B(第2块)

KV-Cache 块表(逻辑 -> 物理映射):
Request A: [逻辑块0 -> 物理块0]
Request B: [逻辑块0 -> 物理块1, 逻辑块1 -> 物理块3]

效果:GPU 内存利用率从 40% 提升到 90%+,同等显存可服务的并发请求数提升 2-4 倍。

3.2 RadixAttention(SGLang 的差异化)

RadixAttention 在 PagedAttention 基础上引入**前缀树(Radix Tree)**结构管理 KV-Cache。

核心洞察:在 Agent 和多轮对话场景中,不同请求往往共享相同的前缀(如 System Prompt、RAG 检索结果、few-shot 示例)。

前缀树结构(多请求共享 KV-Cache):

               [System Prompt KV-Cache]
                       |
           ┌───────────┼───────────┐
           |           |           |
    [用户A问题]   [用户B问题]   [用户C问题]
    唯一后缀       唯一后缀       唯一后缀
    独立计算       独立计算       独立计算
  • System Prompt(1000 tokens)只计算一次,所有请求复用同一份 KV-Cache
  • 在 RAG 场景(检索结果作为 context)中收益尤其显著
  • 吞吐量在共享前缀场景下比 vLLM 高 2-5 倍

3.3 Flash Attention:必须集成的算子

Flash Attention(v1/v2/v3)是现代推理引擎的标配优化:

  • 将 Q、K、V 矩阵分块计算,避免完整注意力矩阵的 O(n²) 内存开销
  • Flash Attention 3(2024)在 H100 上利用 Tensor Core 的异步流水线,比 FA2 快 1.5-2 倍
  • 三大引擎均已集成,差异在于实现质量和版本更新速度

3.4 Continuous Batching(动态批处理)

传统静态批处理:等凑满 batch_size 才开始计算 → GPU 等待时间长、延迟高。

Continuous Batching:每个 decode step 后,调度器检查是否有新请求就绪,将其动态插入当前批次:

时间轴 ->
Step 1: [请求A] [请求B] [请求C]        (3个请求 decode)
Step 2: [请求A] [请求B] [请求C] [请求D] (D在Step1后插入)
Step 3: [请求A] [请求D]                (B、C完成,移出)

这是当前所有主流引擎的标准调度策略,GPU 利用率可接近 95%。

3.5 Speculative Decoding(推测解码)

自回归 decode 是串行的瓶颈:每次只能生成 1 个 token,GPU 大量时间在等待。

推测解码用一个小型 Draft 模型先猜多个 token,再用大模型批量验证:

草稿模型(小,如 68M 参数)快速生成候选:
  "the quick brown fox"

大模型(70B)并行验证全部 token:
  验证通过: "the quick brown"(3/4 通过)
  第一个错误的 token 及之后全部丢弃

净效果:生成速度提升 1.5-3x(取决于接受率)

vLLM、SGLang 均支持 Eagle/Medusa 等 Draft 模型加速方案。


四、性能基准测试数据

4.1 H100 单卡基准(Llama 3 70B,FP16)

测试条件:序列长度 1024 输入 + 512 输出,并发请求数 = 100

引擎 吞吐量(tokens/s) TTFT P50(ms) TTFT P99(ms) GPU 利用率
vLLM 0.6.x 12,400 245 890 87%
SGLang 0.4.x 16,800 198 720 91%
TensorRT-LLM 0.16 19,200 155 580 94%
SGLang(共享前缀场景) 28,500 85 310 93%

注:共享前缀场景模拟 Agent 应用(System Prompt 500 tokens,所有请求复用)

4.2 不同并发下的吞吐量曲线

吞吐量 (tokens/s)
   30k |                               ╔══════(TRT-LLM)
       |                         ╔════╝
   20k |               ╔════════╝╔═════(SGLang)
       |         ╔════╝    ╔════╝
   10k |   ╔════╝    ╔════╝
       |   ╔════╝╔══╝               (vLLM)
       |═══╝  ╔══╝
     0 +──────────────────────────────
       1    10    50   100   200   500  并发请求数

关键洞察:

  • 低并发(< 10):三者差距不大,延迟表现接近
  • 中并发(50-100):SGLang 在共享前缀场景领先,TRT-LLM 总吞吐占优
  • 高并发(200+):TRT-LLM 的 C++ 内核优势明显,vLLM 的 Python 调度成为瓶颈

4.3 量化模型性能对比(H100,Llama 3 70B)

精度 vLLM(tokens/s) SGLang(tokens/s) TRT-LLM(tokens/s) 内存占用
FP16 12,400 16,800 19,200 ~140 GB
INT8(W8A8) 17,200 22,100 26,500 ~70 GB
FP8(W8A8) 19,800 25,400 30,100 ~70 GB
INT4(AWQ) 23,500 29,200 35,800 ~35 GB

FP8 是 H100/B200 的甜蜜点:精度损失 < 1%,吞吐提升 50-60%

4.4 B200 上的最新数据(2025 H2 数据)

NVIDIA B200 搭载 HBM3e,理论带宽 8 TB/s(H100 的 2.4 倍)。

引擎 Llama 3 70B FP8 吞吐(tokens/s) 备注
TRT-LLM 0.18 ~75,000 官方优化,充分利用 B200 算子
SGLang 0.5.x ~58,000 社区快速跟进
vLLM 0.7.x ~48,000 Python 调度开销在高带宽下更明显

五、部署实战

5.1 vLLM:5 分钟上线

# 安装(需要 CUDA 12.1+)
pip install vllm

# 最简单的 OpenAI 兼容 API 服务
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-3-70b-instruct \
    --tensor-parallel-size 4 \
    --dtype float16 \
    --max-model-len 8192 \
    --host 0.0.0.0 \
    --port 8000
# Docker 部署(推荐生产使用)
docker run --runtime nvidia --gpus all \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    -p 8000:8000 \
    --ipc=host \
    vllm/vllm-openai:latest \
    --model meta-llama/Llama-3-70b-instruct \
    --tensor-parallel-size 4
# Python 调用(OpenAI 兼容)
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="token-not-needed"
)

response = client.chat.completions.create(
    model="meta-llama/Llama-3-70b-instruct",
    messages=[{"role": "user", "content": "解释一下 PagedAttention 的原理"}],
    temperature=0.7,
    max_tokens=512,
)
print(response.choices[0].message.content)

5.2 SGLang:激活前缀缓存

# 安装
pip install sglang[all]

# 启动(开启 RadixAttention 前缀缓存)
python -m sglang.launch_server \
    --model-path meta-llama/Llama-3-70b-instruct \
    --tp 4 \
    --enable-prefix-caching \
    --max-prefill-tokens 32768 \
    --host 0.0.0.0 \
    --port 30000
# Python 原生 SGLang 调用(充分利用前缀复用)
import sglang as sgl

@sgl.function
def agent_task(s, system_prompt, user_query):
    s += sgl.system(system_prompt)
    s += sgl.user(user_query)
    s += sgl.assistant(sgl.gen("answer", max_tokens=512))

# 多请求并行——相同 system_prompt 的 KV-Cache 自动复用
runtime = sgl.Runtime(model_path="meta-llama/Llama-3-70b-instruct", tp_size=4)
sgl.set_default_backend(runtime)

system = "你是一个专业的财务分析师。请基于以下内容作答..."  # 共享前缀

states = sgl.run_batch(
    agent_task,
    [{"system_prompt": system, "user_query": q} for q in user_queries],
    num_threads=64,
)

5.3 TensorRT-LLM:生产极致性能

# Step 1:拉取 NGC 容器(包含编译工具链)
docker pull nvcr.io/nvidia/tritonserver:24.12-trtllm-python-py3

# Step 2:构建 TRT 引擎(一次性,耗时 10-30 分钟)
# 在容器内执行
python convert_checkpoint.py \
    --model_dir /models/Llama-3-70b \
    --output_dir /engines/llama3-70b-fp8 \
    --tp_size 4 \
    --dtype float16 \
    --use_fp8

trtllm-build \
    --checkpoint_dir /engines/llama3-70b-fp8 \
    --output_dir /engines/llama3-70b-trt \
    --gpt_attention_plugin float16 \
    --gemm_plugin float16 \
    --use_paged_context_fmha enable \
    --max_batch_size 256 \
    --max_input_len 8192 \
    --max_seq_len 12288

# Step 3:通过 Triton Inference Server 暴露 OpenAI 兼容 API
python launch_triton_server.py \
    --world_size 4 \
    --model_repo /repo/triton_model_repo

TRT-LLM 的部署复杂度最高,但一旦引擎构建完成,性能是三者中最强的。适合对延迟和成本极度敏感的场景。


六、选型决策树

你在部署 LLM 推理服务吗?
│
├── 需要快速验证 / 原型开发?
│   └── --> vLLM(pip install,5 分钟起服务)
│
├── 主要场景是 Agent / 多轮对话 / RAG,且多请求共享大段前缀?
│   └── --> SGLang(RadixAttention 在此场景有 2-5x 优势)
│
├── 追求极致吞吐和最低延迟,团队有 C++ / CUDA 能力?
│   └── --> TensorRT-LLM(构建复杂,但性能天花板最高)
│
├── 部署到边缘设备 / 消费级 GPU / CPU 推理?
│   └── --> llama.cpp(GGUF 格式,多平台支持)
│       或 Ollama(桌面友好封装,基于 llama.cpp)
│
├── 超长上下文(> 32k)且内存有限?
│   └── --> ExLlamaV2(极致量化 + 长序列效率优化)
│
└── 需要多框架支持 / 移动端 / WebAssembly?
    └── --> MLC-LLM(Machine Learning Compilation,跨平台编译)

七、新兴选手快速扫描

llama.cpp

  • 定位:CPU/Apple Silicon/边缘设备推理的事实标准
  • 格式:GGUF(统一量化格式,Q2-Q8 均支持)
  • 优势:无需 NVIDIA GPU;M2/M3 Max 可跑 70B 量化模型(约 20 tokens/s)
  • 劣势:并发性能弱,不适合高并发生产场景

Ollama

  • 定位:llama.cpp 的桌面端友好封装
  • 特点ollama run llama3 一行命令,自动下载模型
  • 适用:开发者本地调试、内网私有部署
  • 生产适用性:有限(缺乏完整的并发调度和监控)

ExLlamaV2

  • 定位:面向 NVIDIA GPU 的极致量化推理库
  • 关键技术:EXL2 格式(比 GPTQ 更精细的混合精度量化)
  • 甜蜜点:70B 模型量化到 4-bit 后在单张 4090(24GB)上可用
  • 社区:活跃,主要用户是个人爱好者和研究者

MLC-LLM

  • 定位:基于 Apache TVM 的跨平台 LLM 编译框架
  • 支持平台:NVIDIA CUDA、Metal(Apple)、Vulkan、WebGPU、Android、iOS
  • 特点:一套代码编译到任意平台,适合需要多端部署的场景
  • 劣势:生态不如 vLLM 成熟,部分模型支持滞后

八、成本计算:自建推理 vs API 调用

盈亏平衡分析(以 Llama 3 70B 为例,H100 SXM)

自建成本(H100 x 4 卡服务器,租用)

月租金(H100 x 4,专用实例): ~$12,000-15,000 / 月
运维人力成本(0.5 FTE): ~$5,000 / 月
─────────────────────────────────────────────
总计: ~$17,000-20,000 / 月

可提供的 token 吞吐(按 SGLang,H100 x4,FP8):
  吞吐量: ~70,000 tokens/s
  月可用 token 数(80% 利用率):
  70,000 × 3600 × 720 × 0.8 ≈ 1.45 × 10^11 tokens ≈ 1,450 亿 tokens

自建单价: $17,500 / 1450 亿 ≈ $0.000121 / 1k tokens ≈ $0.12 / 百万 tokens

主流 API 调用成本(2026-02 价格)

服务商 模型 输入价格 输出价格
OpenAI GPT-4o $2.50 / 1M $10.00 / 1M
Anthropic Claude 3.5 Haiku $0.80 / 1M $4.00 / 1M
SiliconFlow Llama 3 70B ¥0.14 / 1M ¥0.14 / 1M
Groq Llama 3 70B $0.59 / 1M $0.79 / 1M
自建(H100 x4) Llama 3 70B ~$0.12 / 1M ~$0.12 / 1M

自建的盈亏平衡点

若使用 Groq API($0.70 / 1M tokens 均价):
月消耗量需达到:$17,500 / ($0.70 - $0.12) ≈ 月消耗 302 亿 tokens

实际判断:
  - 月消耗 < 50 亿 tokens → API 调用更划算(无运维负担)
  - 月消耗 50-150 亿 tokens → 边际地带,考虑数据安全和延迟需求
  - 月消耗 > 150 亿 tokens → 自建显著更划算

隐形成本不要忘记

  • API 调用有数据隐私风险(合规敏感行业必须自建)
  • 自建需要 MLOps 团队能力(模型版本管理、监控告警)
  • API 方案更新成本极低,模型能力可即时切换

九、2026 年趋势展望

  1. disaggregated prefill/decode(预填充/解码分离部署)正在成为新标准。SGLang 和 vLLM 均已实验性支持,将 TTFT 和吞吐量优化解耦,长期看会是生产部署的主流架构。

  2. FP8 全面普及:H100/H200/B200 的 FP8 硬件支持成熟,精度损失可忽略,所有引擎 FP8 支持将成标配。

  3. MOE 模型(Mixture of Experts)推理优化:DeepSeek-V3、Llama 4 等 MoE 架构对推理引擎提出新挑战(稀疏激活 + 专家并行)。vLLM 和 SGLang 均在快速跟进。

  4. 多模态推理:视觉 token 的 KV-Cache 管理(图片 token 量大,共享潜力高)将成为下一个优化焦点。


十、总结与建议

给 AI 产品经理的决策建议

  • 快速验证 → vLLM:生态最完善,遇到问题有大量社区资料
  • Agent/RAG 场景 → SGLang:RadixAttention 在共享前缀场景的优势是架构级的,不是调参能弥补的
  • 生产极致性能 → TRT-LLM:接受较高的运维复杂度换取 30-50% 的吞吐提升
  • 月消耗 < 50 亿 tokens → 优先 API:SiliconFlow、Groq 等平台的 Llama 3 70B 价格已极具竞争力
  • 数据隐私要求严格 → 必须自建:金融、医疗等合规场景,自建不是选项,是必选项

推理引擎的竞争格局仍在快速演化。建议每季度重新评估一次选型,特别是 SGLang 的发展速度令人印象深刻——在 2024 年末到 2025 年间,它在多个关键基准上已追平甚至超越 vLLM。


Maurice | maurice_wen@proton.me