Ollama 只使用 CPU 不使用 GPU:分平台排查與恢復步驟

根據 Ollama 官方文件,使用 ollama ps、服務日誌、nvidia-smi、Docker GPU 驗證和 AMD 裝置權限逐層定位 CPU 回退,並給出恢復與驗收步驟。

本地跑大模型時,最讓人困惑的一類問題就是:機器明明有顯示卡,Ollama 卻還是主要吃 CPU,速度也慢得離譜。

先說結論,這類問題通常不是單一原因。最常見的幾類分別是:

  • Ollama 根本沒有識別到可用 GPU
  • 驅動、ROCmCUDA 環境沒裝對
  • Ollama 服務啟動時沒有繼承正確環境變數
  • 模型太大,實際已經退回到 CPUCPU/GPU 混合載入
  • AMD 平台存在額外相容性問題,比如 ROCm 版本、gfx 代號或裝置可見性設定不對

下面按最省時間的順序排查。 1. 先確認是不是“真的沒用 GPU”

最直接的方法是看:

1
ollama ps

重點看 PROCESSOR 欄:

  • 100% GPU:模型權重全部載入 GPU。
  • 100% CPU:權重完全位於系統記憶體。
  • 48%/52% CPU/GPU 一類結果:模型部分 offload 到 GPU,其餘留在系統記憶體。

這個百分比描述模型載入位置,不是瞬時 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 失敗”,排查方向就會立刻清晰很多。 分平台讀取真實日誌

Windows

先完全退出托盤中的 Ollama,再以除錯模式啟動:

1
2
$env:OLLAMA_DEBUG="1"
& "ollama app.exe"

安裝版日誌通常位於:

1
%LOCALAPPDATA%\Ollama\server.log

可以直接開啟目錄:

1
explorer $env:LOCALAPPDATA\Ollama

Linux systemd

1
2
sudo systemctl restart ollama
sudo journalctl -u ollama --since "10 minutes ago" --no-pager

NVIDIA 裝置發現失敗時,再檢查:

1
2
3
nvidia-smi
lsmod | grep nvidia_uvm
sudo dmesg | grep -iE 'nvrm|nvidia'

官方排錯文件列出的典型 CUDA 錯誤包括未初始化、裝置不可用、沒有裝置和未知錯誤。日誌出現這些資訊時,方向是驅動、UVM 模組或容器執行時,不是模型提示詞。 Docker

先證明容器執行時能夠看到 GPU:

1
docker run --rm --gpus all ubuntu nvidia-smi

這個命令失敗時,Ollama 容器也無法使用 NVIDIA GPU。先修復 NVIDIA Container Toolkit 或 Docker 配置,再重啟 Ollama 容器。 Linux AMD

檢查 Ollama 服務使用者能否訪問 /dev/kfd/dev/dri

1
2
ls -lnd /dev/kfd /dev/dri /dev/dri/*
id ollama

需要除錯 ROCm 發現過程時:

1
AMD_LOG_LEVEL=3 OLLAMA_DEBUG=1 ollama serve

如果日誌出現 GPU discovery 超時,同時系統仍使用 ROCm 6.x 或更早驅動,應按 Ollama 當前硬體文件升級到相容的 ROCm 7 驅動並重啟。不要用 HSA_OVERRIDE_GFX_VERSION 掩蓋明確的驅動版本錯誤。 修復後的驗收

修復後至少完成一次冷啟動驗證:

1
2
3
ollama stop <模型名>
ollama run <模型名> "只回复 READY"
ollama ps

同時觀察 nvidia-smirocm-smi 或系統 GPU 監視器。驗收結論按 ollama psPROCESSOR 列記錄:

  • 100% GPU:模型完整載入到 GPU;
  • 100% CPU:仍完全使用系統記憶體;
  • CPU/GPU:混合載入,通常需要繼續判斷是否因為顯存容量不足。

最後重新檢視服務日誌,確認沒有新的裝置發現失敗。僅看到 GPU 利用率瞬時升高,不足以證明模型始終在 GPU 上。 恢復與回滾

如果修改環境變數後 Ollama 無法啟動,先撤銷本輪新增變數並重啟服務。不要一次同時修改驅動、容器對映、ROCm 版本和 Ollama 配置,否則無法判斷哪個改動生效。

建議每輪只做一個改動,並儲存三項證據:修改前日誌、修改命令、修改後的 ollama ps。升級驅動前建立系統還原點或保留可回退的驅動安裝包。 排查順序

如果你只想記最短路徑,可以按這個順序來:

  1. ollama ps 看現在到底是 GPUCPU 還是混合載入
  2. 換一個更小的模型,排除顯存不夠
  3. nvidia-smirocminforocm-smi 先確認底層環境正常
  4. 完整重啟 Ollama 服務
  5. 檢查服務環境變數,尤其是 AMD 的 ROCR_VISIBLE_DEVICESHSA_OVERRIDE_GFX_VERSION
  6. 如果是 Docker / WSL,再檢查裝置映射

7. 最後看日誌定位具體報錯 官方資料