Ollama 故障排查:未检测到 GPU、运行缓慢、错误 内存
您已安装 Ollama,也有性能不错的 GPU,但回答却依然很慢——这通常意味着 Ollama 未检测到 GPU,导致模型转而在 CPU 上运行。本指南逐一介绍最常见的故障(回退到 CPU、内存不足、运行缓慢、驱动冲突),并针对每种情况提供诊断命令,帮助您找出实际原因,而不是靠猜测。
#典型症状
Ollama 很少完全停止工作:更常见的是它“能用”,却运行得不好。守护进程确实在 http://localhost:11434 上监听,模型也会响应,但某个环节出了问题。识别症状,就能初步判断应排查哪一类原因。
- 响应非常缓慢
- 预期每秒能处理数十个 token,实际却只有几个:模型很可能在 CPU 上运行,GPU 未被检测到或未被使用。
- GPU占用率为0%
- nvidia-smi 或 rocm-smi 显示显卡在生成过程中处于空闲状态:Ollama 没有使用这张显卡。
- 内存不足错误
- 加载失败,或模型被卸载并出现 CUDA/HIP 的“out of memory”错误消息:模型本身或其上下文超出了显存容量。
- 更新后突然变慢
- 吞吐量突然大幅下降,通常指向驱动程序、Ollama 版本或 CUDA/ROCm 冲突。
- 部分卸载
- 部分层在 GPU 上运行,其余层在 CPU 上运行:这种方式可行,但比将全部层交由 GPU 处理慢得多。
#确认 GPU 确实被使用
只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。
- 在线空间,终身可用
- PDF + 文件
- 30 天内退款
在寻找解决方案之前,必须先确认一件事:Ollama 到底有没有使用 GPU?最直接的命令是 ollama ps,它会显示已加载的模型,尤其是模型驻留内存期间在 CPU 与 GPU 之间的分配情况。
PROCESSOR 列是关键。“100% GPU”表示整个模型都在显卡上——这正是我们希望达到的状态。“100% CPU”则确认模型已完全回退到 CPU。“60%/40% CPU/GPU”表示部分卸载:模型无法完全放入显存(VRAM)。
为交叉验证信息,请在生成过程中使用显卡厂商的工具监控 GPU。如果使用率上升,说明 GPU 正在工作;如果始终为零,说明 Ollama 没有使用该 GPU。
#读取 Ollama 的日志
服务器日志会明确指出加载了哪个后端,以及为何选择或排除了某个 GPU。当 ollama ps 和 nvidia-smi 的信息相互矛盾时,应以服务器日志为准。
查找包含“inference compute”、“library=cuda”或“library=rocm”的日志行,以及转移到 GPU 上运行的层数(“offloaded X/Y layers to GPU”)。如果看到“no compatible GPUs were discovered”或“library=cpu”,就找到了原因:Ollama 未检测到可用的 GPU。
#回退到 CPU 及其常见原因
当 Ollama 无法使用 GPU 时,它不会崩溃,而是会静默切换到 CPU。这种行为最令人困惑,因为表面上“一切都能正常运行”。以下是最常见的原因,按从最普通到最隐蔽的顺序列出。
- 01显存不足以支持模型如果模型(权重 + 上下文)超出可用 VRAM,Ollama 会将部分负载转移到 CPU,甚至全部。14B 模型在 Q4 量化下约需 9 GB,32B 模型约需 19 GB:在 12 GB 显存的显卡上,32B 模型无法完整加载。
- 02GPU驱动缺失或版本过旧如果没有较新的 NVIDIA 驱动程序(或 AMD 侧的 ROCm),Ollama 将检测不到任何兼容的 GPU,并回退到 CPU。这是导致“ollama gpu 未检测到”错误的第一大原因。
- 03GPU 被其他进程占用另一个模型、游戏、Python notebook 或另一个 Ollama 实例可能已经占满显存。nvidia-smi 会列出各个进程及其内存占用。
- 04Ollama在无GPU直通的容器中运行在Docker中,若不使用--gpus all(NVIDIA)或未暴露ROCm设备,容器将无法识别显卡。守护进程运行,但仅在CPU上运行。
- 05GPU 不受支持过于陈旧的显卡(CUDA 计算能力不足)或 AMD 显卡未在 ROCm 官方支持列表中:Ollama 主动忽略这些设备。
#内存不足(out of memory)错误:如何解读和解决
出现消息「CUDA error: out of memory」(或 AMD 上的「HIP out of memory」)表示模型所需的 VRAM 超出了可用容量。两个因素会增加这一需求:模型大小和上下文窗口。降低其中一个即可解决大多数情况。
- 模型过大
- 切换到更轻量的量化格式(用 Q4_K_M 替代 Q5/Q8),或使用更小的模型。Q4 大致占用:7B≈5 GB · 14B≈9 GB · 32B≈19 GB · 70B≈40 GB。
- 上下文过长
- 较大的 num_ctx 会增加 KV 缓存的内存占用。减小上下文窗口(num_ctx)可释放大量 VRAM,尤其在大模型上效果显著。
- 其他进程导致显存碎片化
- 关闭游戏、Notebook 会话和其他模型。重启 Ollama 守护进程,以便从干净的显存状态重新开始。
- 残留的内存占用
- 先前加载且仍驻留的模型会占用 VRAM。ollama stop <modèle> 可立即将其从内存中卸载,无需等待 keep_alive 到期。
#保持 NVIDIA/AMD 驱动程序、CUDA 和 ROCm 为最新版本
许多‘Ollama GPU未检测到’的问题通过更新驱动程序层即可解决。Ollama 内置了CUDA/ROCm库,但依赖系统驱动与硬件通信。
在AMD方面,ROCm的安装要求更为严格:显卡必须出现在支持的GPU列表中,有时还需要导出变量以强制支持相近的架构(HSA_OVERRIDE_GFX_VERSION)。请首先确认rocminfo能够正确识别显卡。
#突然变慢
原本良好的生成吞吐量如果突然下降,几乎总能找到原因。与一直回退到 CPU 运行的情况不同,突然变慢说明运行状态最近发生了变化。
- 新出现的部分卸载
- 您已增加上下文长度或加载了更大规模的模型:部分模型已切换到CPU运行。请检查ollama ps命令,并查看「offloaded N/M layers」这一行。
- 过热降频
- GPU过热会降低其频率。nvidia-smi 可显示温度和「P-State」状态;当温度超过约83 °C时,显卡将进入降频状态。
- 更新 Ollama 或驱动程序
- 新版本中的回归问题可能导致推理变慢。更新前,请记录之前运行正常的版本(ollama --version),以便之后回退。
- 共享显存 / 系统内存
- 在Windows系统中,当显存不足时,驱动程序可能会使用系统内存(GPU共享内存),从而导致性能崩溃。应优先减小模型规模,而非任由显存溢出。
- 每次请求均需重新加载
- keep_alive 时间过短会导致模型频繁重新加载。若连续发送请求,请增大 OLLAMA_KEEP_ALIVE 参数。
#诊断检查清单
出现问题时,请按顺序执行这些步骤:它们按问题出现的频率从高到低排列,可避免排查方向出错。
- 011. 确认症状ollama ps pendant une génération : la colonne PROCESSOR indique-t-elle CPU, GPU ou un mélange ?
- 022. 检查系统能否识别GPUnvidia-smi(或 rocm-smi)有响应吗?如果没有,问题出在驱动程序,而非 Ollama。
- 033. 阅读日志journalctl -u ollama -f(或 OLLAMA_DEBUG=1 ollama serve):查找「library=cuda/rocm/cpu」和「offloaded N/M layers」。
- 044. 检查可用 VRAMnvidia-smi:是否有其他进程占用显卡?剩余可用显存是否足以容纳模型?
- 055. 若出现内存不足(OOM)或模型仅部分加载到 GPU,则降低负载采用内存占用更低的量化方案、选择更小的模型,或减小 num_ctx。使用 ollama stop 卸载不再使用的模型。
- 066. 更新并重启将驱动程序和 Ollama 更新到最新版本,然后重启服务(更换驱动程序后还需重启机器)。
#深入了解
一旦GPU被正确识别,该网站提供的指南可帮助您充分发挥硬件性能,并避免问题反复出现:
- 选择量化方案(Q4、Q5、Q8、FP16)
- 对抗内存错误的第一杠杆:理解质量/VRAM 权衡,以选择适合您显卡的格式。
- 在无 GPU(仅 CPU)的情况下本地运行 LLM
- 如果您的硬件不支持将计算任务交给 GPU,本指南将介绍如何仅使用 CPU 仍保持可用的体验,以及如何根据 RAM 容量选择模型。
- 安装 Ollama:Windows、macOS 和 Linux
- 重新检查守护进程和驱动程序的正确安装情况;GPU 未被检测到的根本原因往往就在这里。
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。