有时 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-#.logexplorer %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 shLinux tmp noexec
如果您的系统在 Ollama 存储临时可执行文件的位置配置了 "noexec" 标志,可以通过设置 OLLAMA_TMPDIR 为用户(运行 ollama 的用户)可写的路径来指定备用位置。例如 OLLAMA_TMPDIR=/usr/share/ollama/
Linux docker
如果 Ollama 最初在 Docker 容器中的 GPU 上运行正常,但在一段时间后切换到 CPU 运行,并且服务器日志中报告 GPU 发现失败的错误,可以通过禁用 Docker 中的 systemd cgroup 管理来解决。编辑宿主机上的 /etc/docker/daemon.json 并将 "exec-opts": ["native.cgroupdriver=cgroupfs"] 添加到 Docker 配置中。
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 驱动
如果以上操作均无法解决问题,请收集额外信息并提交 Issue:
- 设置
CUDA_ERROR_LEVEL=50并重试以获取更多诊断日志 - 检查 dmesg 中的任何错误
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 发现过程中将报告额外信息- 检查 dmesg 中的 amdgpu 或 kfd 驱动错误
sudo dmesg | grep -i amdgpu和sudo dmesg | grep -i 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)存在一个 Bug,即标准终端程序无法正确显示控制字符。这可能导致显示长字符串如 ←[?25h←[?25l,有时还会报错 The parameter is incorrect。要解决此问题,请更新到 Win 10 22H1 或更高版本。