01 - 大模型推理框架选型入门:Ollama、llama.cpp与vLLM全景对比

01 - 大模型推理框架选型入门:Ollama、llama.cpp与vLLM全景对比

本文是《大模型推理框架深度解析》系列的第一篇,适合刚接触LLM部署的开发者阅读。

写在前面

随着大语言模型(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 各框架的本质定位

维度Ollamallama.cppvLLM
本质模型管理工具推理引擎库推理服务框架
设计目标开发便捷跨平台兼容高吞吐服务化
核心用户开发者/研究者嵌入式工程师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本地跑70Bllama.cppMetal后端优化,统一内存优势
边缘设备/嵌入式llama.cppARM NEON优化,低资源占用
高并发API服务vLLM连续批处理,PagedAttention
70B+大模型生产部署vLLMTP/PP分布式支持完善
MoE模型(DeepSeek)vLLMEP专家并行原生支持
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 # 自定义Modelfilecat> 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 # 调用APIcurl 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。选型前需要确认模型格式支持。


五、系列文章预告

本文是系列的开篇,后续将深入各个技术细节:

  • 02 - 量化与性能:GGUF、AWQ、GPTQ的原理差异与性能基准
  • 03 - KV Cache与批处理:PagedAttention如何让内存利用率从60%提升到95%
  • 04 - 分布式推理:TP/PP/EP并行策略的原理与配置
  • 05 - 生产架构:Kubernetes部署与混合链路设计
  • 06 - 故障排查:监控指标、性能调优与故障演练

参考资源


文章标签

大模型推理LLM部署vLLMllama.cppOllamaAI工程化模型量化

Read more

【Arrow开发者必读】:3步解决C和Rust间Schema不一致难题

第一章:Arrow开发者必读:C与Rust数据交互的挑战 在现代数据处理系统中,Apache Arrow 作为跨语言内存数据标准,广泛用于高性能计算场景。当使用 Rust 编写核心逻辑并与 C 接口交互时,开发者常面临内存布局不一致、生命周期管理复杂及类型系统差异等难题。这些挑战直接影响数据传递的安全性与效率。 内存模型差异带来的风险 Rust 的所有权机制与 C 的手动内存管理存在根本冲突。若将 Rust 创建的 Arrow 数组直接暴露给 C,可能因提前释放导致悬垂指针。必须通过 FFI 边界进行深拷贝或使用引用计数包装。 例如,在 Rust 中导出数组指针时需确保其生命周期超越调用栈: #[no_mangle] pub extern "C" fn get_array_data() -> *const ffi:

介绍终身机器人学习的数据集LIBERO

介绍终身机器人学习的数据集LIBERO

1 LIBERO的作用 LIBERO是一个用于研究多任务和终身机器人学习中知识迁移的综合基准测试平台,LIBERO是基于robosuite框架构建的。它专注于机器人操作任务,这些任务需要两类知识: 1. 陈述性知识:关于物体和空间关系的知识 2. 程序性知识:关于运动和行为的知识 2 核心原理 任务生成与基准设计 LIBERO提供了一个程序化生成管道,原则上可以生成无限数量的操作任务。系统包含130个任务,分为四个任务套件,每个套件都有受控的分布偏移: * LIBERO-Spatial/Object/Goal:专注于特定类型知识的迁移 * LIBERO-100:包含需要迁移纠缠知识的100个操作任务 学习框架 系统采用模仿学习作为主要学习方法,因为任务使用稀疏奖励函数(任务完成时获得+1奖励)。LIBERO提供高质量的人类遥操作演示数据集用于训练。 算法与策略架构 LIBERO实现了三种视觉运动策略网络: * bc_rnn_policy:基于RNN的行为克隆策略 * bc_transformer_policy:基于Transformer的行为克隆策略

【论文阅读】Self-supervised Learning of Person-specific Facial Dynamics for APR

【论文阅读】Self-supervised Learning of Person-specific Facial Dynamics for APR

基于特定人物面部动态的自监督学习自动人格识别 * 摘要 * 引言INTRODUCTION * 相关工作 * 五因素模型 * 人格、面部行为与情绪之间的关系 * 基于视频的自动人格预测 * 方法 * 面部动态的自监督学习 * 人格化描述提取 * 训练人格模型 * 实验 * 人格数据库 * 实现细节 * 评价指标 * 消融实验 * 与其他方法的比较 * 结论 论文 关键词:自动人格分析(APR),排序损失,面部时间演变,人格化动态层,自监督学习,卷积神经网络,CNN权重表示 本文主要创新点在于:自监督学习、关注个性化特征 摘要 本文旨在解决现有自动人格分析系统中频繁出现的两个重要问题:1. 使用短视频片段甚至单帧,而非长期行为来推断人格特质;2. 缺乏对特定个体面部动态进行编码以用于人格识别的方法。为解决这些问题,本文提出了一种新颖的排序损失(Rank Loss)利用面部动作的自然时间演变,而非人格标签,来进行面部动态的自监督学习。我们首先训练一个通用的U-net风格模型从一组未标记的面部视频中学

OpenClaw 完整安装与配置文档(包含Minimax/deepseek模型接入、飞书机器人接入)

OpenClaw 完整安装与配置文档 文档说明:本文档适用于 Linux 系统(Debian/Ubuntu 系列),详细梳理 OpenClaw 从基础环境准备、核心程序安装,到模型配置(Minimax/DeepSeek)、飞书渠道对接的全流程,所有交互式配置选项完整呈现,步骤可直接复制执行,适配新手操作。 适用场景:OpenClaw 新手部署、企业内部飞书机器人对接、Minimax/DeepSeek 模型配置 前置说明: 1. 服务器需联网,确保能访问 GitHub、npm、飞书官网; 2. 操作全程使用终端命令行,建议使用远程工具(如 Xshell、Putty)连接服务器; 3. 复制命令时需完整复制,避免遗漏特殊符号; 4. 所有交互式配置选项均完整列出,按文档指引选择即可。 5. 拥有root用户/sudo权限。