vLLM vs llama.cpp:两大推理框架的深度对比
引言
当前大模型推理领域,vLLM 和 llama.cpp 是最具代表性的两个开源推理框架。它们目标不同、设计哲学不同、适用场景也不同。本文将从架构、性能、功能、适用场景等维度进行全面对比。
一、核心定位
| 维度 | vLLM | llama.cpp |
|---|
| 定位 | 高性能生产级推理引擎 | 轻量级本地推理引擎 |
| 语言 | Python + C++/CUDA | 纯 C/C++ |
| 模型格式 | HuggingFace 原生 / safetensors | GGUF(量化格式) |
| GPU 需求 | 强依赖 GPU(CUDA) | CPU 为主,GPU 可选 |
| 典型场景 | 线上 API 服务、高并发 | 本地运行、边缘设备 |
二、架构设计
vLLM
- PagedAttention:核心创新,将 KV 缓存分页管理,像操作系统虚拟内存一样,消除显存碎片
- 连续批处理(Continuous Batching):无需等一个请求完整结束,新请求可以插入正在处理的批次
- 前缀缓存(Prefix Caching):相同前缀的 prompt 共享 KV 缓存
- 基于 CUDA 图优化:减少 kernel launch 开销
llama.cpp
- GGUF 格式:专为推理设计的量化格式,支持多种量化级别(Q2-Q8、FP16)
- CPU 优先架构:通过 llama-*.h 头文件实现高度可移植性
- 内存映射(mmap):文件直接映射内存,加载极快
- K/V 缓存量化:支持 cache-type-k/v q8_0/f16 等灵活配置
三、性能对比
吞吐量(请求/秒)
| 场景 | vLLM | llama.cpp |
|---|
| 高并发(≥4 并发) | ✅ 领先(PagedAttention 优势) | ❌ 串行处理为主 |
| 单用户交互 | 优秀 | ✅ 优秀(开销更低) |
| 长上下文 | ✅ 分页管理更高效 | ⚠️ 显存占用线性增长 |
延迟(首 token 延迟)
| 场景 | vLLM | llama.cpp |
|---|
| GPU 推理 | vLLM 略低(CUDA 图优化) | llama.cpp 相当 |
| CPU 推理 | ❌ 不适用 | ✅ 唯一可选方案 |
| 混合(部分 GPU) | ❌ 不支持 | ✅ 支持灵活分层 |
显存效率
vLLM 的 PagedAttention 在高并发下可节省 50-80% 显存,这是它的最大优势。但单用户场景下,这个优势不明显。
四、量化支持
| 量化方式 | vLLM | llama.cpp |
|---|
| GPTQ | ✅ | ❌ |
| AWQ | ✅ | ❌ |
| GGUF Q2-Q8 | ❌ | ✅ |
| FP8 | ✅(部分 GPU) | ✅ |
| 运行时量化 KV 缓存 | ❌ | ✅ |
五、功能特性
| 功能 | vLLM | llama.cpp |
|---|
| 多模态(视觉) | ✅ | ✅(需 —mmproj) |
| Streaming | ✅ | ✅ |
| OpenAI 兼容 API | ✅ | ✅ |
| 工具调用 / Function Calling | ✅ | ✅ |
| 前缀缓存 | ✅ | ❌ |
| Speculative Decoding | ✅ | ✅ |
| MTP(多 token 预测) | ✅ | ✅ |
| LoRA 适配器 | ✅ | ✅ |
| Docker 部署 | ✅ 官方支持 | ❌ 社区方案 |
| 分布式推理 | ✅ (Tensor Parallel) | ❌ |
六、实际案例对比
在相同的机器上(RTX 3080 20GB)运行 35B 模型:
| 指标 | vLLM | llama.cpp |
|---|
| 能否运行 | ❌ OOM(显存不够) | ✅ Q3_K 约 17GB |
| 速度 | - | 122 tokens/s |
| 显存占用 | - | ~18GB |
| 启动时间 | - | ~15 秒(mmap 加载) |
在 9B 模型上:
| 指标 | vLLM | llama.cpp |
|---|
| 吞吐(4 并发) | ~800 tokens/s | ~200 tokens/s |
| 首 token 延迟 | 40ms | 60ms |
| 显存占用 | 6GB(PagedAttention) | 8GB |
七、选型建议
选 vLLM 当…
- 🚀 高并发生产环境(API 服务、多用户)
- 🎯 需要最高吞吐量
- 💰 有多张 GPU 可做分布式
- 📦 使用 HuggingFace 模型格式
选 llama.cpp 当…
- 💻 本地运行(个人电脑、笔记本)
- 🔒 无 GPU 或 GPU 显存有限
- ⚡ 需要快速启动、低开销
- 📱 边缘设备/嵌入式场景
- 🎛️ 需要细粒度量化控制(Q3_K 在 20GB 上跑 35B)
八、趋势展望
两个框架正在互相借鉴:
- vLLM 开始支持更多量化格式
- llama.cpp 逐步优化批处理能力
未来更可能是 互补共存:vLLM 占据云端生产环境,llama.cpp 主导本地和边缘推理。
总结
| 一句话 | vLLM:高吞吐的云端之王 | llama.cpp:轻量级的本地悍将 |
|---|
| 核心优势 | PagedAttention 节省显存 | GGUF 量化 + CPU 可运行 |
| 最佳场景 | 多用户 API 服务 | 单用户本地推理 |
| 入门门槛 | 需要 GPU、Python 环境 | 纯 C++ 单文件可编译 |