摘自:https://sspai.com/post/85193

前言

Ollama

一个简明易用的本地大模型运行框架。

随着围绕着 Ollama 的生态走向前台,更多用户也可以方便地在自己电脑上玩转大模型了。

快速上手

Ollama【win(preview) / mac / linux】 下载页面:https://ollama.com/download

Docker也可以直接使用其官方镜像

docker模式下,指令可直接在docker exec -it ollama下运行

当你运行 ollama --version 命令成功查询到版本时,表示 Ollama 的安装已经顺利完成,接下来便可以用 pull 命令从在线模型库下载模型来玩了。

以中文微调过的 Llama2-Chinese 7B 模型为例,下述命令会下载接近 4GB 的 4-bit 量化模型文件,需要至少 8GB 的内存进行推理,推荐配备 16GB 以流畅运行。

1
% ollama pull llama2-chinese

下载完成后,使用 run 命令运行模型,可直接将消息附在命令后,或留空进入对话模式,对话模式内置了几个以斜杠引出的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 单条输入
% ollama run llama2-chinese "天空为什么是蓝色的?"

# 对话模式
% ollama run llama2-chinese
>>> /?
Available Commands:
/set Set session variables
/show Show model information
/bye Exit
/?, /help Help for a command

Use """ to begin a multi-line message.

>>> 天空为什么是蓝色的?

这个问题是一个常见的争议。有一些科学家认为天空的蓝色可以被解释为雾和云层中的微小碎片反射出来的光色,而其他人则认为这是由于地球自身温度的影响。目前还没这个问题是一个常见的争议。有一些科学家认为天空的蓝色可以被解释为雾和云层中的微小碎片反射出来的光色,而其他人则认为这是由于地球自身温度的影响。目前还没有一个公认的解释。

值得一提的是,Ollama 会判别正在运行的硬件并在可行的情况下调用 GPU 加速,不妨在推理时打开活动监视器或任务管理器观察以验证。

到此,你已经体验到触手可及的本地大模型了。

套上外壳

若是觉得命令行的形式不够易用,Ollama 有一系列的周边工具可供使用,包含了网页、桌面、终端等交互界面及诸多插件和拓展。

之所以 Ollama 能快速形成如此丰富的生态,是因为它自立项之初就有清晰的定位:让更多人以最简单快速的方式在本地把大模型跑起来。于是,Ollama 不是简单地封装 llama.cpp,而是同时将繁多的参数与对应的模型打包放入;Ollama 因此约等于一个简洁的命令行工具和一个稳定的服务端 API。这为下游应用和拓展提供了极大便利。

就 Ollama GUI 而言,根据不同偏好,有许多选择:

Web 版

Web 版:Ollama WebUI 具有最接近 ChatGPT 的界面和最丰富的功能特性,需要以 Docker 部署;

终端 TUI 版

终端 TUI 版:oterm 提供了完善的功能和快捷键支持,用 brewpip 安装;

Raycast 插件

Raycast 插件:Raycast Ollama,Ollama 前端 UI,其继承了 Raycast 的优势,能在选中或复制语句后直接调用命令,体验丝滑。而作为价值约 8 美元/月的 Raycast AI 的平替,Raycast Ollama 实现了 Raycast AI 的绝大多数功能,且随着 Ollama 及开源模型的迭代,还将支持多模态等 Raycast AI 不支持的功能,可谓潜力无限。

此外,还有 Swift 编写的 macOS 原生应用 Ollamac、类似于 Notion AI 的 Obsidian Ollama 等有趣应用,可按需选用。

进阶玩法

更换模型

如果你仔细读了前文演示中「天空为什么是蓝色的」的回答,可能隐约感觉到一丝异样——恭喜,你成功捕捉到了一次大语言模型的「幻觉」。实际上,因为参数量小又经过量化折损,适合在本地运行的模型更容易出现幻觉,严重时甚至会前言不搭后语。对此,唯一的缓解办法可能就是在条件允许的前提下,尽量运行参数更多的模型。

例如,前面上手时用的是 Llama2-Chinese 模型 7B 参数量 4bit 量化版。如果有 16GB 的内存,就可以考虑运行 13B 参数量版本。

如何操作呢?Ollama 采取了与 Docker 组织镜像相似的方案,使用模型名加上标签的形式( model:tag )来确定具体的模型版本,不加标签时默认为 latest ,通常对应 7B 参数量 4bit 量化版。而如果要运行 13B 版本,就可以使用 13b 标签:

1
2
3
4
5
6
7
8
9
10
11
% ollama run llama2-chinese:13b "天空为什么是蓝色的?"

天空是由大气层和太阳光的散射而成的蓝色。

在日出之前,我们看到的天空是紫色或彩虹色,这是因为太阳光从海平面反射回来时,会被大气中的二氧化碳和水分子散射成蓝色、紫色或彩虹色。

而在日出之后,天空变成了灰色,这是由于太阳光从大气中被阻挡,并且不再有足够的反射来给天空增加蓝色。

当我们看到天空时,它的颜色是由于太阳光与大气中的物质相互作用而形成的。这些物质包括水、二氧化碳和其他气体,以及微小的冰片和沙塵。

当我们看到天空变成了晚上时,天空会逐渐变得更加深蓝,这是由于太阳光在大气中传播,同时也因为大气层的结构。

可以看到,效果确实更好了一些。其他可选标签同样可在对应模型的标签页查看。

此外,还可以换用其他模型。在此,推荐几个官方模型库里对中文支持相对较好或比较有趣的几:

  • DeepSeek 系列,深度求索团队推出,包括针对代码训练的 DeepSeek-Coder 和 通用的 DespSeek-LLM
  • Yi 系列,零一万物团队推出,有支持 20 万上下文窗口的版本可选;
  • 如果碰巧财力雄厚,不妨试试法国明星初创团队 Mistral 最新推出的首个开源混合专家 MoE 模型 Mixtral-8x7B,需要 48GB 内存以运行;
  • 如果不巧硬件紧张,无需气馁,Phi-2 由微软团队针对逻辑和理解精调,2.7B 的尺寸只需 4 GB 内存即可运行,吐字速度飞快,只是不太懂中文。

图片支持

除了纯语言大模型,Ollama 自 0.1.15 版本开始提供支持的视觉模型也值得一玩。将本地图片的路径写在 prompt 里即可(macOS 用户可以直接将图片拖入终端来获得其路径):

1
2
3
4
5
% ollama run llava
>>> What does the text in this image say? /Users/mchiang/Downloads/image.png
Added image '/Users/mchiang/Downloads/image.png'

The text in this image says "The Ollamas."

自定义系统提示词

根据 ChatGPT 的使用经验,多数人都已知晓系统提示词的重要性。好的系统提示词能有效地将大模型定制成自己需要的状态。在 Ollama 中,有多种方法可以自定义系统提示词。

首先,不少 Ollama 前端已提供系统提示词的配置入口,推荐直接利用其功能。此外,这些前端在底层往往是通过 API 与 Ollama 服务端交互的,我们也可以直接调用,并传入系统提示词选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
curl http://localhost:11434/api/chat -d '{
"model": "llama2-chinese:13b",
"messages": [
{
"role": "system",
"content": "以海盗的口吻简单作答。"
},
{
"role": "user",
"content": "天空为什么是蓝色的?"
}
],
"stream": false
}'

其中 rolesystem 的消息即为系统提示词。

更多选项

Ollama 的 ModelFile 给用户留下了更多自定义的空间,除了系统提示词,包括对话模板、模型推理温度、上下文窗口长度等参数均可自行设置,适合进阶使用。

在创建前,通过 show --modelfile 命令可以查看现有模型的 ModelFile 内容,作为参考:

1
2
3
4
5
6
7
8
9
10
11
12
% ollama show --modelfile llama2-chinese:13b
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this one, replace the FROM line with:
# FROM llama2-chinese:13b

FROM ~/.ollama/models/blobs/sha256:8359bebea988186aa6a947d55d67941fede5044d02e0ab2078f5cc0dcf357831
TEMPLATE """{{ .System }}
Name: {{ .Prompt }}
Assistant:
"""
PARAMETER stop "Name:"
PARAMETER stop "Assistant:"

以自定义系统提示词并修改推理温度参数为例,应构建如下格式的 ModelFile:

1
2
3
4
FROM llama2-chinese:13b

SYSTEM "以海盗的口吻作答。"
PARAMETER temperature 0.1

然后使用 create 命令进行创建,新的模型会沿用原有模型的权重文件和未作调整的选项参数:

1
ollama create llama2-chinese-pirate -f ~/path/to/ModelFile

从而得到了属于自己的本地模型。

结语

如果与普通应用软件作比,Ollama 的使用体验也许还很难称得上「优雅」。但与数月前的状态相比,其带来的进步就像是从刀耕火种步入现代社会了:当时还需要真金白银堆卡、折腾配置环境才能调通,或是需要自行量化编译才能运行;如今模型发布不到一周(Phi-2 上周发布)就能丝滑地跑在笔记本上。从这个角度说,称 Ollama 为 AI 技术平民化作出了贡献并不为过。