解决 Ollama 使用 CPU 而不使用 GPU 运算的问题

整理一套排查 Ollama 只跑 CPU、不走 GPU 的思路,重点覆盖显卡识别、ROCm 或 CUDA 环境、服务重启、显存不足和 AMD 平台常见兼容性问题。

本地跑大模型时,最让人困惑的一类问题就是:机器明明有显卡,Ollama 却还是主要吃 CPU,速度也慢得离谱。

先说结论,这类问题通常不是单一原因。最常见的几类分别是:

  • Ollama 根本没有识别到可用 GPU
  • 驱动、ROCmCUDA 环境没装对
  • Ollama 服务启动时没有继承正确环境变量
  • 模型太大,实际已经退回到 CPUCPU/GPU 混合加载
  • AMD 平台存在额外兼容性问题,比如 ROCm 版本、gfx 代号或设备可见性设置不对

下面按最省时间的顺序排查。

1. 先确认是不是“真的没用 GPU”

最直接的方法是看:

1
ollama ps

重点看 PROCESSOR 一列。

  • 100% GPU:说明模型完整跑在显卡上
  • 100% CPU:说明完全没用上显卡
  • 48%/52% CPU/GPU 这类结果:说明模型部分进显存、部分落到系统内存

如果你看到的是 100% CPU,后面就该重点查环境和服务配置。
如果看到的是混合加载,那不一定是“显卡没生效”,更可能是显存不够。

2. 先排除最常见的误区:模型装不进显存

很多人以为只要装了 GPU,Ollama 就一定会全显卡推理。实际上不是。

如果模型太大、上下文太长,或者机器上已经有别的模型占着显存,Ollama 很可能会退回到:

  • 部分 GPU + 部分 CPU
  • 直接 100% CPU

这时候可以先做两个最简单的验证:

  1. 换一个更小的模型测试
    比如先用 4B7B 这类小模型,而不是一上来就跑更大的参数量。
  2. 卸载其他已加载模型后再试
    先看 ollama ps,确认没有别的模型占着显存。

如果小模型能上 GPU,大模型不行,问题往往就不在驱动,而在显存容量。

3. 检查显卡驱动和底层环境是不是可用

如果连小模型都只能跑 CPU,下一步就该看底层环境。

NVIDIA 方向

先确认驱动正常,系统能看到显卡。常见检查方式包括:

1
nvidia-smi

如果这里都报错,Ollama 基本不可能正常使用 GPU。

AMD / ROCm 方向

如果你是 AMD GPU,尤其是 ROCm 环境,重点先看:

1
2
rocminfo
rocm-smi

如果这些工具都不能正常列出设备,说明问题还在 Ollama 之前,先不要继续折腾应用层。

对 AMD 来说,最常见的问题不是“有没有装驱动”,而是:

  • ROCm 版本和系统版本不匹配
  • 当前 GPU 架构支持不完整
  • 设备虽然存在,但运行环境没有正确暴露给 Ollama

4. 重启 Ollama 服务,不要只重开终端

这是非常高频的坑。

很多人装完驱动、改完环境变量、补完 ROCm 之后,只是重新开了一个终端,然后直接继续 ollama run。但如果 Ollama 是以后台服务方式运行,它很可能还在用旧环境。

所以更稳的做法是:

  • 完整重启 Ollama 服务
  • 必要时直接重启系统

如果你是在 Linux 上以服务方式运行,通常要确认服务进程已经重新拉起,而不是沿用之前的旧进程。

5. 检查服务环境变量有没有真正传进去

这一步在 AMD ROCm 环境尤其重要。

有些机器在终端里手动执行命令没问题,但 Ollama 服务还是只跑 CPU,原因是服务进程没有拿到你在 shell 里设置的变量。

常见需要关注的变量包括:

1
2
ROCR_VISIBLE_DEVICES
HSA_OVERRIDE_GFX_VERSION

其中:

  • ROCR_VISIBLE_DEVICES 用来限制或指定 ROCm 能看到哪些 GPU
  • HSA_OVERRIDE_GFX_VERSION 常见于某些 AMD 平台兼容性处理

如果你只是在当前终端里临时 export 了变量,但 Ollama 是 systemd、桌面后台服务或其他守护进程启动的,这些变量未必会生效。

也就是说,终端里“看起来已经设置好了”,不代表 Ollama 真的拿到了。

6. AMD 平台重点看 ROCm 兼容性

从公开页面信息看,这个问题对应的视频主题本身就落在 AMD Max+ 395strix haloAMD ROCm 这条线上。
这类环境里,Ollama 不走 GPU,往往比 NVIDIA 平台更依赖版本匹配。

可以优先排查下面几项:

  1. ROCm 版本是否适合当前系统和当前显卡
  2. 当前 GPU 是否属于 ROCm 支持较好的架构范围
  3. 是否需要补 HSA_OVERRIDE_GFX_VERSION
  4. 是否是旧版 Ollama 或旧版底层推理库导致兼容问题

如果你已经确认 rocminfo 正常、GPU 也能被系统识别,但 Ollama 仍然只跑 CPU,那大概率要回到版本组合上重新检查,而不是继续盲目调模型参数。

7. Docker、WSL 或远程环境要额外检查设备映射

如果你不是直接在裸机跑,而是在下面这些环境里运行:

  • Docker
  • WSL
  • 远程容器
  • 虚拟化环境

那还要多看一层:GPU 设备有没有真正暴露进去。

典型现象是:

  • 宿主机能看到 GPU
  • 容器里 Ollama 却只能跑 CPU

这时要先确认不是 Ollama 本身的问题,而是容器或子系统根本没拿到 GPU 访问权限。

8. 最后再看日志,而不是一开始就瞎猜

如果前面都查过了,最有效的做法不是继续反复重装,而是直接看 Ollama 启动日志和运行日志。

重点看两类信息:

  • 有没有识别到 GPU
  • 有没有出现驱动、库加载、设备初始化失败之类的报错

只要日志里明确出现类似“未找到兼容 GPU”或“初始化 ROCm/CUDA 失败”,排查方向就会立刻清晰很多。

排查顺序

如果你只想记最短路径,可以按这个顺序来:

  1. ollama ps 看现在到底是 GPUCPU 还是混合加载
  2. 换一个更小的模型,排除显存不够
  3. nvidia-smirocminforocm-smi 先确认底层环境正常
  4. 完整重启 Ollama 服务
  5. 检查服务环境变量,尤其是 AMD 的 ROCR_VISIBLE_DEVICESHSA_OVERRIDE_GFX_VERSION
  6. 如果是 Docker / WSL,再检查设备映射
  7. 最后看日志定位具体报错
记录并分享
使用 Hugo 构建
主题 StackJimmy 设计