Ollama 有时可能无法按预期运行。了解原因的最佳方式之一,是查看日志。
在 Mac 上运行:
cat ~/.ollama/logs/server.log
在使用 systemd 的 Linux 系统上运行:
journalctl -u ollama --no-pager --follow --pager-end
在容器中运行时,日志输出到容器的 stdout/stderr:
docker logs <container-name>
使用 docker ps 查找容器名称。如果手动在终端运行 ollama serve,日志就显示在该终端。
Windows 上有几个不同位置。打开运行对话框,然后输入以下命令,用资源管理器查看:
explorer %LOCALAPPDATA%\Ollama:日志位置。最新服务器日志为server.log,旧日志为server-#.log。explorer %LOCALAPPDATA%\Programs\Ollama:二进制文件位置,安装器会将其加入用户 PATH。explorer %HOMEPATH%\.ollama:模型和配置保存位置。explorer %TEMP%:临时可执行文件位于一个或多个ollama*目录中。
需要额外调试日志时,先从托盘菜单退出正在运行的应用,再在 PowerShell 中运行:
$env:OLLAMA_DEBUG="1"
& "ollama app.exe"
可以加入 Ollama 的 Discord 社区,寻求解读日志的帮助。
LLM 库
Ollama 包含多个针对不同 GPU 和 CPU 向量特性编译的 LLM 库,并尝试根据系统能力选择最适合的一个。如果自动检测失败,或者 GPU 崩溃等问题出现,可以强制使用特定库。
CPU 库中,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 设为任何可用库,以绕过自动检测。例如,虽然有 CUDA 显卡,但希望强制使用支持 AVX2 的 CPU 库:
OLLAMA_LLM_LIBRARY="cpu_avx2" ollama serve
查看 CPU 特性:
cat /proc/cpuinfo| grep flags | head -1
在 Linux 安装旧版或预发布版本
如果在 Linux 遇到问题,希望安装旧版,或者尝试正式发布前的预发布版,可以向安装脚本指定版本:
curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.5.7 sh
Linux 临时目录的 noexec 设置
如果 Ollama 存放临时可执行文件的位置设置了 noexec,可以通过 OLLAMA_TMPDIR 指定其他目录。该目录必须允许运行 Ollama 的用户写入,例如 OLLAMA_TMPDIR=/usr/share/ollama/。
Linux Docker
如果容器中的 Ollama 起初使用 GPU,运行一段时间后却切换为 CPU,而且日志显示 GPU 发现失败,可以在 Docker 中禁用 systemd cgroup 管理。编辑主机的 /etc/docker/daemon.json,向 Docker 配置加入 "exec-opts": ["native.cgroupdriver=cgroupfs"]。
NVIDIA GPU 发现
Ollama 启动时会枚举系统 GPU,判断兼容性与可用显存。有时发现过程无法找到 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 nvrm与sudo dmesg | grep -i nvidia。
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 发现过程中输出额外信息。- 检查 amdgpu 或 kfd 驱动错误:
sudo dmesg | grep -i amdgpu和sudo dmesg | grep -i kfd。
AMD 驱动版本不匹配
如果 Linux 上检测不到 AMD GPU,且服务器日志出现:
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 后输出乱码,参阅 AMD 多 GPU 已知问题与限制。
Windows 终端错误
某些旧版 Windows 10,例如 21H1,存在标准终端无法正确显示控制字符的问题。这可能导致屏幕出现大量 ←[?25h←[?25l 字符串,有时还会报 The parameter is incorrect。原文建议更新到 Windows 10 22H1 或更新版本以解决此问题。
原文:Ollama:Troubleshooting。作者/维护方:Ollama 文档维护者。本文为中文翻译,代码及命令保留原文。











暂无评论内容