Ollama 不使用 GPU 怎么办:NVIDIA、AMD、Mac 与 Docker 排查指南

核对说明:本文的支持范围、驱动版本要求、环境变量和日志位置均来自 Ollama 官方文档(docs.ollama.com 的 GPU 与 Troubleshooting 页面,2026-10-30 读取)。官方文档会随版本更新,请以你所用版本的文档为准;我们没有在每种硬件上逐一复现,下面的步骤是对官方说明的整理。

用 Ollama 跑模型时,发现风扇不转、速度慢得像在用 CPU、任务管理器里显存没动,这就是典型的 Ollama 不使用 GPU 问题。好消息是,原因通常就那么几种:模型放不下显存、驱动太旧、显卡不在支持列表、环境变量设置不当,或者容器里看不到 GPU。这篇文章按“先确认,再分平台排查”的顺序,一项项带你检查。如果你还没装好 Ollama,请先看《Ollama 安装教程》。

Ollama 不使用 GPU:先确认是不是真的没用

不要凭感觉判断,先用命令确认。加载一个模型后,在另一个终端运行:

ollama ps

看 PROCESSOR 一列:

PROCESSOR 显示 含义 下一步
100% GPU 模型完整在显存里,GPU 正常工作 如果仍然慢,问题不在 GPU 调用,见“速度慢但 100% GPU”一节
100% CPU 完全没用到 GPU 按下文“驱动与支持列表”逐项排查
xx%/yy% CPU/GPU 模型一部分在 GPU,一部分在内存 显存放不下,减小模型或上下文,见《大模型显存需求怎么算》

NVIDIA 用户还可以运行 nvidia-smi,在进程列表里应该能看到 ollama 的进程以及它占用的显存。

Ollama 不使用 GPU 的排查流程图
图 1:从 ollama ps 出发,按症状逐步排查

症状与原因速查表

症状 最可能的原因 处理
ollama ps 显示 100% CPU 驱动太旧、显卡不受支持、被设置成只用 CPU 升级驱动;核对支持列表;检查 CUDA_VISIBLE_DEVICES 等变量
显示混合比例 模型加上上下文缓存超过显存 换小一档的模型;缩短上下文
一开始用 GPU,睡眠唤醒后变 CPU(Linux) 已知的驱动问题 重新加载 nvidia_uvm 驱动
Docker 里一开始用 GPU,过一阵变 CPU systemd 的 cgroup 管理干扰 修改 Docker 的 cgroup 驱动设置
AMD 显卡一直 100% CPU(Linux) ROCm 驱动版本过旧 升级到 ROCm v7 驱动并重启
Mac 上很慢 Ollama 以 Rosetta 模拟运行,或使用 Intel Mac 安装原生版本;Intel Mac 只有 CPU
加载后速度忽快忽慢 显存刚好卡在边缘 降低上下文,或量化 KV 缓存

第一类原因:模型加上缓存放不进显存

这是最常见、也最容易被忽略的一类:显卡其实在工作,只是模型放不下,一部分被放进了内存,ollama ps 就会显示“CPU/GPU”混合比例,速度大幅下降。

原因通常有两个。一是模型本身太大,二是上下文设得太长。Ollama 官方文档说明:显存低于 24GiB 时默认上下文是 4k,24–48GiB 是 32k,48GiB 以上是 256k;智能体和编程工具建议至少 64000 token。上下文越长,KV 缓存越大,你可能没有换大模型,缓存却把显存撑爆了。

处理办法:

  1. 换小一档的模型,或者换更低的量化(见《大模型量化与 Q4_K_M》)。
  2. 用 OLLAMA_CONTEXT_LENGTH 或 /set parameter num_ctx 缩短上下文。
  3. 开启 OLLAMA_FLASH_ATTENTION=1,再用 OLLAMA_KV_CACHE_TYPE=q8_0 把缓存砍到约一半。
  4. 8GB 和 24GB 显卡的具体取舍见《8GB 显存跑大模型》和《24GB 显存跑大模型》。

第二类原因:NVIDIA 驱动与支持列表

按 Ollama 官方文档,支持计算能力 5.0 及以上、驱动版本 550 及以上的 NVIDIA 显卡;计算能力 5.0 到 6.2 的老显卡则需要驱动 570 或更高。可以到 NVIDIA 的 CUDA GPU 页面查你的显卡计算能力。官方列表覆盖了 RTX 50 系列(计算能力 12.0)、RTX 40 系列(8.9)、RTX 30 系列(8.6)、RTX 20 系列与 GTX 16 系列(7.5)以及更早的 GTX 10 系列(6.1)等。

排查步骤:

  1. 运行 nvidia-smi。如果这条命令都报错,说明驱动没装好,先解决驱动。
  2. 对照驱动版本,低于 550 就升级;官方也建议尽量用最新的驱动。
  3. 多显卡时检查环境变量 CUDA_VISIBLE_DEVICES:它可以限制 Ollama 使用的显卡,设置成无效的编号(如 -1)则会强制使用 CPU,请确认你没有误设。
  4. Linux 上遇到初始化失败,日志里可能出现错误码 3(未初始化)、46(设备不可用)、100(无设备)、999(未知)。官方建议:确认 uvm 驱动已加载(sudo nvidia-modprobe -u);重载 nvidia_uvm(sudo rmmod nvidia_uvm 然后 sudo modprobe nvidia_uvm);重启;更新驱动;仍然不行就设置 CUDA_ERROR_LEVEL=50 获取更多日志,并检查 dmesg。
  5. Linux 休眠唤醒之后掉到 CPU:这是官方提到的驱动问题,同样用重载 nvidia_uvm 的办法恢复。

第三类原因:AMD 显卡与 ROCm

Ollama 在 Linux 上要求 AMD ROCm v7 驱动,在 Windows 上要求支持 ROCm v7/HIP7 的驱动栈。官方列表包含 Radeon RX 9070 XT、RX 7900 XTX 等型号,以及部分 Ryzen AI 处理器(如 Ryzen AI Max+ 395);Windows 上支持的是 RX 7900 XTX、7900 XT 等 RX 7000 系列型号。

排查步骤:

  1. 如果服务器日志里出现“GPU discovery 超时”“bootstrap discovery took 30s”之类的信息,通常是系统驱动太旧(ROCm 6.x 或更早),需要用 amdgpu-install 升级到 ROCm v7,然后重启并重启 Ollama。
  2. Linux 上访问 /dev/kfd 需要属于 video 或 render 用户组,权限不对时 Ollama 会在日志里报错。
  3. 显卡不在官方支持列表时,可以尝试 HSA_OVERRIDE_GFX_VERSION,让系统使用相近的 LLVM 目标(官方举例 RX 5400 对应 gfx1034,可改用 10.3.0)。这是尝试性的办法,不保证稳定。
  4. 多块 AMD 显卡时,用 ROCR_VISIBLE_DEVICES 选择;设置成无效编号会强制使用 CPU。多块 AMD 显卡在 Linux 上出现乱码输出,官方建议查阅 AMD 的多 GPU 已知问题文档。
  5. 容器里 SELinux 阻止访问 GPU 设备时,可用 sudo setsebool container_use_devices=1。

此外,官方还提供 Vulkan 作为补充支持:Vulkan 后端安装后默认启用,Windows 的大多数显卡驱动自带 Vulkan,Linux 则可能需要额外安装组件。如果 Vulkan 显卡不稳定,可以设置 OLLAMA_VULKAN=0 或 GGML_VK_VISIBLE_DEVICES=-1 关闭;在核显加独显的混合系统里,建议保持 Vulkan 开启,并用 GGML_VK_VISIBLE_DEVICES 指定独显的编号。

上下文长度增加导致显存不足并溢出到 CPU 的原因示意
图 3:上下文设得太大,是“看起来没用 GPU”的常见原因(公式计算示例)

第四类原因:Mac 与 Apple 芯片

Ollama 在 Mac 上通过 Metal 使用 GPU,要求 macOS 14 或更新版本,Apple M 系列芯片可以同时使用 CPU 和 GPU,Intel Mac 只能使用 CPU。官方还提到,在 macOS 的 Rosetta 模拟环境下,只能使用 cpu 库。所以如果你在 M 系列 Mac 上发现速度异常慢,请确认安装的是原生版本、终端也没有以 Rosetta 方式运行。更多 Mac 的内存与选型建议见《Mac 跑大模型怎么选》。

第五类原因:Docker 与容器

在容器里跑 Ollama,GPU 需要先由容器运行时暴露出来。官方的第一步检查是:

docker run --gpus all ubuntu nvidia-smi

如果这条命令不能显示显卡,Ollama 也不可能看到。另一个官方提到的情况是:Ollama 一开始在容器里用 GPU,过一段时间却切换到 CPU,日志里还报 GPU discovery 失败,这可以通过关闭 Docker 的 systemd cgroup 管理来解决,在宿主机的 /etc/docker/daemon.json 里加入 "exec-opts": ["native.cgroupdriver=cgroupfs"]。AMD 显卡在某些发行版上还需要给容器加上 --group-add 来获得设备权限。如果你的 Open WebUI 也跑在容器里,连接问题见《Open WebUI 搭建教程》。

速度慢但显示 100% GPU:别再怪 GPU

ollama ps 已经是 100% GPU 却仍然觉得慢,常见原因有:

  • 模型太大:即使完整放进显存,大模型的生成速度也受显存带宽限制,参见《本地大模型显卡推荐》里的带宽对比。
  • 推理模型在“思考”:思考过程占用大量时间,不是 GPU 没用。
  • 首次加载:模型从硬盘读入显存需要时间。
  • 笔记本节能模式:断电或节能设置会让显卡降频。
  • 上下文很长:提示词越长,预处理越慢。

日志与环境变量:怎么找到真正的原因

Ollama 官方文档给出了日志位置:

平台 日志位置或命令
Mac cat ~/.ollama/logs/server.log
Linux(systemd) journalctl -u ollama --no-pager --follow --pager-end
Docker docker logs <容器名>
Windows 资源管理器中输入 %LOCALAPPDATA%\Ollama,查看 server.log

要看更详细的信息,可以设置 OLLAMA_DEBUG=1,GPU 发现过程会输出额外信息。还有一个需要小心的实验性变量 OLLAMA_LLM_LIBRARY:它可以绕过自动检测,强制使用某个库(例如 cpu_avx2);如果你曾经设置过它,Ollama 就可能一直用 CPU,排查时请检查它是否残留在环境里。

一份 10 步排查清单

  1. 运行 ollama ps,记下 PROCESSOR。
  2. 如果是 100% CPU,在 NVIDIA 机器上运行 nvidia-smi。
  3. 核对驱动版本(NVIDIA 550 及以上;老卡 570 及以上)。
  4. 在 NVIDIA 的 CUDA GPU 页面确认你的显卡计算能力在 5.0 以上。
  5. 检查 CUDA_VISIBLE_DEVICES、ROCR_VISIBLE_DEVICES、GGML_VK_VISIBLE_DEVICES、OLLAMA_LLM_LIBRARY 是否被误设。
  6. 如果是混合比例,缩短上下文或换小一档模型。
  7. AMD 用户确认 ROCm v7 与用户组权限。
  8. Docker 用户先跑 docker run --gpus all ubuntu nvidia-smi。
  9. 重启 Ollama(必要时重启电脑)。
  10. 仍然不行,设置 OLLAMA_DEBUG=1,收集日志,到官方 Discord 或 GitHub 提问。

常见问题(FAQ)

为什么我的 Ollama 一直用 CPU?

最常见的原因是驱动太旧或显卡不受支持,其次是被环境变量限制了显卡,再次是显存放不下。先用 ollama ps 看 PROCESSOR 再对号入座。

NVIDIA 驱动至少要什么版本?

官方文档要求驱动 550 及以上;计算能力 5.0 到 6.2 的老显卡需要 570 及以上。

显存明明够,为什么还有 CPU 占比?

可能是上下文设得太长,KV 缓存挤占了显存;Ollama 对 24GiB 以上显存的默认上下文就更长。请缩短上下文或量化缓存。

AMD 显卡能用吗?

可以,Linux 上需要 ROCm v7 驱动,Windows 上需要支持 ROCm v7/HIP7 的驱动栈,另外还有 Vulkan 的补充支持;具体型号以官方支持列表为准。

Intel Mac 能用 GPU 吗?

官方说明 Intel Mac 只能使用 CPU,Apple M 系列芯片才能同时用 CPU 和 GPU。

重启之后又变回 CPU 了怎么办?

Linux 上先看是否是休眠唤醒问题(重载 nvidia_uvm),Docker 里看 cgroup 设置;同时检查开机自启时的环境变量是否和手动启动时一致。

下一步与社区

遇到解决不了的 GPU 问题,把 ollama ps 的输出、显卡型号、驱动版本和日志片段发到社区(加入社区),我们和其他成员会一起帮你看。我们在深圳做本地大模型机器的选型、采购、组装与实测,也乐于帮你判断是软件配置问题还是硬件不匹配;先聊需求,不强制购买。

参考来源

类似文章