解決 Ollama 使用 CPU 而不使用 GPU 運算的問題

整理一套排查 Ollama 只跑 CPU、不走 GPU 的思路,重點涵蓋顯卡識別、ROCm 或 CUDA 環境、服務重啟、顯存不足,以及 AMD 平台常見的相容性問題。

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

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

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

下面按最省時間的順序排查。

1. 先確認是不是真的沒用到 GPU

最直接的方法是看:

1
ollama ps

重點看 PROCESSOR 這一欄。

  • 100% GPU:表示模型完整跑在顯卡上
  • 100% CPU:表示完全沒用上顯卡
  • 48%/52% CPU/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 初始化失敗」,排查方向就會立刻清楚很多。

排查順序

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

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

結語

Ollama 使用 CPU 而不使用 GPU,本質上通常是三類問題之一:

  • GPU 根本沒有被識別
  • GPU 能被識別,但執行環境沒有傳到 Ollama
  • GPU 在工作,但模型太大,最後還是回落到 CPU 或混合記憶體

先把這三類分開,排查就會快很多。
如果你是 AMD 平台,尤其要把注意力放在 ROCm 版本、裝置可見性和相容性變數上,而不是只看 Ollama 命令本身。

原影片:https://www.bilibili.com/video/BV1cHoYBqE8k/

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計