Skip to content

有時 Ollama 可能無法正常運作。釐清問題發生的最佳方式之一,就是查看日誌。在 Mac 上,可以透過執行以下指令找到日誌:

shell
cat ~/.ollama/logs/server.log

使用 systemd 的 Linux 系統,可以透過以下指令查詢日誌:

shell
journalctl -u ollama --no-pager --follow --pager-end

容器 中執行 Ollama 時,日誌會輸出到容器的 stdout/stderr:

shell
docker logs <container-name>

(使用 docker ps 查詢容器名稱)

如果在終端機手動執行 ollama serve,日誌會直接輸出到該終端機。

Windows 上執行 Ollama 時,日誌有多個儲存位置。你可以按下 <cmd>+R 開啟執行視窗,輸入以下內容來在檔案總管中查看:

  • explorer %LOCALAPPDATA%\Ollama:查看日誌。最新的伺服器日誌會存在 server.log 中,較舊的日誌則會存在 server-#.log
  • explorer %LOCALAPPDATA%\Programs\Ollama:瀏覽二進位檔案(安裝程式會將此路徑加入使用者 PATH)
  • explorer %HOMEPATH%\.ollama:瀏覽模型與設定檔的儲存位置
  • explorer %TEMP%:臨時可執行檔會儲存在一個或多個 ollama* 目錄中

要啟用額外的偵錯日誌來協助排查問題,請先從系統匣選單關閉正在執行的應用程式,接著在 PowerShell 終端機中執行:

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

如果需要協助解讀日誌,可以加入 Discord 社群。

LLM 函式庫

Ollama 內建多個針對不同 GPU 與 CPU 向量功能編譯的 LLM 函式庫。Ollama 會根據系統能力自動選擇最適合的函式庫。如果自動偵測出現問題,或是遇到其他問題(例如 GPU 當機),你可以強制指定使用特定的 LLM 函式庫來繞過問題。其中 cpu_avx2 效能最佳,其次是 cpu_avx,而速度最慢但相容性最高的是 cpu。MacOS 下的 Rosetta 模擬可以使用 cpu 函式庫。

在伺服器日誌中,你會看到類似以下的訊息(不同版本可能略有差異):

Dynamic LLM libraries [rocm_v6 cpu cpu_avx cpu_avx2 cuda_v11 rocm_v5]

實驗性 LLM 函式庫覆寫

你可以將 OLLAMA_LLM_LIBRARY 環境變數設定為任何可用的 LLM 函式庫來繞過自動偵測。例如,如果你有 CUDA 顯示卡,但想強制使用支援 AVX2 向量指令的 CPU LLM 函式庫,可以執行:

shell
OLLAMA_LLM_LIBRARY="cpu_avx2" ollama serve

你可以透過以下指令查看 CPU 支援的功能:

shell
cat /proc/cpuinfo| grep flags | head -1

在 Linux 上安裝舊版或預覽版本

如果你在 Linux 上遇到問題,想要安裝舊版本,或是想在正式發布前測試預覽版本,可以透過指定版本號碼讓安裝腳本安裝對應版本。

shell
curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.5.7 sh

Linux tmp 的 noexec 設定

如果你的系統在 Ollama 儲存臨時可執行檔的目錄上設定了「noexec」標誌,你可以將 OLLAMA_TMPDIR 環境變數設定為 Ollama 執行使用者有寫入權限的其他位置,例如 OLLAMA_TMPDIR=/usr/share/ollama/

Linux 上的 Docker

如果 Ollama 最初在 Docker 容器中可以使用 GPU,但一段時間後伺服器日誌出現 GPU 探索失敗的錯誤,並切換到 CPU 執行,可以透過停用 Docker 的 systemd cgroup 管理來解決這個問題。請編輯主機上的 /etc/docker/daemon.json 檔案,在 Docker 設定中加入 "exec-opts": ["native.cgroupdriver=cgroupfs"]

NVIDIA GPU 探索

Ollama 啟動時,會先盤點系統中的 GPU,以判斷相容性與可用 VRAM 容量。有時探索流程會無法偵測到 GPU,通常執行最新版的驅動程式能獲得最佳效果。

Linux 上的 NVIDIA 故障排查

如果你使用容器執行 Ollama,請先按照 docker 的說明完成容器執行階段的設定。

有時 Ollama 在初始化 GPU 時會遇到問題。查看伺服器日誌時,可能會看到多種錯誤碼,例如「3」(未初始化)、「46」(裝置無法使用)、「100」(無裝置)、「999」(未知)或其他錯誤。以下故障排查技巧可能有助於解決問題:

  • 如果你使用容器執行,請確認容器執行階段是否正常運作。嘗試執行 docker run --gpus all ubuntu nvidia-smi,如果執行失敗,代表 Ollama 也無法偵測到你的 NVIDIA GPU。
  • UVM 驅動程式是否已載入?執行 sudo nvidia-modprobe -u 確認
  • 嘗試重新載入 nvidia_uvm 驅動程式:先執行 sudo rmmod nvidia_uvm,再執行 sudo modprobe nvidia_uvm
  • 嘗試重新啟動系統
  • 確認你執行的是最新版的 NVIDIA 驅動程式

如果以上方法都無法解決問題,請收集額外資訊並提交問題回報:

  • 設定 CUDA_ERROR_LEVEL=50 後重新執行,以取得更多診斷日誌
  • 使用 sudo dmesg | grep -i nvrmsudo dmesg | grep -i nvidia 檢查 dmesg 中的錯誤訊息

AMD GPU 探索

在 Linux 上,要存取 AMD GPU,通常需要加入 video 與/或 render 群組才能存取 /dev/kfd 裝置。如果權限設定不正確,Ollama 會偵測到這個問題並在伺服器日誌中回報錯誤。

在容器中執行時,部分 Linux 發行版與容器執行階段可能會導致 Ollama 行程無法存取 GPU。你可以在主機系統上執行 ls -lnd /dev/kfd /dev/dri /dev/dri/* 來查詢系統中的數值型群組 ID,並將額外的 --group-add ... 參數傳遞給容器,讓容器能存取所需的裝置。例如在以下輸出 crw-rw---- 1 0 44 226, 0 Sep 16 16:55 /dev/dri/card0 中,群組 ID 欄位為 44

如果你遇到 Ollama 無法正確探索或使用 GPU 進行推論的問題,以下方法可能有助於定位故障原因:

  • AMD_LOG_LEVEL=3:在 AMD HIP/ROCm 函式庫中啟用資訊等級日誌,可以顯示更詳細的錯誤碼,協助排查問題
  • OLLAMA_DEBUG=1:在 GPU 探索過程中會回報額外資訊
  • 使用 sudo dmesg | grep -i amdgpusudo dmesg | grep -i kfd 檢查 amdgpu 或 kfd 驅動程式的錯誤訊息

AMD 驅動程式版本不符

如果你的 AMD GPU 在 Linux 上無法被偵測到,且伺服器日誌包含以下訊息:

msg="failure during GPU discovery" ... error="failed to finish discovery before timeout"
msg="bootstrap discovery took" duration=30s ...

這通常代表系統的 AMD GPU 驅動程式過舊。Ollama 內建 ROCm 7 Linux 函式庫,需要相容的 ROCm 7 核心驅動程式。如果系統執行的是較舊的驅動程式(ROCm 6.x 或更早版本),GPU 初始化會在裝置探索過程中卡住,最終超時,導致 Ollama 退回使用 CPU。

要解決這個問題,請使用 AMD ROCm 說明文件 中的 amdgpu-install 工具升級到 ROCm v7 驅動程式。升級完成後重新啟動系統,並重新啟動 Ollama。

多張 AMD GPU

如果你在 Linux 上使用多張 AMD GPU 載入模型時出現亂碼回應,請參考以下指南。

Windows 終端機錯誤

較舊版本的 Windows 10(例如 21H1)存在一個已知錯誤,會導致標準終端機程式無法正確顯示控制字元,進而顯示出類似 ←[?25h←[?25l 的長字串,有時還會出現 The parameter is incorrect 的錯誤。要解決這個問題,請更新到 Windows 10 22H1 或更新版本。