跳转到内容

Ollama

来自 Arch Linux 中文维基

Ollama 可以让用户在离线情况下,使用本地版大语言模型。

安装

安装 ollama 软件包,提供了后台服务、命令行工具以及使用CPU推断的能力。

使用显卡推理:

提示:对于搭载来自 RDNA3 的 AMD 显卡,ollama-vulkan 通常比 ollama-rocm 可以更快且使用更少的电量,并且可以避免 ROCm 的不支持显卡问题(另见 #ROCm 没有使用我的 AMD 显卡)。集成显卡自动被跳过;设定 OLLAMA_IGPU_ENABLE=1 来允许他们。

接下来,启用/启动 ollama.service 。然后验证 Ollama 是否成功启动:

$ ollama --version

如果输出提示 Warning: could not connect to a running Ollama instance ,则 Ollama 服务没有成功启动;否则,Ollama 服务启动成功并且进入 Ollama 程序的命令行界面,等待用户输入命令。

然后,验证您可以运行模型。下面的命令将会下载最新的 DeepSeek-R1 蒸馏模型 1.5b 参数版 并返回一个 Ollama 的提示符允许您和这个模型对话。

$ ollama run deepseek-r1:1.5b
>>> Send a message (/? for help)

使用

Ollama 的可执行程序没有提供一个搜索界面。没有类似 ollama search 的命令。需要寻找一个模型,您需要访问他们的 搜索页面

运行模型:

$ ollama run model

停止模型:

$ ollama stop model

拉取模型:

$ ollama pull model

删除模型:

$ ollama rm model

查看本地可用模型:

$ollama list

配置

全系统配置

Ollama 通过环境变量来进行配置。设定它们在对应服务的附加配置片段,然后重启 ollama.service

/etc/systemd/system/ollama.service.d/environment.conf
[Service]
Environment="VARIABLE=value"

常用变量:

变量名 解释
OLLAMA_FLASH_ATTENTION=1 更快地提示词处理和更小的键值缓存;键值缓存量化条件。
OLLAMA_KV_CACHE_TYPE 键值缓存量化,需要注意:
  • f16 (默认)
  • q8_0f16 的一半 VRAM,轻微的质量下降)
  • q4_0q8_0 的一半 VRAM,明显的质量下降)
OLLAMA_CONTEXT_LENGTH 每次请求的默认上下文大小,如:32000;如果没有设定,使用可用的 VRAM 修改大小(4k/32k/256k)。模型可以复写它(见下文)。
OLLAMA_NUM_PARALLEL 每个模型的并发请求;每一个可以倍增键值缓存分配。
OLLAMA_MAX_LOADED_MODELS 每个 GPU 保持加载的模型数量。
OLLAMA_KEEP_ALIVE 最后一次请求后模型在内存中存在的时长 (默认:5m);0 立即卸载,-1 保持它永久加载)。
GGML_VK_VISIBLE_DEVICES=0 在多显卡系统上(如独立显卡 + 集成显卡),固定一个 Vulkan 推理设备(0 = 第一个出现在启动日志中的设备)。
OLLAMA_HOST=host:port 监听所有接口而不仅仅是 loopback;容器需要此功能(如:Podman/Docker 搜索通过 host.containers.internal)和其他的 LAN 主机。
OLLAMA_IGPU_ENABLE=true 使用集成显卡来推理。默认情况下它们会被忽略。

查看 ollama serve --help上游 FAQ 以了解其余变量。

注意:当安装有 ollama 时,Vulkan 支持默认启用;OLLAMA_VALKAN=1 就不需要了。
警告:Ollama API 没有验证措施。若使用 OLLAMA_HOST=0.0.0.0,这这个网络上的任何人都可以使用模型————使用防火墙来限制访问如果这个网络不可信。

每个模型参数

要运行一个带有自定义设定的模型,需要把它们使用一个 Modelfile 来拷入一个新模型。

Modelfile
FROM deepseek-r1:1.5b
PARAMETER num_gpu 29
PARAMETER num_ctx 32768
变量名 解释
FROM 一个被 ollama list 列出的已拉取模型。
PARAMETER num_gpu Number of model layers offloaded to the GPU. Speed rises with each extra layer until VRAM fills. One layer too many spills into GTT (system RAM over PCIe) and speed collapses, even though the model still reports "100% GPU".

Benchmark a few values - the optimum is the most layers that fit just under free VRAM. For example, on a 16 GiB RX 9070 XT running gemma4:26b (Q4_K_M) at 32k context, 29 of 31 layers hit ~88 tok/s with most of the VRAM available; 30 layers dropped to ~75 tok/s (spill) and the auto-offload default gave ~37. With a browser holding ~5 GiB of VRAM the optimum fell to ~24 layers. On an 8 GiB GPU only ~13 layers of this model fit and generation is mostly CPU-bound - there, prefer a model that fits in VRAM entirely (a 7-9B model at Q4_K_M takes ~4-5 GiB) at 8-16k context.

PARAMETER num_ctx 上下文大小:模型第一次看到的最大 Token 数量(提示词 + 回复)。键值缓存和图层共享 VRAM:上下文越大,拟合层数越小————改完之后需要重新调整num_gpu

之后,使用以下命令创建这个模型:

$ ollama create deepseek-r1-tuned -f Modelfile

ollama create 不会复制本体————这些存储是由内容定位的,所以一个调整过的变种只会增加一个小的 manifest。在 API option 字段中,被个请求也可以传入同样的参数。

Ollama 不会保存原 Modelfile;这些参数作为附加层存在模型存储的地方(/var/lib/ollama,manifest 在 manifests/registry.ollama.ai/library/name/tag/)。要更改一个创建好的模型,重写他的 Modelfile,编辑它并再次执行 ollama create 使用相同的名字(仅有小的 manifest 被重写)

$ ollama show --modelfile deepseek-r1-tuned > Modelfile
$ ollama create deepseek-r1-tuned -f Modelfile

参见 Modelfile 参考 以了解其余指令和参数。

故障和修复

ROCm 没有使用我的 AMD 显卡

您可能通过类似 amdgpu_top 去监控您的显卡时在运行 Ollama 服务时,发现显卡根本没有被使用。

在没有配置的情况下,ROCm 忽略不支持的显卡,这导致所有东西都会在CPU下进行。

注意:检验支持显卡通过检查 ROCm 系统要求

为了解决这个问题,针对 ollama.service 创建一个附加配置片段

/etc/systemd/system/ollama.service.d/override_gfx_version.conf
[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=X.Y.Z"

其中 X.Y.Z 由您系统的 GFX 版本所决定。

为了设定使用 GFX 的哪个版本来使用,首先确保 rocminfo 已安装。它应该被安装在您的系统里作为一个 rocblas 的非直接的依赖,这由 hipblas 所需要,这并由 ollama 所需要。

接下来,查询您系统的真正 GFX 版本:

$ /opt/rocm/bin/rocminfo | grep amdhsa

您需要记住输出的 gfx 后边的数字,因为这是您系统真正的 GFX 版本。这些数字按以下的方式解读:

  • 如果数字为4位数,它们可以释作 XX.Y.Z ,及前两个数字为 X 部分。
  • 如果数字为3位数,三位数字可被解释为 X.Y.Z

然后,查找所有安装的 rocblas 内核:

$ find /opt/rocm/lib/rocblas/library -name 'Kernels.so-*'

您需要设定 X.Y.Z 为其中一个列出的可用版本。以下是总结好的的规则:

  1. 对于 X 部分,它必须严格等于实际版本。
  2. 对于 Y 部分,可以不同,但是它必须不得超过实际版本。
  3. 对于 Z 部分,可以不同,但是它必须不得超过实际版本。

在设定好正确的 X.Y.Z 后,执行 daemon-reload重启 ollama.service

现在,您可以照常地运行您的模型。您可能希望再次通过类似 amdgpu_top 去监控集成显卡的使用情况。

卸载 Ollama 后模型仍存在

您可以手动删掉这些模型文件,这些文件存在于 /var/lib/ollama/blobs

另请参阅