文章

LLM 推理引擎对比与选型

LLM 推理引擎对比与选型

推理引擎是”把模型跑起来”的发动机。选错引擎,可能同样的 GPU 吞吐差 3-5 倍。本文横向对比主流引擎的设计取向、强项与适用场景,给出选型决策表。


一、为什么需要专用推理引擎

朴素部署(HuggingFace model.generate())的问题:

  • 无 PagedAttention:KV Cache 连续分配,长序列碎片严重,并发上不去
  • 静态 Batching:必须整批凑齐才能跑,短请求被长请求拖死(head-of-line blocking)
  • 无 CUDA Graph / 算子融合:kernel launch 开销大
  • 单卡思维:多卡、多机、MoE 路由都要自己写

专用引擎就是为了解决这四点。


二、主流引擎矩阵

引擎主导方核心卖点最强场景语言/生态
vLLMUC Berkeley / 社区PagedAttention 鼻祖、生态最全、OpenAI API 兼容通用、高并发在线服务Python
SGLangSGLang 团队RadixAttention(前缀复用)、结构化输出快、高吞吐长上下文/多轮 Agent/JSON 输出Python
TensorRT-LLMNVIDIA极致 kernel 优化、CUDA Graph、低延迟NVIDIA 硬件上的最低 TPOTC++/Python
LMDeploy上海AI实验室TurboMind 引擎、量化友好、国产卡适配国产卡/量化部署Python
OllamaOllama一键本地、模型库丰富、开发者友好本地开发/笔记本/Apple SiliconGo
llama.cppggerganovGGUF 量化、纯 CPU/端侧、无 GPU 依赖端侧/边缘/老机器C++
Triton ISNVIDIA多框架统一、动态批处理、企业级多模型混合推理平台C++/Python
Ray ServeAnyscale通用 Python 服务、复杂路由/组合自研编排/多模型 pipelinePython
DeepSpeed-MIIMicrosoft与 DeepSpeed 训练打通训练集群顺手部署Python

三、关键能力对比

能力vLLMSGLangTRT-LLMOllama/llama.cpp
PagedAttention✅(RadixAttention)✅(paged KV)⚠️(llama.cpp 有 KV 缓存)
Continuous Batching⚠️ 弱
前缀缓存复用✅(自动)✅(Radix 树共享)
投机解码✅(llama.cpp)
张量并行(多卡)⚠️(有限)
MoE 优化✅(强)⚠️
量化(AWQ/GPTQ/FP8)✅(GGUF)
OpenAI API 兼容⚠️(需适配)✅(Ollama)
国产卡(昇腾/海光)⚠️⚠️⚠️(llama.cpp)

四、选型决策表

场景 → 推荐
─────────────────────────────────────────────────
本地开发 / 笔记本 / Apple Silicon      → Ollama 或 llama.cpp
端侧 / 边缘设备 / 无 GPU              → llama.cpp (GGUF)
通用在线服务 / 高并发 / 快速验证     → vLLM(默认首选)
长上下文 / 多轮 Agent / 大量 JSON    → SGLang(前缀复用省显存)
极致低延迟 / 全 NVIDIA / 已上 TRT    → TensorRT-LLM
国产算力卡 / 量化优先                → LMDeploy
企业多模型统一平台                  → Triton + (vLLM/SGLang 后端)
自研复杂编排 / 多模型 pipeline       → Ray Serve

经验法则:没有特殊诉求时,vLLM 是安全默认;当你发现账单里”重复 prefill 长 prompt”占比高、或多轮对话 KV 反复算,切 SGLang 常常立省 30-50% 显存。


五、vLLM 启动示例(最常用)

# 单卡起 7B,OpenAI 兼容端口 8000
python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen2.5-7B-Instruct \
  --tensor-parallel-size 1 \
  --gpu-memory-utilization 0.90 \
  --max-model-len 32768 \
  --enable-prefix-caching \
  --port 8000

# 调用(与 OpenAI SDK 完全一致)
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"Qwen/Qwen2.5-7B-Instruct","messages":[{"role":"user","content":"你好"}]}'

六、SGLang 启动示例(强调前缀复用)

python -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-7B-Instruct \
  --tp 1 \
  --mem-fraction-static 0.85 \
  --enable-radix-cache \
  --port 30000
# RadixAttention 自动在多请求间共享相同 prompt 前缀的 KV

七、引擎不是银弹:硬件仍是天花板

无论选哪个引擎,单请求延迟最终受限于:

  1. 显存带宽(decode 是访存密集,HBM 带宽决定 TPOT 下限)
  2. 算力峰值(prefill 是算力密集,FLOPS 决定长 prompt 的 TTFT)
  3. 多卡互联(张量并行跨卡要看 NVLink/PCIe 带宽)

引擎解决的是”软件利用率”,硬件决定”物理上限”。当 TPOT 卡在某个值上不去,先看 HBM 带宽是否被 KV Cache 读满——这正是 KV Cache 原理与 PagedAttention 要讲的。


关联知识

参考资源

学习时间

阶段时间备注
内容创建2026-07-20引擎对比矩阵、选型决策表、vLLM/SGLang 启动样例

状态标记

📖 已掌握 — 主流引擎定位、能力对比、按场景选型 📝 待补充 — 各引擎实测吞吐数字、TRT-LLM 构建流程、国产卡实测