Ollama 是如何工作的?

本文摘要Ollama 是如何工作的?本文来源: AI灰鲸(公众号:AI灰鲸) 原文链接: https://mp.weixin.qq.com/s/JkXJROtRgXX4DzVBjD4kHw 发布时间: 2026-10-19 07:01作者: AI灰鲸  发布时间: 2026-10-19 07:01Ollama 是一款免费工具,只需一条简单命令,就能在自己的电脑上下载并运行大语言模型。它会在后台启动一个轻量...

Ollama 是如何工作的?

本文来源: AI灰鲸(公众号:AI灰鲸)
原文链接: https://mp.weixin.qq.com/s/JkXJROtRgXX4DzVBjD4kHw
发布时间: 2026-10-19 07:01

Ollama 是如何工作的?

作者: AI灰鲸  发布时间: 2026-10-19 07:01


Ollama 是一款免费工具,只需一条简单命令,就能在自己的电脑上下载并运行大语言模型。它会在后台启动一个轻量服务,下载压缩后的模型文件,将其加载到内存,再通过高效的推理引擎,根据输入的提示词生成文本。

本文将介绍 Ollama 的工作原理:模型文件为什么要先缩小才能放进笔记本电脑,客户端与服务端如何通信,执行一条命令后会依次发生什么,模型怎样下载、存储并加载到 CPU 和 GPU,Modelfile 有什么用,其他应用如何通过 API 调用 Ollama,以及它适合和不适合哪些场景。

01本地运行大语言模型意味着什么?

了解 Ollama 之前,先弄清楚“在本地运行大语言模型”的含义。

大语言模型(LLM,Large Language Model)会读取提示词,再一点一点地生成回复。这些小块文本称为词元(token),一个词元通常是一个单词,或一个单词的一部分。

在网站上使用大语言模型时,模型通常并不运行在自己的电脑上。消息通过互联网发送到服务商的大型计算机,模型在那里完成计算,再把回复传回来。

本地运行则意味着:模型就在自己的电脑上执行,消息也留在本机。

可以拿吃饭打个比方。使用在线大模型像去餐厅点餐,本地运行则像在家做饭。自己做饭需要准备厨房和食材,但整个过程由自己掌控,别人看不到吃了什么,即使餐厅关门也照样能开火。

因此,本地运行带来的好处包括:

  • 隐私:数据留在自己的电脑上。
  • 离线使用:模型下载完成后,无需联网也能运行。
  • 没有按次调用费用:不必为每条请求付费。
  • 自主控制:自行选择运行哪个模型,以及怎样运行。

不过,过去在本地运行大模型并不轻松:需要找到合适的模型文件、安装各种库、配置 GPU,还要编写代码。Ollama 正是为简化这些工作而来。

02Ollama 是什么?

Ollama 是一款开源工具,让下载、运行和管理本地大语言模型变得更简单。

可以把它理解为模型的“应用商店”:只需指定想用的模型,Ollama 就会负责下载、配置和运行。

安装 Ollama 后,只需一条命令,就能开始与模型对话:

ollama run llama3.2:检查本地模型,缺少时先下载,然后进入终端对话。

其中,ollama run 表示运行一个模型,llama3.2 是模型名称。如果本机还没有这个模型,Ollama 会先下载它,然后直接在终端中开启对话。

Ollama 支持 macOS、Windows 和 Linux。下面看看,这条简单命令背后发生了什么。

03首要难题:模型太大了

大语言模型由数十亿个称为“权重”的数字组成。这些权重承载了模型在训练过程中学到的内容。

通常,每个权重用 16 位存储,也就是 2 字节。

以一个包含 80 亿个权重的模型为例:

80 亿个权重 × 2 字节 = 16 GB

仅仅存放权重,这样一个中等规模的模型就需要 16 GB。许多笔记本电脑总共只有 8 GB 或 16 GB 内存,而操作系统和其他应用也要占用其中一部分。

此外,每生成一个词元,计算机都需要读取这些权重。因此,需要读取的数据越多,生成回复就越慢。

怎样才能把模型放进普通笔记本电脑?办法是让存储这些数字所需的空间变小。

04量化与 GGUF 文件格式

量化(Quantization)就是用更少的位数存储每个权重,例如用 4 位代替 16 位。

这有点像对价格取整:把 49.97 写成 50。虽然损失了一点细节,数字的表示却更简短了。

仍以这个 80 亿权重的模型为例,再算一次:

80 亿个权重:16 位为 16 GB;4 位理论上为 4 GB,实际略大。

4 位版本的权重大小约为原来的四分之一,更容易装进笔记本电脑。每生成一个词元时需要读取的数据也更少,因此运行速度会更快,代价是回答质量会有少量下降。

Ollama 默认下载的许多模型,已经量化到约 4 位。

这些缩小后的模型可以保存在 GGUF 格式的文件中。GGUF 用于存储由 GGML 运行的模型;GGML 是一个帮助大语言模型高效运行的库。一个 GGUF 文件会把模型所需的多种内容封装在一起:

  • 量化后的权重。
  • 模型架构信息,例如模型有多少层。
  • 分词器(tokenizer),负责把文本拆成词元,并把词元转换回文本。

GGUF 出自 llama.cpp 项目。llama.cpp 是一个用 C 和 C++ 编写的开源程序,能够在普通计算机上高效运行大语言模型,也支持没有强大 GPU 的设备。Ollama 构建在 llama.cpp 及其底层 GGML 库之上;较新的版本还为部分模型提供了同样基于 GGML 的自有引擎。

模型运行时繁重的数学计算,由这些引擎完成。运行训练好的模型并生成答案的程序,称为推理引擎(inference engine)。Ollama 则在上层处理模型管理、加载和调用等工作。

05整体架构:客户端与服务端

接下来看看 Ollama 的组成。

Ollama 主要分成两部分:

  • 服务端:在后台运行,负责管理模型、将模型加载到内存并执行推理。可以用 ollama serve 启动;使用桌面应用时,应用会自动启动服务。
  • 客户端:向服务端发送请求。终端里执行的 ollama 命令就是客户端,其他应用也可以充当客户端。

两者通过 HTTP 通信。服务端默认监听 http://localhost:11434。其中,localhost 表示“本机”,11434 是端口号,可以把它想成服务端等待请求的一扇门的门牌号。

ollama CLI、Python 应用与聊天应用通过 HTTP 请求访问端口 11434 上的 Ollama 服务端,服务端调用 CPU 或 GPU。

不同的客户端可以共用同一个 Ollama 服务端。模型统一存放、统一管理,本机上的多个应用都能调用。

06运行模型时,会依次发生什么?

以执行 ollama run llama3.2,然后提出一个问题为例,整个过程可以分成八步。

第 1 步:客户端联系服务端。ollama 命令向 localhost:11434 上的服务端发送请求。

第 2 步:检查磁盘上是否已有模型。如果没有,就从互联网上的 Ollama 模型库下载。下一节会展开介绍下载机制。

第 3 步:把模型加载到内存。服务端读取 GGUF 文件,将权重放入 GPU 显存、系统内存,或者同时分布在两者中。这可能需要几秒钟。

第 4 步:准备提示词。不同模型要求的对话格式不同,需要用特定标记区分系统指令、用户消息和助手回复的起始位置。这种格式称为聊天模板(chat template)。Ollama 会自动使用适合当前模型的模板包装消息。

第 5 步:将提示词转换为词元。分词器把文本拆成词元,再将每个词元映射为数字。

第 6 步:生成回复。推理引擎运行模型,预测下一个词元,将它追加到文本中,然后重复这个过程,直到回复完成。

第 7 步:流式返回结果。新词元一生成,就会发送给客户端。因此,屏幕上的文字会逐步出现,而不必等整段回复全部生成后再显示。

第 8 步:让模型在内存中保留一段时间。回复结束后,模型不会马上卸载。默认情况下,Ollama 会继续保留模型 5 分钟。在此期间再次提问,就能跳过第 3 步,省去重新加载的等待。如果 5 分钟内没有新请求,模型会被卸载,以释放内存。这个时间可以通过 keep_alive 设置调整。

一条简单命令,就这样变成了一次完整的本地大模型对话。

07模型如何下载和存储?

下面进一步看看第 2 步的工作方式。

Ollama 提供在线模型库。每个模型都有名称和标签,例如 llama3.2:3b、qwen2.5:7b。标签通常表示模型规模或版本;如果没有指定标签,Ollama 会使用默认的 latest。

也可以只下载模型,暂时不运行:

ollama pull llama3.2 下载模型;ollama list 列出已下载模型;ollama ps 列出已加载模型;ollama rm llama3.2 删除模型。

pull 会把模型下载并保存到本机,方便之后使用。

在 Ollama 中,一个模型并不是简单地存成一个带名称的独立文件,而是由若干个称为“层(layer)”的部分组成。其中一个较大的层是 GGUF 权重文件,其他较小的层存放聊天模板、默认设置和许可证等内容。

此外,还有一个较小的清单文件(manifest),列出构成该模型的各个层。

每一层的存储名称来自其内容的哈希值(hash)。哈希值可以理解为根据文件内容计算出的指纹;相同内容会产生相同的指纹。

这样做有什么用?假设为同一个基础模型创建两个定制版本,只是系统指令不同,两者就可以使用完全相同的权重文件。由于权重层的哈希值相同,Ollama 只需保存一份权重,单独存储那些有差异的小文件即可,从而节省大量磁盘空间。

例如,在 Mac 上,这些文件默认保存在用户主目录下的 .ollama/models 文件夹中,也就是 ~/.ollama/models。

日常管理模型,只需要几条简单命令:

查看已下载模型:ollama list。

查看当前已加载的模型:ollama ps。

从磁盘删除模型:ollama rm llama3.2。

list 查看磁盘中已有的模型,ps 查看当前已加载到内存的模型,rm 则用于移除不再需要的模型。

08模型如何在 CPU 和 GPU 上运行?

接下来的问题是:实际的计算发生在哪里?

模型可以在 CPU 上运行,也可以在 GPU 上运行。GPU 擅长同时执行大量计算,而大语言模型正需要这类计算能力,因此使用 GPU 通常能显著加速。

Ollama 启动时会检测电脑上的 GPU。它支持 NVIDIA GPU、许多 AMD GPU,以及 Mac 上的 Apple Silicon 芯片。Apple Silicon 的 CPU 和 GPU 共享同一套内存,这对运行大语言模型很有帮助。

大语言模型由多个依次堆叠的层构成。这里的“层”指模型计算的一个阶段,与前面讨论的存储层不同。输入会依次经过第一层、第二层,一直传递到最后一层。

Ollama 会判断 GPU 显存中能放下多少个模型层:

  • 整个模型都放得下:所有层都交给 GPU 运行,速度最快。
  • 只能放下一部分:部分层放到 GPU,其余层保留在系统内存中,由 CPU 运行。这称为部分卸载(partial offloading)。
  • 没有可用 GPU:全部由 CPU 运行。

原文示例:32 层中,20 层在 GPU 上运行,12 层由 CPU 运行。

Ollama 会自动利用可用硬件,无需手动分配每一层。运行 ollama ps,可以查看已加载模型在 GPU 和 CPU 上的分配情况。

需要注意,内存不只用于存储权重,还要容纳对话过程中的缓存。随着模型读取更多文本,它会保存此前词元计算得到的信息,这就是 KV 缓存(KV cache)。对话越长,通常需要的内存越多。模型一次能看到的文本上限称为上下文长度(context length);上下文越长,内存占用也越大。

09Modelfile 是什么?

假设想定制一个模型,让它始终像一位友善的老师那样回答问题,并减少回答中的随机性。

Ollama 可以通过 Modelfile 实现这种定制。Modelfile 是一个小型文本文件,用来描述如何基于已有模型构建定制模型。

它就像一份配方,说明从哪个模型开始,以及需要改动哪些设置。

下面是一份 Modelfile 示例:

Modelfile:FROM llama3.2;PARAMETER temperature 0.3;PARAMETER num_ctx 4096;SYSTEM 设置友善老师。使用 ollama create teacher -f Modelfile 创建,ollama run teacher 运行。

其中:

  • FROM llama3.2:指定作为起点的基础模型。
  • PARAMETER temperature 0.3:将温度设为 0.3。温度控制随机性,数值较低时,回答通常更集中,也更可预测。
  • PARAMETER num_ctx 4096:将上下文长度设为 4096 个词元。
  • SYSTEM:设置系统消息,也就是每次对话前向模型提供的指令。

保存文件后,可以创建并运行这个定制模型:

创建:ollama create teacher -f Modelfile。

运行:ollama run teacher。

create 根据这份配方创建名为 teacher 的模型,run 则启动与它的对话。

这里不会重新复制一份权重。teacher 和 llama3.2 指向相同的权重层,新增的只有体积很小的配置层。这正是前面介绍的层共享机制。

10通过 API 在代码中调用 Ollama

前面的例子都从终端使用 Ollama。由于服务端采用 HTTP 通信,其他程序同样可以通过 API 调用它。

下面用 Python 发送一条聊天请求:

Python requests.post 调用 http://localhost:11434/api/chat,模型为 llama3.2,messages 包含 user 消息,stream=False,打印 response.json()["message"。](https://ilearnai.online/usr/uploads/2026/11/image_6_4.png)

这段代码完成了以下几件事:

  • 向本地 Ollama 服务端的 /api/chat 接口发送请求。
  • 用 model 指定要调用的模型。
  • 用 messages 传入对话。每条消息都包含角色 role,例如 user 或 assistant,以及消息正文 content。
  • 把 stream 设为 False,表示一次性获取完整回复。默认情况下,Ollama 会像终端对话那样,以流式方式逐步返回内容。
  • 最后,从响应中取出回复文本并打印。

运行后,程序会输出模型对“天空为什么是蓝色的?”这个问题的回答。

Ollama 还提供与 OpenAI API 请求格式兼容的接口,基础地址为 http://localhost:11434/v1。许多原本为 OpenAI API 编写的应用和库,可以通过修改请求地址来接入本地 Ollama 模型。

11适用场景与局限

下面把云端大模型服务与本地 Ollama 放在一起对照。

云端大模型服务与本地 Ollama 的七项比较:运行位置、隐私、联网、费用、规模、速度与使用准备。

Ollama 很适合以下情况:

  • 希望保护隐私,例如处理个人笔记或公司文档。
  • 希望构建和测试应用,又不想为每次请求付费。
  • 需要离线工作。
  • 希望快速尝试多个开放模型。

它也有不擅长的场景:

  • 需要规模最大、能力最强的模型。这些模型通常超出了个人电脑的承载能力。
  • 电脑内存较少,或缺少性能较好的 GPU,生成回复会比较慢。
  • 需要同时服务大量用户。Ollama 主要面向单机上的个人或小团队;面对高并发服务,vLLM 这类为高流量推理设计的工具通常更合适。

对大多数个人电脑来说,较小的模型往往是更合适的选择。

至此,Ollama 的工作原理就清楚了。

12常见问题

Ollama 可以免费使用吗?

可以。Ollama 免费且开源。向本地模型发送请求不需要按次付费,但需要自备硬件,因为模型运行在自己的电脑上,而不是服务商的服务器上。

Ollama 需要联网吗?

对于本文讨论的本地运行场景,下载模型时需要联网。模型下载到本机后,就可以离线使用,提示词和回复都留在自己的电脑上。

没有 GPU,也能运行 Ollama 吗?

可以。如果没有可用 GPU,整个模型都会在 CPU 上运行,只是生成回复通常更慢。有可用 GPU 时,Ollama 会尽量把模型层放到 GPU,剩余部分由 CPU 处理。

为 OpenAI API 开发的应用能使用 Ollama 吗?

可以。Ollama 在 http://localhost:11434/v1 提供兼容接口,许多为 OpenAI API 开发的应用和库可以通过修改请求地址,使用本地 Ollama 模型。

为什么第一次回复比后续更慢?

第一次请求需要先把模型从磁盘加载到内存,这可能花上几秒钟。之后,Ollama 默认继续保留模型 5 分钟,因此接下来的问题可以跳过加载步骤,更快开始生成回复。这个保留时长可以用 keep_alive 调整。


本文转载自微信公众号「AI灰鲸」,仅供学习交流使用。

觉得内容不错?我要

打赏杯咖啡或蜜雪冰城吧
微信扫一扫
微信赞赏码
支付宝扫一扫
支付宝赞赏码
评论 暂无评论
请登录后参与评论