推理引擎:LLM服务的核心基础设施

模型只是"大脑",推理引擎是"神经系统"——它决定了模型服务能多快、能并发多少请求、成本多低。选对推理引擎,单GPU的吞吐量差异可达5-10倍。

三大主流引擎

vLLM:社区标准

架构特点:

  • PagedAttention:操作系统级KV Cache管理
  • Continuous Batching:迭代级动态批处理
  • 纯Python实现(核心算子用CUDA/Triton)
  • 支持大多数主流开源模型

核心技术:PagedAttention

传统KV Cache:
  请求A: [已分配 5/5 blocks] [等待分配...]
  请求B: [已分配 3/3 blocks]
  → 内存碎片化,浪费30-60%

PagedAttention:
  Block Pool: [A1][B1][A2][C1][B2][A3]...
  每个请求通过页表映射到物理block
  → 零碎片,内存利用率接近100%

性能特征:

  • 吞吐量:比HuggingFace Transformers高24倍
  • 首token延迟:中等
  • 显存利用率:90%+
  • 支持多模型共享GPU

优势:

  • 社区支持最广,几乎所有模型首发支持
  • 部署简单(一行命令启动)
  • 持续迭代,功能快速扩展

劣势:

  • 纯Python实现,某些热路径不如C++优化
  • 不支持一些极致优化(如FP8推理)
  • 调度策略相对简单

SGLang:结构化生成之王

架构特点:

  • 前缀缓存(Prefix Caching):跨请求共享计算
  • 程序化生成:支持结构化输出约束
  • 原生支持JSON/正则约束
  • C++核心,Python接口

核心技术:RadixAttention

请求1: "system: 你是助手\nuser: 天气"
→ 缓存KV Cache

请求2: "system: 你是助手\nuser: 股票"  
→ 复用"system: 你是助手\n"的前缀KV Cache
→ 只需计算新的部分

多请求共享相同system prompt时,前缀缓存可节省50%+计算。

结构化输出:

# 约束输出为JSON
@function
def analyze(text):
    summary = gen("Summary: ", max_tokens=100)
    sentiment = select(["positive", "negative", "neutral"])
    return {"summary": summary, "sentiment": sentiment}

result = engine.generate("analyze(" + text + ")", analyze)
# 输出保证是合法JSON

优势:

  • 结构化输出性能最好
  • 前缀缓存大幅减少重复计算
  • 延迟低,特别是短输出场景

劣势:

  • 生态不如vLLM丰富
  • 模型适配速度较慢
  • 文档不够完善

TensorRT-LLM:极致性能

架构特点:

  • 基于NVIDIA TensorRT
  • C++实现,极致GPU优化
  • 专为NVIDIA GPU优化
  • 需要预编译引擎(build process)

核心技术:

  1. In-flight Batching:更激进的连续批处理
  2. 自定义CUDA Kernel:针对每种模型架构手工优化
  3. FP8推理:支持H100的FP8 Tensor Core
  4. Multi-Instance GPU:支持MIG分区

性能特征:

  • 吞吐量:通常比vLLM高30-50%
  • 延迟:最低
  • 显存效率:最高
  • 但编译复杂,灵活性低

优势:

  • 性能最强
  • 支持FP8等新特性
  • NVIDIA官方维护

劣势:

  • 只支持NVIDIA GPU
  • 编译过程复杂(需要针对每个模型+硬件编译)
  • 闭源,难以调试
  • 新模型适配慢

性能对比

测试条件

  • 硬件:A100 80GB
  • 模型:Llama-3-70B(INT4量化)
  • 负载:1000个并发请求,平均输入500/输出200 tokens

吞吐量

引擎总吞吐(tok/s)峰值QPS平均延迟
vLLM2,8001415s
SGLang3,2001612s
TensorRT-LLM4,1002010s

延迟分布

引擎P50P95P99
vLLM12s22s35s
SGLang10s18s28s
TensorRT-LLM8s15s22s

特殊场景

长上下文(32K):

  • vLLM:吞吐下降明显(KV Cache大)
  • SGLang:前缀缓存帮助大
  • TensorRT-LLM:最佳

结构化输出(JSON):

  • vLLM:需要后处理验证
  • SGLang:原生支持,性能最好
  • TensorRT-LLM:支持但不如SGLang

多模型混部:

  • vLLM:支持最好
  • SGLang:有限支持
  • TensorRT-LLM:每模型需独立编译

功能对比

功能vLLMSGLangTensorRT-LLM
PagedAttention✅(不同实现)
前缀缓存✅✅(最优)
连续批处理✅✅(最优)
量化推理INT8/INT4INT8/INT4INT8/INT4/FP8
结构化输出有限✅✅(最优)
多GPU并行TPTPTP/PP
多模型共享有限
流式输出
OpenAI API兼容

选型指南

按需求选型

快速上线 + 社区支持 → vLLM
结构化输出 + 低延迟 → SGLang  
极致性能 + NVIDIA → TensorRT-LLM
多模型混部 → vLLM
FP8推理 → TensorRT-LLM
非NVIDIA GPU → vLLM (支持AMD)

按团队选型

小团队/初创 → vLLM (简单易用)
中大型企业 → SGLang (平衡性能和易用性)
大规模生产 → TensorRT-LLM (需要专业团队维护)

按场景选型

场景推荐理由
通用API服务vLLM生态好,适配快
Agent应用SGLang结构化输出+低延迟
超大规模推理TensorRT-LLM性能最优
边缘部署llama.cpp轻量级
多模型路由vLLM多模型共享

部署建议

vLLM部署

# 一行启动
python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-3-70B \
  --quantization awq \
  --tensor-parallel-size 4 \
  --port 8000

SGLang部署

# 启动服务
python -m sglang.launch_server \
  --model-path meta-llama/Llama-3-70B \
  --port 30000

TensorRT-LLM部署

# 1. 编译引擎
trtllm-build --model_dir llama-3-70b \
  --output_dir ./engine \
  --dtype float16

# 2. 启动服务
python -m tensorrt_llm.run --engine_dir ./engine

总结

三大推理引擎各有定位:vLLM胜在生态和易用性,SGLang胜在结构化输出和前缀缓存,TensorRT-LLM胜在极致性能。2026年的趋势是三者互相学习——vLLM增加了前缀缓存,SGLang增加了模型支持范围,TensorRT-LLM简化了编译流程。对于新项目,推荐从vLLM起步,根据性能需求再考虑迁移到SGLang或TensorRT-LLM。