Appearance
推理框架深度对比
LLM 推理框架是将模型部署到生产环境的核心基础设施。从云端高吞吐到端侧边缘部署,不同框架在架构、优化策略和场景适用性上差异显著。本页深度对比主流推理框架的架构原理、性能基准与选型指南。
对比概览
| 维度 | vLLM | TensorRT-LLM | TGI | llama.cpp | Ollama | SGLang |
|---|---|---|---|---|---|---|
| 开发方 | UC Berkeley / LMSYS | NVIDIA | Hugging Face | ggerganov | Ollama | LMSYS / Berkeley |
| 开源协议 | Apache 2.0 | Apache 2.0 | Apache 2.0 | MIT | MIT | Apache 2.0 |
| 主要优化 | PagedAttention (高吞吐) | TensorRT (极致性能) | 安全生产级 | GGUF 量化 (端侧) | 一键部署 | RadixAttention (编排优化) |
| 吞吐量 (QPS) | ★★★★★ | ★★★★★ | ★★★★☆ | ★★☆☆☆ | ★★☆☆☆ | ★★★★★ |
| 延迟 (TTFT) | 低 | 极低 | 低 | 中 | 中 | 低 |
| 量化支持 | AWQ / GPTQ / FP8 | FP8 / INT8 / INT4 | GPTQ / AWQ | GGUF (Q4/Q5/Q8) | GGUF | FP8 / GPTQ / AWQ |
| 批处理 (Batch) | Continuous Batching | In-flight Batching | Continuous Batching | 有限 | 有限 | Continuous Batching |
| 并行策略 | TP / PP / DP | TP / PP | TP / PP | 无 | 无 | TP / PP / DP |
| 支持模型 | 几乎所有 | 主流模型 | 几乎所有 | Llama/Qwen/Mistral 等 | 主流模型 | 几乎所有 |
| API 格式 | OpenAI-compatible | Triton | OpenAI-compatible | 自定义 / OAI | 自定义 / OAI | OpenAI-compatible |
| 部署难度 | 中 | 高 (需编译) | 中 | 低 | 极低 | 中 |
| 最佳场景 | 云端高并发 | NVIDIA GPU 极致性能 | 企业生产环境 | 端侧/边缘 | 本地开发 | 复杂编排应用 |
架构深度分析
vLLM — PagedAttention 革命
vLLM 的核心创新是 PagedAttention,将操作系统的虚拟内存管理思想应用到 LLM 推理中的 KV Cache 管理:
| 特性 | 说明 |
|---|---|
| 分块管理 | 将 KV Cache 分为固定大小的块 (blocks),像操作系统分页那样管理 |
| 动态分配 | 根据实际需求动态分配和释放块,避免预分配浪费 |
| 内存共享 | 通过复制与写时复制 (CoW) 实现跨请求的 KV Cache 共享 |
| 吞吐量提升 | 相比传统方法提升 2-4x |
vLLM v0.5+ 新特性 (2024-2025):
- Prefix Caching: 缓存常用提示词的 KV Cache,加速同类请求
- Chunked Prefill: 将大提示词分块处理,降低 TTFT
- Speculative Decoding: 支持推测解码加速
- Pipeline Parallelism: 支持流水线并行
适用: 云端生产环境、高并发 API 服务、需要灵活模型切换的场景。
TensorRT-LLM — NVIDIA 极致性能
TensorRT-LLM 是 NVIDIA 官方推理框架,通过编译时优化实现最高性能:
| 特性 | 说明 |
|---|---|
| 编译优化 | 将模型编译为高度优化的 CUDA kernel,充分利用 Tensor Core |
| FP8 支持 | 充分利用 Hopper (H100) 和 Ada (RTX 4090) 架构的 FP8 精度 |
| In-flight Batching | 在请求处理过程中动态批次调度,比 Continuous Batching 更精细 |
| 性能优势 | 同等硬件下通常比 vLLM 快 10-30% |
部署复杂度:
bash
# 需要编译模型为 TensorRT 引擎格式
# 支持的量化格式有限 (FP8/INT8/INT4)
# 需要熟悉 NVIDIA 生态工具链适用: NVIDIA GPU 环境、对延迟和吞吐有极致追求、有运维团队处理编译的场景。
TGI — Hugging Face 生产级
Text Generation Inference (TGI) 是 Hugging Face 的官方推理服务,强调安全与生态整合:
| 特性 | 说明 |
|---|---|
| 安全特性 | 内置输入验证、流量限制、日志记录 |
| 生态整合 | 与 Hugging Face Hub、Inference Endpoints 无缝对接 |
| 量化支持 | GPTQ、AWQ、BitsAndBytes 动态量化 |
| 模型加载 | 自动从 Hugging Face Hub 下载和缓存 |
| 监控 | 内置 Prometheus metrics,支持 Grafana 监控 |
TGI 的局限: 吞吐量略低于 vLLM;部分高级优化功能需要企业版。
适用: 使用 Hugging Face 生态的团队、需要安全和监控功能的企业环境。
llama.cpp — 端侧推理先驱
llama.cpp 是端侧推理的开源标准,以跨平台和无依赖为核心:
| 特性 | 说明 |
|---|---|
| GGUF 格式 | 专为量化模型设计的二进制格式,支持 Q4/Q5/Q8 等多种精度 |
| 跨平台 | CPU (x86/ARM)、GPU (CUDA/Metal/Vulkan)、WebAssembly |
| 无依赖 | 单一二进制文件,无需 Python 环境 |
| 社区 | 极其活跃,支持模型最广 |
| 量化选项 | Q4_0、Q4_K_M、Q5_K_M、Q6_K、Q8_0、F16 等 |
性能特点:
- CPU 上可运行 7B 模型 (Q4 量化,速度 5-20 tokens/s)
- Apple Silicon 上通过 Metal 加速表现优秀
- 支持推测解码 (speculative decoding) 加速
适用: 端侧/边缘部署、私有化部署、资源受限环境、需要跨平台支持。
Ollama — 本地部署极简
Ollama 在 llama.cpp 之上提供了更简单的体验:
| 特性 | 说明 |
|---|---|
| 一行命令 | ollama run llama3 即可运行模型 |
| 模型库 | 内置丰富的预置模型,自动下载 |
| API 服务 | 内置 OpenAI-compatible API 服务 |
| 多平台 | macOS、Linux、Windows 原生支持 |
| Modelfile | 类似 Dockerfile 的模型定义格式 |
局限: 吞吐量低于专业框架;无分布式支持;适合开发而非生产。
适用: 开发者本地开发、原型验证、小型部署、非技术用户。
SGLang — 编排优化新秀
SGLang 是从 vLLM 团队分支出来的新框架,以程序化编排为核心:
| 特性 | 说明 |
|---|---|
| RadixAttention | 重用跨请求的公共 KV Cache,适合多轮对话 |
| 编排优化 | 支持复杂的 LLM 程序化编排(分支、循环、并行) |
| 性能 | 在多轮对话场景下比 vLLM 快 2-5x |
| 兼容 | 支持 vLLM 的 PagedAttention 和 OpenAI API |
SGLang 编排示例:
python
import sglang as sgl
@sgl.function
def multi_turn_qa(s, question):
s += sgl.system("You are a helpful assistant.")
s += sgl.user(question)
s += sgl.assistant(sgl.gen("answer", max_tokens=256))
# 自动重用 system prompt 的 KV Cache适用: 需要复杂程序化控制的应用(如 Agent、多轮对话、思维链)。
性能基准
吞吐量对比(Llama-3-70B,8xA100)
| 框架 | 吞吐量 (tokens/s) | 相对基准 |
|---|---|---|
| TensorRT-LLM | 3,200+ | 1.3x |
| vLLM | 2,500+ | 1.0x (基准) |
| SGLang | 2,400+ | 0.96x |
| TGI | 2,000+ | 0.8x |
| llama.cpp (GPU) | 800+ | 0.32x |
| Ollama | 700+ | 0.28x |
注:数据为示意性,实际性能依赖硬件、模型和配置。
延迟对比(TTFT - Time To First Token)
| 框架 | TTFT (ms) | 说明 |
|---|---|---|
| TensorRT-LLM | 15-30 | 编译后最优 |
| vLLM | 20-40 | 动态批次调度 |
| SGLang | 20-40 | RadixAttention 重用 |
| TGI | 25-50 | 安全检查开销 |
| llama.cpp | 50-200 | 依赖 CPU/GPU 比例 |
| Ollama | 60-250 | 简化封装开销 |
内存效率对比
| 框架 | KV Cache 管理 | 内存浪费 | 长上下文支持 |
|---|---|---|---|
| vLLM | PagedAttention | 极低 | 优秀 |
| TensorRT-LLM | In-flight Batching | 低 | 优秀 |
| TGI | Continuous Batching | 低 | 良好 |
| SGLang | RadixAttention | 极低 | 优秀 (重用优化) |
| llama.cpp | 简单缓冲 | 中 | 一般 |
| Ollama | 简单缓冲 | 中 | 一般 |
量化与精度支持
| 框架 | FP16 | FP8 | INT8 | INT4 (GPTQ) | INT4 (AWQ) | GGUF |
|---|---|---|---|---|---|---|
| vLLM | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| TensorRT-LLM | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| TGI | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| llama.cpp | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ |
| Ollama | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ |
| SGLang | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
关键洞察: GGUF 是端侧专用格式,云端框架不支持。如果需要在云端和端侧之间共享模型,需要维护两套量化版本。
决策矩阵
| 场景 | 推荐框架 | 理由 |
|---|---|---|
| 云端高并发 API 服务 | vLLM | 生态最好,支持最广,稳定性高 |
| NVIDIA GPU 极致性能 | TensorRT-LLM | 编译后最快,FP8 优化 |
| 企业生产环境 | TGI | 安全、监控、HF 生态 |
| 端侧/边缘部署 | llama.cpp | 跨平台,无依赖,资源敏感 |
| 开发者本地开发 | Ollama | 一键安装,极简体验 |
| 复杂 Agent/多轮对话 | SGLang | RadixAttention,编排优化 |
| 需要程序化控制 | SGLang | 支持分支、循环、并行 |
| 混合部署(云+端) | vLLM + Ollama | 分别对应不同场景 |
| 长上下文场景 (>128K) | vLLM / SGLang | PagedAttention 内存效率最优 |
| 快速原型验证 | Ollama | 分钟级部署 |
框架组合策略
生产环境中常见的多层次部署:
云端生产:TensorRT-LLM / vLLM → 高并发 API
开发测试:Ollama → 本地快速迭代
端侧部署:llama.cpp → 设备本地推理
Agent 服务:SGLang → 复杂编排优化技术趋势
- FP8 普及: Hopper 架构推动 FP8 量化成为标配,TensorRT-LLM 和 vLLM 均已支持
- 推测解码标准化: vLLM 、SGLang 等框架开始原生支持推测解码
- 长上下文优化: Prefix Caching、Chunked Prefill 等技术降低长文本处理成本
- 端侧性能提升: llama.cpp 通过 Metal/CUDA 加速,端侧速度持续提升
- 编排流抽象: SGLang 等框架推动 LLM 程序化编排的标准化
相关页面
- Model Inference & Deployment — 模型推理部署技术原理
- Model Quantization — 模型量化技术详解
- KV Cache & Prompt Caching — KV Cache 优化技术
- Hosted API vs Self-Hosted (vLLM) — API vs 自托管推理对比
- Edge vs Cloud Inference — 端侧 vs 云端推理对比
- Speculative Decoding — 推测解码加速技术
- vLLM — vLLM 实体页面
- llama.cpp — llama.cpp 实体页面
参考来源
- Kwon et al. (2023). "Efficient Memory Management for Large Language Model Serving with PagedAttention." (vLLM)
- NVIDIA (2024). "TensorRT-LLM User Guide."
- Hugging Face (2024). "Text Generation Inference Documentation."
- ggerganov (2024). "llama.cpp: Port of Facebook's LLaMA model in C/C++."
- Ollama (2024). "Ollama Documentation."
- Zheng et al. (2024). "SGLang: Efficient Execution of Structured Language Model Programs."