本地跑大模型時,最讓人困惑的一類問題就是:機器明明有顯示卡,Ollama 卻還是主要吃 CPU,速度也慢得離譜。
先說結論,這類問題通常不是單一原因。最常見的幾類分別是:
Ollama根本沒有識別到可用 GPU- 驅動、
ROCm或CUDA環境沒裝對 Ollama服務啟動時沒有繼承正確環境變數- 模型太大,實際已經退回到
CPU或CPU/GPU混合載入 - AMD 平台存在額外相容性問題,比如
ROCm版本、gfx代號或裝置可見性設定不對
下面按最省時間的順序排查。 1. 先確認是不是“真的沒用 GPU”
最直接的方法是看:
|
|
重點看 PROCESSOR 欄:
100% GPU:模型權重全部載入 GPU。100% CPU:權重完全位於系統記憶體。48%/52% CPU/GPU一類結果:模型部分 offload 到 GPU,其餘留在系統記憶體。
這個百分比描述模型載入位置,不是瞬時 GPU 使用率。生成間隙的使用率可能降低,但權重仍然駐留在顯存。
如果你看到的是 100% CPU,後面就該重點查環境和服務配置。
如果看到的是混合載入,那不一定是“顯示卡沒生效”,更可能是顯存不夠。 2. 先排除最常見的誤區:模型裝不進顯存
很多人以為只要裝了 GPU,Ollama 就一定會全顯示卡推理。實際上不是。
如果模型太大、上下文太長,或者機器上已經有別的模型佔著顯存,Ollama 很可能會退回到:
- 部分 GPU + 部分 CPU
- 直接
100% CPU
這時候可以先做兩個最簡單的驗證:
- 換一個更小的模型測試
比如先用
4B、7B這類小模型,而不是一上來就跑更大的參數量。 - 解除安裝其他已載入模型後再試
先看
ollama ps,確認沒有別的模型佔著顯存。
如果小模型能上 GPU,大模型不行,問題往往就不在驅動,而在顯存容量。 3. 檢查顯示卡驅動和底層環境是不是可用
如果連小模型都只能跑 CPU,下一步就該看底層環境。 NVIDIA 方向
先確認驅動正常,系統能看到顯示卡。常見檢查方式包括:
|
|
如果這裡都報錯,Ollama 基本不可能正常使用 GPU。 AMD / ROCm 方向
如果你是 AMD GPU,尤其是 ROCm 環境,重點先看:
|
|
如果這些工具都不能正常列出裝置,說明問題還在 Ollama 之前,先不要繼續折騰應用層。
對 AMD 來說,最常見的問題不是“有沒有裝驅動”,而是:
ROCm版本和系統版本不匹配- 當前 GPU 架構支援不完整
- 裝置雖然存在,但執行環境沒有正確暴露給 Ollama 4. 重啟 Ollama 服務,不要只重開終端
這是非常高頻的坑。
很多人裝完驅動、改完環境變數、補完 ROCm 之後,只是重新開了一個終端,然後直接繼續 ollama run。但如果 Ollama 是以後臺服務方式執行,它很可能還在用舊環境。
所以更穩的做法是:
- 完整重啟
Ollama服務 - 必要時直接重啟系統
如果你是在 Linux 上以服務方式執行,通常要確認服務程序已經重新拉起,而不是沿用之前的舊程序。 5. 檢查服務環境變數有沒有真正傳進去
這一步在 AMD ROCm 環境尤其重要。
有些機器在終端裡手動執行命令沒問題,但 Ollama 服務還是隻跑 CPU,原因是服務程序沒有拿到你在 shell 裡設定的變數。
常見需要關注的變數包括:
|
|
其中:
ROCR_VISIBLE_DEVICES用來限制或指定ROCm能看到哪些 GPUHSA_OVERRIDE_GFX_VERSION常見於某些 AMD 平台相容性處理
如果你只是在當前終端裡臨時 export 了變數,但 Ollama 是 systemd、桌面後臺服務或其他守護程序啟動的,這些變數未必會生效。
也就是說,終端裡“看起來已經設定好了”,不代表 Ollama 真的拿到了。 6. AMD 平台重點看 ROCm 相容性
從公開頁面資訊看,這個問題對應的影片主題本身就落在 AMD Max+ 395、strix halo、AMD ROCm 這條線上。
這類環境裡,Ollama 不走 GPU,往往比 NVIDIA 平臺更依賴版本匹配。
可以優先排查下面幾項:
ROCm版本是否適合當前系統和當前顯示卡- 當前 GPU 是否屬於
ROCm支援較好的架構範圍 - 是否需要補
HSA_OVERRIDE_GFX_VERSION - 是否是舊版
Ollama或舊版底層推理庫導致相容問題
如果你已經確認 rocminfo 正常、GPU 也能被系統識別,但 Ollama 仍然只跑 CPU,那大機率要回到版本組合上重新檢查,而不是繼續盲目調模型參數。 7. Docker、WSL 或遠端環境要額外檢查裝置映射
如果你不是直接在裸機跑,而是在下面這些環境裡執行:
- Docker
- WSL
- 遠端容器
- 虛擬化環境
那還要多看一層:GPU 裝置有沒有真正暴露進去。
典型現象是:
- 宿主機能看到 GPU
- 容器裡
Ollama卻只能跑CPU
這時要先確認不是 Ollama 本身的問題,而是容器或子系統根本沒拿到 GPU 訪問權限。 8. 最後再看日誌,而不是一開始就瞎猜
如果前面都查過了,最有效的做法不是繼續反覆重灌,而是直接看 Ollama 啟動日誌和執行日誌。
重點看兩類資訊:
- 有沒有識別到 GPU
- 有沒有出現驅動、庫載入、裝置初始化失敗之類的報錯
只要日誌裡明確出現類似“未找到相容 GPU”或“初始化 ROCm/CUDA 失敗”,排查方向就會立刻清晰很多。 分平台讀取真實日誌
Windows
先完全退出托盤中的 Ollama,再以除錯模式啟動:
|
|
安裝版日誌通常位於:
|
|
可以直接開啟目錄:
|
|
Linux systemd
|
|
NVIDIA 裝置發現失敗時,再檢查:
|
|
官方排錯文件列出的典型 CUDA 錯誤包括未初始化、裝置不可用、沒有裝置和未知錯誤。日誌出現這些資訊時,方向是驅動、UVM 模組或容器執行時,不是模型提示詞。 Docker
先證明容器執行時能夠看到 GPU:
|
|
這個命令失敗時,Ollama 容器也無法使用 NVIDIA GPU。先修復 NVIDIA Container Toolkit 或 Docker 配置,再重啟 Ollama 容器。 Linux AMD
檢查 Ollama 服務使用者能否訪問 /dev/kfd 和 /dev/dri:
|
|
需要除錯 ROCm 發現過程時:
|
|
如果日誌出現 GPU discovery 超時,同時系統仍使用 ROCm 6.x 或更早驅動,應按 Ollama 當前硬體文件升級到相容的 ROCm 7 驅動並重啟。不要用 HSA_OVERRIDE_GFX_VERSION 掩蓋明確的驅動版本錯誤。 修復後的驗收
修復後至少完成一次冷啟動驗證:
|
|
同時觀察 nvidia-smi、rocm-smi 或系統 GPU 監視器。驗收結論按 ollama ps 的 PROCESSOR 列記錄:
100% GPU:模型完整載入到 GPU;100% CPU:仍完全使用系統記憶體;CPU/GPU:混合載入,通常需要繼續判斷是否因為顯存容量不足。
最後重新檢視服務日誌,確認沒有新的裝置發現失敗。僅看到 GPU 利用率瞬時升高,不足以證明模型始終在 GPU 上。 恢復與回滾
如果修改環境變數後 Ollama 無法啟動,先撤銷本輪新增變數並重啟服務。不要一次同時修改驅動、容器對映、ROCm 版本和 Ollama 配置,否則無法判斷哪個改動生效。
建議每輪只做一個改動,並儲存三項證據:修改前日誌、修改命令、修改後的 ollama ps。升級驅動前建立系統還原點或保留可回退的驅動安裝包。 排查順序
如果你只想記最短路徑,可以按這個順序來:
ollama ps看現在到底是GPU、CPU還是混合載入- 換一個更小的模型,排除顯存不夠
- 用
nvidia-smi、rocminfo、rocm-smi先確認底層環境正常 - 完整重啟
Ollama服務 - 檢查服務環境變數,尤其是 AMD 的
ROCR_VISIBLE_DEVICES、HSA_OVERRIDE_GFX_VERSION - 如果是 Docker / WSL,再檢查裝置映射