Skip to content

Ollama 与本地推理

五层读懂一个词。这次拆的是:Ollama 与本地推理生态--不用云、不用 GPU 集群,在个人电脑上跑 LLM。核心:llama.cpp(C++ 推理引擎,CPU/Apple Silicon 优化)+ GGUF(量化模型格式)+ Ollama(一键体验封装)。云端有 vLLM/SGLang,本地有 Ollama/llama.cpp——各有各的战场。


L1 · 一句话点破

Ollama = llama.cpp + GGUF + Docker 级易用性。底层是 llama.cpp(C++ 实现的 CPU/GPU 混合推理引擎,GGUF 量化格式),Ollama 给这层包了一个 ollama run 一键启动的壳。从 Modelfile 定义、自动拉取、API 服务到多模型管理,把「本地跑 LLM」从技术活变成了 brew install ollama && ollama run llama3


L2 · 通俗类比

跑 LLM 有两条路:

云端推理(vLLM/TGI)

  • 像叫外卖——快,专业,但要花钱+网络+等配送
  • 数据要发到云端(隐私担忧)
  • 高峰期可能排队

本地推理(Ollama/llama.cpp)

  • 像自己做饭——在自己家做,食材自己控制
  • 数据不出本地(隐私安全)
  • 随时能做,不排队
  • 但受限于厨具(CPU/内存/消费级 GPU)

llama.cpp 像「引擎」

  • 纯 C++ 写的推理引擎
  • 能在任何设备上跑(树莓派、手机、笔记本、服务器)
  • GGUF 格式是它的「燃料」——把 70B 模型压到 40GB

Ollama 像「一键启动」

bash
# Docker 式的拉取+运行
ollama run llama3.2    # 自动下载 + 启动 Llama 3.2
ollama run qwen2.5     # 自动下载 + 启动 Qwen 2.5
ollama run mistral     # 自动下载 + 启动 Mistral

# 就这么简单

对比

维度OllamavLLM/TGI云端 API
运行位置本地自有 GPU 集群云厂商
硬件需求CPU/消费级 GPU数据中心 GPU不需要
模型大小7-70B (量化)7-405B不限
隐私性✅ 完全本地✅ 自有服务器❌ 数据外传
推理速度中等
并发能力
运维成本按量付费
部署难度一行命令复杂API key

代价

  • 推理速度受硬件限制(MacBook 上 7B 约 20-30 tok/s)
  • 不支持大并发(本地推理不适合做 API 服务)
  • 量化损失精度(Q4/Q5 有轻微质量下降)
  • 大模型(70B+)需要大内存(40GB+)

适用

  • 个人使用(离线 ChatBot)
  • 隐私敏感场景(本地数据处理)
  • 原型开发(本地测试再部署)
  • 边缘设备(IoT、手机)
  • 学习研究(零成本实验)

L3 · 正经定义

Ollama:开源的本地 LLM 运行工具。基于 llama.cpp 推理引擎,封装了模型拉取(类似 Docker pull)、运行(ollama run)、API 服务(ollama serve)、Modelfile 自定义等能力。支持 macOS/Linux/Windows,特点是 ollama run <model> 一键体验。

llama.cpp:由 Georgi Gerganov 开发的纯 C++ LLM 推理引擎。核心贡献:

  • GGUF 格式(替代 GGML):高效存储量化模型权重
  • CPU 优化(AVX2/ARM NEON 指令集加速)
  • Apple Silicon 优化(Metal GPU 加速,统一内存架构天然优势)
  • CUDA/Vulkan GPU 后端
  • 支持几乎所有主流架构(LLaMA/Mistral/Qwen/Phi/Falcon)

本地推理生态

方案定位
Ollama一键启动("Docker for LLM")
llama.cpp核心引擎(C++ 高性能)
LM StudioGUI 桌面应用
GPT4All桌面聊天应用
Jan离线 AI 助手
llama.cpp serverHTTP API 服务

参考资料


L4 · 原理深挖

4.1 llama.cpp 的核心优化

优化 1: 纯 C++ 实现,无 Python 依赖

Python (HuggingFace): PyTorch → CUDA kernel → GPU
C++ (llama.cpp):      GGML kernel → CPU/GPU
  • 无 Python GIL 限制
  • 无 PyTorch 框架开销
  • 更少的内存占用(无 Python runtime)

优化 2: 量化推理

cpp
// GGUF Q4_K_M: 每个权重 ~4.5 bits
// 对比 FP16: 每个权重 16 bits
// 压缩比: ~3.5x
// 精度损失: <1% PPL

// 权重量化 + 激活量化
// 权重量化: 常驻内存
// 激活量化: 推理时即时量化

核心量化格式(GGUF)

格式Bits/权重大小 (7B)质量
Q2_K2.63.2 GB❌ 差
Q3_K_M3.44.0 GB⚠️ 勉强
Q4_K_M4.54.7 GB甜点
Q5_K_M5.35.4 GB✅ 好
Q6_K6.66.6 GB✅ 接近 FP16
Q8_08.58.4 GB✅ 几乎无损
F161614 GB基线

选型建议

  • Q4_K_M:通用最佳(速度+质量平衡)
  • Q5_K_M:质量优先(轻微速度下降)
  • Q8_0:追求最高质量
  • Q2_K/Q3_K:内存极度受限才用

优化 3: CPU SIMD 指令加速

cpp
// AVX2 (x86): 256-bit 向量指令
// ARM NEON (Apple Silicon): 128-bit 向量指令
// AVX-512: 512-bit 向量指令

// 矩阵乘法用 SIMD 加速
// dot_product_f32_q4: 量化权重 × FP32 激活

优化 4: Apple Silicon 的统一内存

Apple M1/M2/M3/M4 的统一内存架构:
- CPU 和 GPU 共享同一块物理内存
- 不需要 CPU→GPU 数据传输
- 对 LLM 推理天然友好

M2 Ultra (192GB 统一内存):
  可以跑 Llama-3-70B Q4 (40GB) + 大量 KV-Cache
  这是 x86 做不到的(x86 CPU 到 GPU 要 PCIe 传输)

优化 5: KV-Cache 量化

  • KV-Cache 使用 8bit/4bit 量化
  • 减少 decode 阶段的显存占用
  • 支持更长上下文

4.2 Ollama 的架构

Ollama 的分层

ollama CLI / API

ollama serve (daemon, port 11434)

llama.cpp C++ library (libllama)

GGUF model file

Ollama 的工作流

bash
# 1. 拉取模型(像 docker pull)
ollama pull llama3.2
#   → 从 Ollama Registry 下载 GGUF 模型文件
#   → 存入 ~/.ollama/models/

# 2. 运行模型
ollama run llama3.2
#   → 启动 llama.cpp 推理引擎
#   → 交互式对话

# 3. API 服务 (OpenAI 兼容)
ollama serve
curl http://localhost:11434/v1/completions -d '{
  "model": "llama3.2",
  "prompt": "你好"
}'

Modelfile: 自定义模型

dockerfile
# Modelfile (类似 Dockerfile)
FROM llama3.2

# 设定 system prompt
SYSTEM """
你是资深 Python 工程师。
回答要有代码示例和注释。
"""

# 设定参数
PARAMETER temperature 0.7
PARAMETER top_p 0.9

# 创建
# ollama create my-assistant -f Modelfile
# ollama run my-assistant

Ollama 的多模型管理

bash
ollama list          # 列出本地模型
ollama pull <model>  # 下载模型
ollama rm <model>    # 删除模型
ollama cp a b        # 复制模型
ollama show <model>  # 显示模型信息

4.3 Ollama vs llama.cpp 直接使用

维度llama.cppOllama
安装编译 C++brew install
使用命令行参数ollama run
模型管理手动下载 GGUFollama pull
API 服务./serverollama serve
自定义完全控制Modelfile + 受限
多模型手动ollama list/run
性能最高(无额外层)略低(有 wrapper 开销)

原则

  • 快速体验 → Ollama
  • 极致性能/嵌入式 → llama.cpp
  • C++ 开发/边缘设备 → llama.cpp

4.4 性能数据

Llama-3-8B Q4_K_M

设备速度 (tok/s)说明
M1 MacBook Air (8GB)12-18CPU 推理
M2 MacBook Pro (16GB)20-30Metal GPU
M3 Max (36GB)40-60Metal GPU
Intel i7-13700K15-25AVX2
RTX 3060 (12GB)60-80CUDA
RTX 4090 (24GB)100-150CUDA
iPhone 15 Pro8-12CoreML

Llama-3-70B Q4_K_M (40GB)

设备速度 (tok/s)说明
M2 Ultra (192GB)8-12Metal GPU
2x RTX 3090 (48GB)15-25CUDA
Intel i9 + 64GB DDR52-4纯 CPU,勉强可用

4.5 LM Studio 与桌面应用

LM Studio:GUI 封装的 llama.cpp:

  • 图形化模型发现和下载
  • 本地聊天界面
  • 参数调优滑块
  • 一键启动 API 服务
  • 面向非技术用户

其他选择

应用特点
LM StudioGUI,零代码
GPT4All桌面聊天,插件生态
Jan开源离线助手
Msty多模型对比
Ollama + Open WebUI类 ChatGPT 的本地 UI

4.6 本地推理 vs 云端 API

何时选本地

  • ✅ 隐私敏感(客户数据、代码、个人文档)
  • ✅ 网络不可靠/离线
  • ✅ 频繁使用(月费比 API 划算)
  • ✅ 需要完全控制(自定义 system prompt、fine-tune 本地模型)
  • ✅ 学习和实验

何时选云端

  • ✅ 需要最大模型能力(GPT-4/Claude-3 级别)
  • ✅ 高并发场景(> 10 QPS)
  • ✅ 不想管理硬件
  • ✅ 需要最新的模型(自动更新)

混合方案

  • 敏感数据用本地 8B 模型 + 非敏感数据调云端 API
  • 原型用 Ollama 本地测试 → 上线用 vLLM 集群
  • 开发用 Ollama 免费 → 生产用云端 API

4.7 本地推理生态的局限

局限 1: 大模型受限。70B+ 模型需要大量内存/显存,消费级设备跑不动。405B 级别根本跑不了(即使量化后)。

局限 2: 无并发能力。llama.cpp 的 server 模式有一点并发,但远不如 vLLM。本地推理不适合做 API 服务。

局限 3: 量化有损失。Q4 虽然有 <5% PPL 损失,但在复杂推理/数学任务上可能表现差距明显。

局限 4: 功能不如云端模型。本地模型通常没有 function calling、vision、code interpreter 等高级功能。

局限 5: 长上下文慢。本地推理在长上下文(>8k)时 KV-Cache 占内存大且推理变慢。

局限 6: 模型版本滞后。GGUF 模型通常需要社区手动转换,新模型到 GGUF 有延迟。

局限 7: 不支持训练。llama.cpp/Ollama 是纯推理引擎,不支持 fine-tuning。

局限 8: 多模态支持有限。视觉模型(LLaVA 等)在 llama.cpp 上支持有限。


L5 · 沿革与坑

5.1 沿革

  • 2023-03:llama.cpp 发布(LLaMA 泄露后),C++ 实现的首次爆火
  • 2023-05:GGML 格式流行,社区贡献量化模型
  • 2023-06:Ollama 发布(Mac 优先)
  • 2023-08:GGUF 格式(替代 GGML,更可扩展)
  • 2023 下:LM Studio、GPT4All、Jan 等 GUI 应用涌现
  • 2024:Ollama 支持 Windows/Linux,成为本地推理标准入口
  • 2024:llama.cpp 支持 GPU(CUDA/Metal/Vulkan),速度大幅提升
  • 2025:Ollama GitHub star 超越 100k,本地推理生态成熟

5.2 常见坑

坑 1: 期望 Ollama 7B 跑出 GPT-4 的效果。7B 量化模型能力有限,数学+推理不如 GPT-4。本地是隐私和经济的选择,不是能力的选择。

坑 2: 内存不够就跑 Q4。Q4 质量下降在复杂任务上明显。内存够就用 Q5/Q6/Q8。

坑 3: app 给了 8GB RAM 但想跑 13B。13B Q4 要 ~8GB,加上系统和 KV-Cache 不够。会 swap 到 SSD 导致速度从 20 tok/s 降到 2 tok/s。

坑 4: 忽略 CPU 的指令集。没有 AVX2(老 CPU)llama.cpp 速度减半。Apple Silicon 用 Metal 后端而非 CPU。

坑 5: Context 长度设太大。默认 2048 够了但设 32768 会 OOM。按需设。

坑 6: Ollama Modelfile 不支持所有 llama.cpp 参数。高级调优(如 KV-Cache 量化)要直接用 llama.cpp。

坑 7: 模型来源不可信。从第三方下载 GGUF 可能含恶意代码。要用 Ollama 官方 library 或知名作者。

坑 8: 多模型并行想跑。Ollama 默认串行,多模型同时占用内存/显存不够。一次跑一个。

坑 9: GGUF 模型更新不通知。模型更新了 GGUF 没更新,用老版本。要关注上游版本。

坑 10: 本地 API 和 OpenAI API 不完全兼容。某些参数(如 logit_bias)Ollama 不支持。要检查兼容性。

坑 11: 笔记本电池跑 LLM。LLM 推理是持续高负载,一小时耗完电池。插电用。

坑 12: 期望本地推理和云端一样快。本地 20-60 tok/s vs 云端 API 100-200 tok/s。体验差距是存在的。

5.3 面试怎么考

  1. Ollama 和 vLLM 的区别? 答:Ollama 面向本地/个人使用(消费级硬件),vLLM 面向服务器/生产级高并发。Ollama 基于 llama.cpp(C++ 引擎+GGUF 量化),vLLM 基于 PagedAttention+Continuous Batching(GPU 优化)。场景完全不同。
  2. llama.cpp 为什么在 Apple Silicon 上表现好? 答:统一内存架构(CPU/GPU 共享内存,无 PCIe 传输开销)+ Metal GPU 加速 + ARM NEON 指令集优化。
  3. GGUF 格式的 Q4_K_M 是什么意思? 答:Q = 量化,4 = ~4.5 bits/权重,K = k-quant 策略(重要权重高精度),M = medium(平衡大小和质量)。7B 约 4.7GB,是本地推理的甜点。
  4. 何时选 Ollama 而非云端 API? 答:隐私敏感(本地数据不出设备)、离线需求、频繁使用(月费低)、学习实验。非模型能力选择而是经济/隐私选择。
  5. Ollama Modelfile 做什么? 答:类似 Dockerfile。定义基础模型 + SYSTEM 提示 + PARAMETER 参数,一键创建自定义模型。

速记卡

本地推理生态

Ollama (一键启动)

llama.cpp (C++ 推理引擎)

GGUF (量化模型格式)

GGUF 量化格式

格式大小 (7B)质量推荐
Q2_K3.2 GB不要用
Q3_K_M4.0 GB⚠️内存极端受限
Q4_K_M4.7 GB通用最佳
Q5_K_M5.4 GB质量优先
Q6_K6.6 GB接近 FP16
Q8_08.4 GB几乎无损

Ollama 常用命令

bash
ollama pull <model>    # 下载模型
ollama run <model>     # 运行模型
ollama serve           # 启动 API (port 11434)
ollama list            # 列出本地模型
ollama create xxx -f Modelfile  # 自定义模型

速度对比(Llama-3-8B Q4_K_M)

设备tok/s
M1 MacBook Air12-18
M2 MacBook Pro20-30
RTX 306060-80
RTX 4090100-150
iPhone 15 Pro8-12

本地 vs 云端

维度Ollama 本地API 云端
隐私✅ 数据本地❌ 传云端
速度20-80 tok/s100-200 tok/s
并发❌ 低✅ 高
模型能力⚠️ 开源模型✅ SOTA 模型
成本硬件一次按量付费
离线

一句话记忆:Ollama = llama.cpp + GGUF + 一键体验。llama.cpp 是 C++ 推理引擎(CPU/GPU 混合优化),GGUF 是量化格式(Q4_K_M 甜点),Ollama 是 ollama run 一键启动的壳。本地推理隐私安全、零成本、随时可用,但受限于消费级硬件(7B 20-60 tok/s,70B 需大内存)。和 vLLM 的关系:Ollama 是个人工具,vLLM 是生产工具——场景完全不同。是学习、原型、隐私场景的最佳选择。


上一篇:HuggingFace 生态 -- HF 提供模型,Ollama/llama.cpp 让模型在本地跑起来。下一篇预告:评估与监控专题 -- Perplexity / BLEU / ROUGE / MT-Bench / RAGAS / LangSmith,如何系统性地评估 LLM 应用质量。

内容采用 CC BY-SA 4.0,代码采用 MIT。