
Ollama is not using my GPU (Windows)
快速结论:在 Windows 上使用 Ollama 时,即使系统检测到 NVIDIA GPU,模型加载后也可能因显存不足(VRAM 接近或超过容量)或上下文窗口(context window)过大而完全回退到 CPU 运行。优先检查日志中的 offloaded 22/33 layers to GPU 数值,并尝试缩小上下文窗口。
问题场景
用户在 Windows 终端运行 ollama run mistral:7b --verbose 时,首次请求 GPU 使用率短暂上升(25%)但后续请求 GPU 使用率降至 0-1%,模型响应极慢。其他模型(如 tinyllama)可正常使用 GPU。该问题在 Ollama v0.1.29 及后续版本中均有出现,尤其当模型大小接近或超过 GPU 显存时(例如 4GB 模型在 4GB GPU 上)。
报错原文
无独立报错信息,但典型日志行示例如下:
llm_load_tensors: offloaded 22/33 layers to GPU
如果 offloaded 数值远小于总层数,则说明仅部分层使用 GPU,其余由 CPU 处理。
原因分析
主要原因是 Ollama 的内存预测算法未能将所有层(layers)加载到 GPU 显存中。当模型所需显存(含 overhead)超过可用显存时,剩余层由 CPU 处理。GPU 速度远快于 CPU,导致 GPU 空闲等待 CPU,整体性能急剧下降。以下场景也会触发该问题:
- 上下文窗口(context window)设置过大:例如从 4K 增加到 32K-128K 后,VRAM 占用从 14GB 降为 0GB,即完全回退到 CPU。
- 显存不足(VRAM 占用超过 90%)时自动回退。
- 部分大模型(如 gpt-oss 20B)在 Windows 上默认不使用 GPU,即使显存足够(如 RTX 5090 或 RTX 3090)。
可能原因还包括:CUDA 库路径未正确设置(需将 cudart64_110.dll 所在目录加入 PATH),或 Ollama 版本未更新(部分版本修复了该问题)。
环境排查
- 确认 Ollama 版本(如 v0.1.29, v0.11.3 等)及系统:Windows、x86、NVIDIA GPU、WDDM 驱动。
- 检查 GPU 显存容量与模型大小关系(如 mistral:7b 约 4GB,RTX 3050 4GB 可能不足)。
- 查看 Ollama 服务日志:日志路径见官方 troubleshooting 文档。
- 确认上下文窗口默认值(可通过环境变量或配置文件调整)。
- 检查 CUDA 运行时库:确保
cudart64_110.dll在 PATH 中(位于 Ollama workdir)。 - 尝试其他小模型(如
tinydolphin,tinyllama)以排除模型或显存问题。
解决步骤
- 缩小上下文窗口(可优先尝试):在运行时通过环境变量或配置文件降低 context window 大小(例如从 32K 降至 4K-8K),以释放 VRAM 供更多 layers 使用。
- 完全重启 Ollama 进程:右键点击系统托盘的 Ollama 图标,选择“退出”(Exit),然后重新打开终端运行模型。部分用户报告此操作可恢复 GPU 使用。
- 设置 CUDA 库路径:将
OLLAMA_LLM_LIBRARY=cuda_v11.3环境变量配合正确的 PATH 设置,确保cudart64_110.dll可被找到。具体参考 #4008 评论。 - 升级 Ollama 版本:部分版本(如 v0.11.3)已修复此类问题。请安装最新稳定版。
- 手动调整 layers 数量:通过
--num-gpu-layers参数限制 GPU 层数(需参考模型文档确定总层数),确保可全部加载到显存。 - 检查系统其他显存占用:关闭不必要的 GPU 应用,释放 VRAM。
验证方法
运行 ollama run <model> --verbose 并观察 GPU 使用率(通过任务管理器)。正常条件下 GPU 使用率应稳定在 20%-90%(依据模型大小),而非长期为 0%。同时检查日志行:llm_load_tensors: offloaded 33/33 layers to GPU 或接近满载的数字。如果上下文窗口调整后恢复 GPU 使用,则问题解决。



