前言

随着开源大模型的爆发式增长(Llama、Qwen、DeepSeek、Mistral……),越来越多的开发者开始在本地或私有服务器上部署 LLM。

但摆在大家面前的第一个问题往往是:

Ollama、vLLM、llama.cpp,我该用哪个?

网上的文章要么只讲一个,要么比较得一笔带过。本文将从原理、性能、适用场景三个维度,给出一份真正能指导选型的深度对比。


一、三者的基本定位

在深入对比之前,先用一句话概括各自的核心定位:

框架 一句话定位
llama.cpp 极致轻量,CPU 也能跑,量化先驱
Ollama 傻瓜式体验,llama.cpp 套了个壳
vLLM 生产级推理,GPU 集群的不二之选

它们并非竞争关系,而是面向不同场景的工具。


二、llama.cpp —— 一切的起点

2.1 它是什么

llama.cpp 是由 Georgi Gerganov 用纯 C/C++ 实现的 LLM 推理引擎,最初为了在 MacBook 上跑 LLaMA 而生。

它最大的贡献是将 GGUF 量化格式 推向主流,让普通消费级硬件也能运行 7B~70B 的大模型。

2.2 核心优势

① 极低的硬件门槛

# 4-bit 量化后,内存占用大约是:
Llama-3-8B-Q4_K_M  ≈ 4.9 GB
Qwen2.5-14B-Q4_K_M ≈ 8.7 GB
Llama-3-70B-Q4_K_M ≈ 40 GB

一台普通笔记本、一块入门级显卡,甚至只用 CPU,都能跑起来。

② 混合推理(CPU + GPU)

当模型太大放不进显存时,llama.cpp 支持将部分层卸载到 CPU,其他层保留在 GPU:

# -ngl 参数控制 GPU 层数
./llama-cli -m qwen2.5-14b-q4_k_m.gguf -ngl 35 -p "你好"

③ 跨平台,依赖极少

从树莓派到 Mac M 系列芯片,从 Windows 到 Linux,都能原生运行,无需 CUDA 环境。

2.3 核心劣势

  • 并发性能弱:原生不支持高并发,多个请求排队处理

  • 吞吐量有限:相比 vLLM,Token 生成速度差距明显

  • 生态相对底层:直接用 llama.cpp 需要自己处理 API 封装

2.4 适合谁用

  • 个人开发者、研究者在本机探索模型

  • 边缘设备、嵌入式场景(IoT、机器人)

  • 对 GPU 资源有严格限制的环境


三、Ollama —— 最佳新手体验

3.1 它是什么

Ollama 本质上是 llama.cpp 的高级封装,提供了类 Docker 的模型管理体验和开箱即用的 HTTP API。

你可以把它理解为:llama.cpp + 模型仓库 + REST API + 命令行工具 的一体化解决方案。

3.2 核心优势

① 安装极其简单

# macOS / Linux 一行安装
curl -fsSL https://ollama.com/install.sh | sh
​
# Windows 直接下载安装包

② 模型管理像 Docker 一样直观

# 拉取模型
ollama pull llama3.2
ollama pull qwen2.5:14b
ollama pull deepseek-r1:7b
​
# 查看已下载模型
ollama list
​
# 删除模型
ollama rm llama3.2

③ 内置兼容 OpenAI 格式的 API

# 直接用 OpenAI SDK 调用 Ollama,零改动迁移
from openai import OpenAI
​
client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # 随便填
)
​
response = client.chat.completions.create(
    model="qwen2.5:14b",
    messages=[{"role": "user", "content": "介绍一下量子计算"}]
)
print(response.choices[0].message.content)

④ 支持 Modelfile 自定义

# Modelfile 示例:创建一个定制化的角色
FROM qwen2.5:7b
​
SYSTEM """
你是一个专业的 Python 编程助手,回答简洁有力,
代码示例优先,不废话。
"""
​
PARAMETER temperature 0.3
PARAMETER top_p 0.9
ollama create my-coder -f Modelfile
ollama run my-coder

3.3 核心劣势

  • 性能天花板:继承了 llama.cpp 的并发限制,高负载下性能不佳

  • 生产环境风险:不建议直接暴露给大量用户访问

  • GPU 利用率:相比 vLLM,GPU 利用率和吞吐量差距较大

3.4 适合谁用

  • 个人开发、本地助手(搭配 Open WebUI、Cursor 等工具)

  • 小团队内部使用(并发 < 10)

  • 原型开发、快速验证想法

  • 不想折腾环境配置的开发者


四、vLLM —— 生产级推理的标杆

4.1 它是什么

vLLM 是加州大学伯克利分校发布的高性能 LLM 推理框架,其核心创新是 PagedAttention 技术,专为高并发、高吞吐的生产场景设计。

4.2 核心技术:PagedAttention

传统推理引擎中,KV Cache(键值缓存)需要连续内存空间,导致大量内存碎片浪费。

vLLM 借鉴操作系统虚拟内存分页的思想,将 KV Cache 切分为固定大小的 Block 按需分配:

传统方式:  [=====请求A=====][  碎片  ][===请求B===][    碎片    ]
PagedAttention: [A块1][B块1][A块2][B块2][A块3]   ← 几乎零碎片

效果:GPU 显存利用率提升 3~5 倍,吞吐量提升 2~4 倍。

4.3 核心优势

① 吞吐量碾压级领先

下表是同等硬件(A100 80GB)下的参考数据(Llama-3-8B):

框架 并发请求数 Tokens/s(总吞吐)
llama.cpp 1~4 ~200
Ollama 1~8 ~300
vLLM 100+ ~3000+

注:实际数据因硬件、模型、配置差异较大,以上为量级参考。

② 连续批处理(Continuous Batching)

vLLM 会动态地将多个请求打包成一个批次处理,GPU 利用率接近满负荷,不浪费任何算力。

③ 开箱即用的 OpenAI 兼容 API 服务

# 一行启动 API 服务
python -m vllm.entrypoints.openai.api_server \
    --model Qwen/Qwen2.5-14B-Instruct \
    --tensor-parallel-size 2 \  # 多 GPU 张量并行
    --max-model-len 32768

④ 多 GPU 并行支持

# 张量并行:模型切分到多张 GPU
--tensor-parallel-size 4  # 4 卡张量并行
​
# 流水线并行:适合超大模型
--pipeline-parallel-size 2

⑤ 量化支持(AWQ / GPTQ / FP8)

# 使用 AWQ 量化模型,显存减半,精度损失极小
python -m vllm.entrypoints.openai.api_server \
    --model Qwen/Qwen2.5-72B-Instruct-AWQ \
    --quantization awq

4.4 核心劣势

  • 硬件要求高:强烈建议 NVIDIA GPU,且显存越大越好

  • 安装相对复杂:需要 CUDA 环境,依赖较多

  • CPU 支持有限:不适合无 GPU 环境

  • 对小模型/低并发场景有点"杀鸡用牛刀"

4.5 适合谁用

  • 需要支持大量并发用户的线上服务

  • 企业私有化部署(内部问答、客服机器人等)

  • 对推理延迟和吞吐量有明确 SLA 要求的场景

  • 有 A100/H100/4090 等高端 GPU 资源


五、三者横向对比总览

对比维度 llama.cpp Ollama vLLM
上手难度 ⭐ 极简 较复杂
硬件要求 极低(CPU 可用) 高(GPU 必须)
并发能力 弱~中 ⭐ 极强
吞吐量 低~中 ⭐ 极高
显存利用率 ⭐ 极高
量化支持 ⭐ GGUF(最全) GGUF AWQ/GPTQ/FP8
OpenAI API 兼容 需手动启动 ⭐ 内置 ⭐ 内置
多 GPU 支持 有限 有限 ⭐ 完善
Windows 支持 ❌ 不推荐
Mac 支持 ✅ (Metal)
生产可用性 ⚠️ 轻量场景
社区活跃度

六、选型决策树

你的目标是什么?
│
├─ 个人本地使用 / 没有 GPU
│   └─ → Ollama(或 llama.cpp 进阶玩法)
│
├─ 快速原型开发 / 小团队内部工具
│   └─ → Ollama(简单快捷)
│
├─ 需要支持高并发的线上服务
│   ├─ 有 NVIDIA GPU → vLLM
│   └─ 没有 GPU → 考虑云端 API
│
├─ 边缘设备 / 嵌入式 / IoT
│   └─ → llama.cpp(最轻量)
│
└─ 追求极致性能 + 私有化部署
    └─ → vLLM + 量化(AWQ/GPTQ)

七、实战:三者部署同一个模型

以部署 Qwen2.5-7B-Instruct 为例,对比三种方式:

7.1 llama.cpp

# 1. 编译
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && make -j$(nproc) GGML_CUDA=1
​
# 2. 下载 GGUF 模型(从 HuggingFace / ModelScope)
# Qwen2.5-7B-Instruct-Q4_K_M.gguf
​
# 3. 启动 API 服务
./llama-server \
  -m Qwen2.5-7B-Instruct-Q4_K_M.gguf \
  --host 0.0.0.0 --port 8080 \
  -ngl 99  # 全部层加载到 GPU

7.2 Ollama

# 1. 安装 Ollama
curl -fsSL https://ollama.com/install.sh | sh
​
# 2. 一行拉取并运行
ollama run qwen2.5:7b
​
# 3. API 已自动启动在 11434 端口
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"hello"}]}'

7.3 vLLM

# 1. 安装(需要 CUDA 12.x)
pip install vllm
​
# 2. 启动服务
python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen2.5-7B-Instruct \
  --host 0.0.0.0 \
  --port 8000 \
  --max-model-len 16384
​
# 3. 调用(与 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":"hello"}]}'

八、常见问题 FAQ

Q:Ollama 和 llama.cpp 有什么关系?

Ollama 的底层推理引擎就是 llama.cpp,它在其上封装了模型管理、API 服务、Modelfile 等功能。因此两者的推理性能基本相当,Ollama 更像是 llama.cpp 的"产品化版本"。

Q:vLLM 支持 CPU 推理吗?

官方不推荐,虽然有实验性支持,但性能极差。vLLM 的核心优化(PagedAttention、CUDA Kernel)都依赖 GPU,离开 GPU 没有意义。

Q:没有 NVIDIA GPU,能用 vLLM 吗?

vLLM 对 AMD ROCm 有实验性支持,但稳定性和性能远不如 CUDA。建议 AMD GPU 用户考虑 llama.cpp 或等待 vLLM 的 ROCm 支持成熟。

Q:部署私有知识库(RAG)用哪个?

中小规模(并发 < 20)用 Ollama 配合 LangChain/LlamaIndex 即可;大规模生产用 vLLM 作为推理后端。

Q:量化会损失多少精度?

以 Q4_K_M 为例,在大多数 Benchmark 上精度损失 < 2%,几乎感知不到。Q8_0 精度损失 < 0.5%,接近原始 FP16 精度。


九、总结

场景 推荐方案
个人本机玩模型 Ollama,没有之一
没有 GPU / CPU 部署 llama.cpp
边缘设备 llama.cpp
小团队内部服务 Ollama
企业生产级部署 vLLM
追求最高吞吐量 vLLM + AWQ 量化

一句话记住:

玩玩用 Ollama,搞研究用 llama.cpp,上生产用 vLLM。


参考资料


💬 如果这篇文章对你有帮助,欢迎点赞收藏!有问题欢迎评论区交流。

🔔 关注我,持续分享 LLM 部署、推理优化、AI 工程化实践。

Logo

免费领 100 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐