最近在 Linux 机器上部署 Ollama本来机器有一张NVIDIA RTX 3050 6GB而且nvidia-smi也是正常的但奇怪的是运行模型时ollama ps一直显示PROCESSOR100% CPU按理说这台机器应该能跑到 GPU。最后经过一轮完整排查问题解决了模型成功切换到 GPU。这篇文章把整个过程记录下来尤其是排查中用到的命令挺值得收藏。一、问题现象执行ollamaps输出类似NAME ID SIZE PROCESSOR CONTEXT UNTIL qwen3.5:4b 2a654d98e6fb5.8GB100% CPU40964minutes from now说明当前模型完全跑在 CPU 上没有 offload 到 GPU。而这台机器明明有 NVIDIA 显卡理论上应该优先走 GPU。二、先看最直观的 GPU 状态第一步先确认系统层面显卡是不是好的nvidia-smi我的输出大致是-----------------------------------------------------------------------------------------|NVIDIA-SMI580.126.09 Driver Version:580.126.09 CUDA Version:13.0||0NVIDIA GeForce RTX30509MiB / 6144MiB|-----------------------------------------------------------------------------------------|Processes:||No running processes found|-----------------------------------------------------------------------------------------这说明驱动是正常的系统能识别 GPU当前没有别的进程占用显卡显存6144M目前只用了9M,也说明没有人在用。所以问题不是“显卡坏了”或者“驱动没装”。三、怎么查看 Ollama 日志Linux 下我这是 systemd 方式安装的 Ollama可以这样看日志journalctl-uollama --no-pager--follow或者先看最近 200 行journalctl-uollama-n200--no-pager为了更快定位 GPU 相关信息可以直接 grepjournalctl-uollama-n200--no-pager|grep-Eicuda|nvidia|gpu|offload|memory我当时在日志里看到的关键信息是system CPU.0.LLAMAFILE1 offloading 0 repeating layers to GPU offloaded 0/33 layers to GPU model weights deviceCPU kv cache deviceCPU compute graph deviceCPU这几行非常关键基本可以直接判断Ollama 当前没有成功启用 GPU backend而不是“只用了部分 GPU”。也就是说它不是“显存不够所以退了一部分到 CPU”而是从一开始就走了 CPU 路径。四、先判断是不是显卡被别人占用了很多人第一反应会怀疑是不是同事在占 GPU这个除了前面的方法外还有一个监控不断输出的方法watch-n1nvidia-smi如果有别人占用一般会看到显存被占掉Processes里出现 PID 和进程名GPU-Util 不是 0我这里一直是Memory-Usage: 9MiB / 6144MiB GPU-Util: 0% Processes: No running processes found说明不是别人占用 GPU 的问题。五、确认 Ollama 服务是以谁的身份运行查看 systemd 服务配置systemctlcatollama输出[Service] ExecStart/usr/local/bin/ollama serve Userollama Groupollama这个信息非常重要。说明 Ollama 不是用当前登录用户运行而是用系统用户ollama在运行。所以这里需要注意权限有可能不一致我自己的nvidia-smi正常不代表ollama这个用户也能正常访问 GPU。六、检查 ollama 用户是否有权限访问 GPU先看用户组idollamagroupsollama然后看 GPU 设备权限ls-l/dev/nvidia*再直接用 ollama 用户测试sudo-uollama nvidia-smi我这里的结果是ollama用户已经在video和render组里/dev/nvidia*设备权限正常sudo -u ollama nvidia-smi也能成功执行这说明不是 ollama 用户权限不够导致的。如果你这里失败了可以尝试一般按本文最后介绍的正常安装会自动加入无需额外执行sudousermod-aGvideo ollamasudousermod-aGrender ollamasudosystemctl restart ollama七、怀疑是不是装成了 CPU 版 Ollama因为日志里一直是 CPU backend我一度怀疑当前/usr/local/bin/ollama是不是 CPU-only 版本。先看二进制路径和版本whichollamals-l/usr/local/bin/ollama /usr/local/bin/ollama--version再看二进制里是否包含 CUDA 相关符号strings /usr/local/bin/ollama|grep-Eicuda|cublas|nvidia|head-n30结果里面确实有很多 CUDA 相关字符串比如CUDA_PATH CUDA_HOME GGML_CUDA_INIT cudaMalloc failed mlx_cuda_is_available说明这个二进制并不是纯 CPU 版。所以问题进一步缩小到Ollama 二进制带有 CUDA 支持但运行时没有成功把 CUDA backend 初始化起来。八、尝试重载 NVIDIA UVM 模块这一步很有价值很多时候 NVIDIA 驱动本身没坏但 UVM 状态有问题会导致上层程序探测不到 GPU。操作如下sudosystemctl stop ollamasudormmod nvidia_uvmsudomodprobe nvidia_uvmsudosystemctl start ollama然后再测试ollama run qwen3.5:4bhiollamaps这一步建议一定要记住。九、重装最新版官方 Ollama虽然我最初的 Ollama 也是官方安装的但为了排除旧版本或安装状态问题还是决定重新安装一遍最新版。1停止服务并备份旧二进制sudosystemctl stop ollamasudocp/usr/local/bin/ollama /usr/local/bin/ollama.bak2执行官方安装脚本curl-fsSLhttps://ollama.com/install.sh|sh安装过程里我看到了这些提示 Cleaning up old version at /usr/local/lib/ollama Installing ollama to /usr/local Downloading ollama-linux-amd64.tar.zst Adding ollama user to render group... Adding ollama user to video group... Adding current user to ollama group... Creating ollama systemd service... Enabling and starting ollama service... NVIDIA GPU installed.这说明安装脚本已经检测到本机有 NVIDIA GPU。十、重装完成后如何验证是否真的切到 GPU这是最关键的验证步骤。1看版本ollama--version2运行一个模型ollama run qwen3.5:4bhi3看当前 processorollamaps如果成功你应该能看到类似ollamapsNAME ID SIZE PROCESSOR CONTEXT UNTIL qwen3.5:4b 2a654d98e6fb6.3GB30%/70% CPU/GPU40964minutes from now至少不是100% CPU。4同时观察显卡状态watch-n1nvidia-smi如果成功跑到 GPU通常会看到Processes里出现 Ollama 相关进程显存使用量上升GPU-Util 有波动十一、这次排查的关键结论这次问题最后解决了模型已经切到 GPU。回头总结几个结论特别重要。1nvidia-smi正常不等于 Ollama 一定能用 GPU这只能说明系统驱动正常不能说明 Ollama 运行时已经成功启用 CUDA backend。2ollama ps是最直接的判断依据ollamaps这个命令非常实用100% CPU模型完全跑 CPU100% GPU模型完全跑 GPU部分 GPU说明只 offload 了一部分层3日志比猜测更重要查看日志journalctl-uollama-n200--no-pager如果看到offloaded 0/33 layers to GPU model weights deviceCPU kv cache deviceCPU就说明根本没上 GPU。4要区分“没识别到 GPU”和“显存不够”这两种情况很容易混淆。如果是显存不够一般前提是 Ollama 先识别到了 GPU然后只 offload 一部分层。如果是完全没识别到 GPU backend日志会更像我这次这样直接全走 CPU。5sudo -u ollama nvidia-smi很值得记因为 systemd 下 Ollama 不是以你当前用户运行而是以ollama用户运行所以这个命令能快速判断sudo-uollama nvidia-smi如果这个命令都不通那问题多半就是权限。十二、我这次实际用到的排查命令汇总建议直接收藏。GPU 基础检查nvidia-smiwatch-n1nvidia-smi nvidia-smi pmon-sum查看 Ollama 状态ollamapsollama--versionollama run qwen3.5:4bhi查看 systemd 服务配置systemctlcatollama systemctl status ollama查看 Ollama 日志journalctl-uollama --no-pager--followjournalctl-uollama-n200--no-pager journalctl-uollama-n200--no-pager|grep-Eicuda|nvidia|gpu|offload|memory查看服务用户权限idollamagroupsollamals-l/dev/nvidia*sudo-uollama nvidia-smi修复 GPU 模块状态sudosystemctl stop ollamasudormmod nvidia_uvmsudomodprobe nvidia_uvmsudosystemctl start ollama检查 Ollama 二进制whichollamals-l/usr/local/bin/ollama /usr/local/bin/ollama--versionstrings /usr/local/bin/ollama|grep-Eicuda|cublas|nvidia|head-n30重装官方 Ollamasudosystemctl stop ollamasudocp/usr/local/bin/ollama /usr/local/bin/ollama.bakcurl-fsSLhttps://ollama.com/install.sh|shsudosystemctl daemon-reloadsudosystemctl restart ollama十三、最终总结这次问题表面上看是“明明装了 NVIDIA 显卡为什么 Ollama 还是跑 CPU”实际上排查下来思路应该是先确认驱动是否正常再确认ollama服务用户有没有权限访问 GPU然后通过日志判断是“没识别到 GPU backend”还是“显存不够”必要时重载nvidia_uvm最后重装最新版官方 Ollama 排除安装状态问题最终我的机器已经成功切到了 GPU。十四、给后来人的建议如果你也遇到nvidia-smi正常ollama ps却是100% CPU不要上来就怀疑模型太大也不要只盯着显存容量。先查日志、查 systemd 用户、查 GPU 设备访问权限。很多时候真正的问题不是“GPU 不够”而是Ollama 根本没有成功启用 GPU backend。需要考虑是不是要重装一下软件反查之前的安装指令是一模一样的至于后来为什么不能用gpu了还是一个迷。这台linux上qwen3.5:4b的模型是从另一台mac拷贝过来的参见我另一篇博客曾经怀疑是不是架构不一样导致加载时回退在这次重新安装解决之后我又重新做了一次拷贝的操作是没有影响的。只能说有时候很难解析重启重装是一个保底的做法。