本地跑大模型时,最让人困惑的一类问题就是:机器明明有显卡,Ollama 却还是主要吃 CPU,速度也慢得离谱。
先说结论,这类问题通常不是单一原因。最常见的几类分别是:
Ollama根本没有识别到可用 GPU- 驱动、
ROCm或CUDA环境没装对 Ollama服务启动时没有继承正确环境变量- 模型太大,实际已经退回到
CPU或CPU/GPU混合加载 - AMD 平台存在额外兼容性问题,比如
ROCm版本、gfx代号或设备可见性设置不对
下面按最省时间的顺序排查。
1. 先确认是不是“真的没用 GPU”
最直接的方法是看:
|
|
重点看 PROCESSOR 列:
100% GPU:当前模型权重全部加载到 GPU;100% CPU:权重完全在系统内存中;48%/52% CPU/GPU一类结果:模型部分 offload 到 GPU,剩余部分留在 CPU 内存。
这个百分比描述的是模型加载位置,不等于瞬时 GPU 利用率。生成间隙里任务管理器可能显示较低利用率,但权重仍然驻留在显存。
如果你看到的是 100% CPU,后面就该重点查环境和服务配置。
如果看到的是混合加载,那不一定是“显卡没生效”,更可能是显存不够。
2. 先排除最常见的误区:模型装不进显存
很多人以为只要装了 GPU,Ollama 就一定会全显卡推理。实际上不是。
如果模型太大、上下文太长,或者机器上已经有别的模型占着显存,Ollama 很可能会退回到:
- 部分 GPU + 部分 CPU
- 直接
100% CPU
这时候可以先做两个最简单的验证:
- 换一个更小的模型测试
比如先用4B、7B这类小模型,而不是一上来就跑更大的参数量。 - 卸载其他已加载模型后再试
先看ollama ps,确认没有别的模型占着显存。
如果小模型能上 GPU,大模型不行,问题往往就不在驱动,而在显存容量。
3. 检查显卡驱动和底层环境是不是可用
如果连小模型都只能跑 CPU,下一步就该看底层环境。
NVIDIA 方向
先确认驱动正常,系统能看到显卡。常见检查方式包括:
|
|
如果这里都报错,Ollama 基本不可能正常使用 GPU。
AMD / ROCm 方向
如果你是 AMD GPU,尤其是 ROCm 环境,重点先看:
|
|
如果这些工具都不能正常列出设备,说明问题还在 Ollama 之前,先不要继续折腾应用层。
对 AMD 来说,最常见的问题不是“有没有装驱动”,而是:
ROCm版本和系统版本不匹配- 当前 GPU 架构支持不完整
- 设备虽然存在,但运行环境没有正确暴露给
Ollama
4. 重启 Ollama 服务,不要只重开终端
这是非常高频的坑。
很多人装完驱动、改完环境变量、补完 ROCm 之后,只是重新开了一个终端,然后直接继续 ollama run。但如果 Ollama 是以后台服务方式运行,它很可能还在用旧环境。
所以更稳的做法是:
- 完整重启
Ollama服务 - 必要时直接重启系统
如果你是在 Linux 上以服务方式运行,通常要确认服务进程已经重新拉起,而不是沿用之前的旧进程。
5. 检查服务环境变量有没有真正传进去
这一步在 AMD ROCm 环境尤其重要。
有些机器在终端里手动执行命令没问题,但 Ollama 服务还是只跑 CPU,原因是服务进程没有拿到你在 shell 里设置的变量。
常见需要关注的变量包括:
|
|
其中:
ROCR_VISIBLE_DEVICES用来限制或指定ROCm能看到哪些 GPUHSA_OVERRIDE_GFX_VERSION常见于某些 AMD 平台兼容性处理
如果你只是在当前终端里临时 export 了变量,但 Ollama 是 systemd、桌面后台服务或其他守护进程启动的,这些变量未必会生效。
也就是说,终端里“看起来已经设置好了”,不代表 Ollama 真的拿到了。
6. AMD 平台重点看 ROCm 兼容性
从公开页面信息看,这个问题对应的视频主题本身就落在 AMD Max+ 395、strix halo、AMD ROCm 这条线上。
这类环境里,Ollama 不走 GPU,往往比 NVIDIA 平台更依赖版本匹配。
可以优先排查下面几项:
ROCm版本是否适合当前系统和当前显卡- 当前 GPU 是否属于
ROCm支持较好的架构范围 - 是否需要补
HSA_OVERRIDE_GFX_VERSION - 是否是旧版
Ollama或旧版底层推理库导致兼容问题
如果你已经确认 rocminfo 正常、GPU 也能被系统识别,但 Ollama 仍然只跑 CPU,那大概率要回到版本组合上重新检查,而不是继续盲目调模型参数。
7. Docker、WSL 或远程环境要额外检查设备映射
如果你不是直接在裸机跑,而是在下面这些环境里运行:
- Docker
- WSL
- 远程容器
- 虚拟化环境
那还要多看一层:GPU 设备有没有真正暴露进去。
典型现象是:
- 宿主机能看到 GPU
- 容器里
Ollama却只能跑CPU
这时要先确认不是 Ollama 本身的问题,而是容器或子系统根本没拿到 GPU 访问权限。
8. 最后再看日志,而不是一开始就瞎猜
如果前面都查过了,最有效的做法不是继续反复重装,而是直接看 Ollama 启动日志和运行日志。
重点看两类信息:
- 有没有识别到 GPU
- 有没有出现驱动、库加载、设备初始化失败之类的报错
只要日志里明确出现类似“未找到兼容 GPU”或“初始化 ROCm/CUDA 失败”,排查方向就会立刻清晰很多。
分平台读取真实日志
Windows
先完全退出托盘中的 Ollama,再以调试模式启动:
|
|
安装版日志通常位于:
|
|
可以直接打开目录:
|
|
Linux systemd
|
|
NVIDIA 设备发现失败时,再检查:
|
|
官方排错文档列出的典型 CUDA 错误包括未初始化、设备不可用、没有设备和未知错误。日志出现这些信息时,方向是驱动、UVM 模块或容器运行时,不是模型提示词。
Docker
先证明容器运行时能够看到 GPU:
|
|
这个命令失败时,Ollama 容器也无法使用 NVIDIA GPU。先修复 NVIDIA Container Toolkit 或 Docker 配置,再重启 Ollama 容器。
Linux AMD
检查 Ollama 服务用户能否访问 /dev/kfd 和 /dev/dri:
|
|
需要调试 ROCm 发现过程时:
|
|
如果日志出现 GPU discovery 超时,同时系统仍使用 ROCm 6.x 或更早驱动,应按 Ollama 当前硬件文档升级到兼容的 ROCm 7 驱动并重启。不要用 HSA_OVERRIDE_GFX_VERSION 掩盖明确的驱动版本错误。
修复后的验收
修复后至少完成一次冷启动验证:
|
|
同时观察 nvidia-smi、rocm-smi 或系统 GPU 监视器。验收结论按 ollama ps 的 PROCESSOR 列记录:
100% GPU:模型完整加载到 GPU;100% CPU:仍完全使用系统内存;CPU/GPU:混合加载,通常需要继续判断是否因为显存容量不足。
最后重新查看服务日志,确认没有新的设备发现失败。仅看到 GPU 利用率瞬时升高,不足以证明模型始终在 GPU 上。
恢复与回滚
如果修改环境变量后 Ollama 无法启动,先撤销本轮新增变量并重启服务。不要一次同时修改驱动、容器映射、ROCm 版本和 Ollama 配置,否则无法判断哪个改动生效。
建议每轮只做一个改动,并保存三项证据:修改前日志、修改命令、修改后的 ollama ps。升级驱动前创建系统还原点或保留可回退的驱动安装包。
排查顺序
如果你只想记最短路径,可以按这个顺序来:
ollama ps看现在到底是GPU、CPU还是混合加载- 换一个更小的模型,排除显存不够
- 用
nvidia-smi、rocminfo、rocm-smi先确认底层环境正常 - 完整重启
Ollama服务 - 检查服务环境变量,尤其是 AMD 的
ROCR_VISIBLE_DEVICES、HSA_OVERRIDE_GFX_VERSION - 如果是 Docker / WSL,再检查设备映射
- 最后看日志定位具体报错