大模型推理框架选型入门:Ollama、llama.cpp 与 vLLM 全景对比
随着大语言模型(LLM)的广泛应用,如何将模型高效地部署到生产环境成为每个 AI 工程师必须面对的问题。目前市面上主流的推理框架有 Ollama、llama.cpp 和 vLLM,但它们的技术定位、适用场景差异巨大。
很多开发者在选型时容易陷入误区:
- 用 Ollama 部署高并发 API 服务,结果吞吐量上不去
- 用 vLLM 跑边缘设备,发现资源占用过高
- 混淆 llama.cpp 和 vLLM 的定位,不知道何时该用哪个
本文将从架构分层视角出发,帮你建立清晰的选型认知。
一、三大框架的技术定位
1.1 三层架构视角
如果把 LLM 推理技术栈比作一座大厦,三个框架分别位于不同的楼层:
┌─────────────────────────────────────────────────────────────┐
│ 应用层(第 3 层) │
│ ┌─────────────┐ │
│ │ Ollama │ ← 一键式模型管理,类似 Docker 的体验 │
│ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 推理引擎层(第 2 层) │
│ ┌─────────────┐ ┌─────────────────────────────────────┐ │
│ │ llama.cpp │ │ vLLM │ │
│ │ C++ 引擎 │ │ Python 推理服务平台 │ │
│ └─────────────┘ └─────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 硬件加速层(第 1 层) │
│ CUDA / Metal / ROCm / AVX512 │
└─────────────────────────────────────────────────────────────┘
核心区别一句话总结:
- Ollama:让开发者"开箱即用"的工具层
- llama.cpp:追求极致轻量的 C++ 推理引擎
- vLLM:面向生产的高吞吐推理服务平台
1.2 各框架的本质定位
| 维度 | Ollama | llama.cpp | vLLM |
|---|---|---|---|
| 本质 | 模型管理工具 | 推理引擎库 | 推理服务框架 |
| 设计目标 | 开发便捷 | 跨平台兼容 | 高吞吐服务化 |
| 核心用户 | 开发者/研究者 | 嵌入式工程师 | SRE/运维工程师 |
| 部署形态 | 单二进制文件 | 静态库/可执行文件 | Python 服务+API |
1.3 Ollama 的真相:llama.cpp 的封装层
很多开发者不知道的是,Ollama 底层调用的正是 llama.cpp:
Ollama CLI → Modelfile 解析 → GGUF 模型下载 → llama.cpp 推理引擎
这意味着:
- Ollama 的"简单"是有代价的——它隐藏了 llama.cpp 的精细调参能力
- 在高并发场景下,Ollama 的 HTTP 层成为瓶颈
- 生产环境建议绕过 Ollama,直接使用底层引擎
二、适用场景速查表
2.1 按使用场景选型
| 场景 | 推荐框架 | 理由 |
|---|---|---|
| 本地开发测试 | Ollama | 一键安装,Modelfile 灵活配置 |
| MacBook Pro 本地跑 70B | llama.cpp | Metal 后端优化,统一内存优势 |
| 边缘设备/嵌入式 | llama.cpp | ARM NEON 优化,低资源占用 |
| 高并发 API 服务 | vLLM | 连续批处理,PagedAttention |
| 70B+ 大模型生产部署 | vLLM | TP/PP 分布式支持完善 |
| MoE 模型 (DeepSeek) | vLLM | EP 专家并行原生支持 |
| CPU 兜底/降级链路 | llama.cpp | 跨平台稳定,GGUF 生态成熟 |
2.2 按硬件环境选型
无 GPU 环境:
# 唯一选择:llama.cpp
./llama-cli -m model.gguf --threads 32
单卡消费级 GPU(RTX 4090 24GB):
# 7B-13B 模型:vLLM 或 llama.cpp 均可
# 70B 模型:必须用量化版 + vLLM
vllm serve --model llama-70b-awq --quantization awq
多卡数据中心 GPU(A100/H100):
# vLLM 是最佳选择
vllm serve --model llama-405b --tensor-parallel-size 8
Apple Silicon(M1/M2/M3):
# llama.cpp Metal 后端最优
./llama-cli -m model.gguf -ngl 99
# 全部层卸载到 GPU
三、快速上手示例
3.1 Ollama:5 分钟跑起来
# 安装
curl -fsSL https://ollama.com/install.sh | sh
# 拉取并运行模型
ollama run llama3.1:70b
# 自定义 Modelfile
cat > Modelfile <<'EOF'
FROM llama3.1:70b
PARAMETER temperature 0.7
PARAMETER top_p 0.9
SYSTEM "你是一个专业的编程助手"
EOF
ollama create my-model -f Modelfile
3.2 llama.cpp:从源码构建
# 克隆并编译
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make -j LLAMA_CUDA=1 # NVIDIA GPU
# 下载 GGUF 模型并运行
./llama-cli \
-m models/llama-3.1-70b-Q4_K_M.gguf \
--ctx-size 32768 \
--threads 32 \
-ngl 99 # GPU 层数,99 表示全部
3.3 vLLM:生产级部署
# pip 安装
pip install vllm
# 启动服务
vllm serve meta-llama/Llama-3.1-70B \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.85 \
--max-model-len 32768 \
--enable-prefix-caching
# 调用 API
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{ "model": "meta-llama/Llama-3.1-70B", "prompt": "Hello,", "max_tokens": 100 }'
四、常见误区澄清
误区 1:Ollama 可以替代 vLLM 用于生产
真相:Ollama 的 HTTP 层和调度逻辑在高并发下会成为瓶颈。实测数据显示,相同硬件下 vLLM 的吞吐量是 Ollama 的 3-5 倍。
误区 2:llama.cpp 比 vLLM 慢,应该被淘汰
真相:llama.cpp 在 CPU 推理和边缘设备场景下是最佳选择。它的跨平台能力和 GGUF 生态是 vLLM 无法替代的。
误区 3:vLLM 支持所有模型格式
真相:vLLM 主要支持 HuggingFace 格式(safetensors/bin),而 llama.cpp 专注于 GGUF。选型前需要确认模型格式支持。

