■ 先给答案

100% GPU —— GPU 没问题,不必往下读.

40%/60% CPU/GPU split——没挤进显存,换更小的量化。

100% CPU — 没找到可用的 GPU:驱动过旧、缺 render/video 组(AMD)、被钉死的 OLLAMA_LLM_LIBRARY,或没有 GPU 参数的容器。

两条命令

# in one terminal: load a model
ollama run llama3.2 "hello"

# in another: see where it runs
ollama ps
NAME             ID           SIZE     PROCESSOR    UNTIL
llama3.2:latest  a80c4de17cd9 3.3 GB   100% GPU     4 minutes from now

然后读服务器日志,它 点名 Ollama 实际找到的硬件(启动时):

journalctl -u ollama --no-pager | grep -i "inference compute"

在健康的 NVIDIA 机器上,你想看到大致这样的行:

inference compute id=GPU-xxxx library=CUDA compute=8.9 driver=12.4 name=NVIDIA GeForce RTX 4070

一行都没有,或者有行却以 CPU-only 兜底的信息收尾——问题找到了。检测 只在启动时发生一次,不随每次请求——任何修法之后都要 sudo systemctl restart ollama 再复查。

修法表

按顺序查原因——十有八九,日志行已经告诉你在哪一行了:

症状可能的原因修法
100% CPU,有 NVIDIA 卡驱动对自带的 CUDA 太旧更新驱动,重启机器,重启服务
100% CPU,Linux 上的 AMD缺 render/video 组usermod -aG render,video,重新登录
100% CPU,AMD 卡不受支持ROCm 拒绝 gfx 目标HSA_OVERRIDE_GFX_VERSION=10.3.0
40%/60% CPU/GPU split模型 + 上下文超出显存更小的量化或更短的 num_ctx
昨天 GPU 干活,今天 CPU钉死了 OLLAMA_LLM_LIBRARY 或驱动过时找到并删掉该环境变量;更新驱动
本机 GPU,Docker 里却是 CPU容器启动时没带 GPU 参数用 --gpus=all(或 AMD 的 devices)重建

NVIDIA:是驱动,不是 CUDA

常见的元凶是 驱动,不是 CUDA。Ollama 自带 CUDA 运行库,不需要 CUDA toolkit——但自带的运行库需要一个够新的驱动跟它对话。跑得起来的 nvidia-smi并不算 证明:只能证明存在一个驱动,不能证明它够新。

nvidia-smi --query-gpu=driver_version --format=csv,noheader

# Debian/Ubuntu family
sudo apt install nvidia-driver-570
# Arch family
sudo pacman -S nvidia

# then re-detect:
sudo systemctl restart ollama

verify: journalctl -u ollama --no-pager | grep -i "inference compute" → library=CUDA

SPLIT:部分卸载是算术题,不是 bug

模型权重 加 KV 缓存必须同时挤进显存。同一个模型,上下文更长——缓存长过卡面,剩下的溢到 CPU:

三种收官差距的办法,最便宜的先来:更小的量化(Q8 → Q4 把权重砍半,质量代价不大);更短的上下文 (num_ctx 主导缓存大小——8 GB 卡上跑 32K 意味着大部分层留在 CPU);以及 更少的 GPU 层 —— num_gpu 选项封住卸载上限,把它设到层数以下就必然 split。若有人把它写进了 Modelfile 或 API 调用,解掉它。还有一个陷阱:100% GPU 但依然慢——模型可能在系统内存里换进换出;把 ollama ps SIZE 和你的真实显存对一对。

Linux 上的 AMD:三件可核对的事

1. 二进制里有 ROCm ——官方安装脚本自带。确认服务器检测到了什么:journalctl -u ollama --no-pager | grep -iE "rocm|inference compute".

2. 组员身份 ——运行库要求 /dev/kfd + /dev/dri,也就是这些组:render/video:

sudo usermod -aG render,video $USER
# log out and back in, then:
sudo systemctl restart ollama

缺组是「Ollama 在 Ubuntu 上不用 GPU」这类帖子在各论坛上最常见的原因——驱动从来不是问题.

3. 受支持的 GPU——或者一个绕道。 不受支持的 RDNA2 消费卡(gfx1031, gfx1032)即使 ROCm 全家健在也过不了检测。标准绕道是伪装成受支持的卡:sudo systemctl edit ollama,然后:

[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0"

再重启。不受支持但是被广泛用着——若表现不对劲,撤掉它。Windows 上 AMD 支持更窄;先看 Ollama 的支持 GPU 清单,再断定安装坏了。

verify: journalctl -u ollama --no-pager | grep -iE "rocm|inference compute" → 你的 gfx 目标被列出

「昨天还能跑」

升级改动的是以下三件事之一,按概率排序:

  1. 被钉死的后端运行库。 OLLAMA_LLM_LIBRARY 强制指定一个 runner(cuda_v11, rocm,甚至 cpu),而它 无声地压过自动检测。这是调试开关,会在 shell 配置和服务文件里长期驻留,久到把当初设它的原因都忘了。找到它:systemctl show ollama --property=Environment | grep -i llm_library 和 env | grep OLLAMA ——然后删掉。
  2. 驱动落后于运行库。 Ollama 升级自带更新的 CUDA 运行库;你的驱动不动它就不动。修法与驱动一节相同。
  3. 服务被装进了容器,参数丢了。 没带 GPU 参数重建的 Docker 容器就是 CPU-only 容器——带上 --gpus=all(或 AMD 的 device 参数)重建。
■ 诚实的盖印 测试于:ollama · RTX 3060 / 4070 · 驱动 535 → 570 · Ubuntu · WSL2 · Docker。 首发于 2026-09-16。PROCESSOR 的三种状态、启动检测那一行、以及表里的每种修法,都是在这些机器上看到的 ollama 文档行为——从回归了 GPU 的机器上敲出来,不是想象。

五种原因到此为止 · 未取任何远程内容 · 全程本地