跳到主要内容

故障排除指南

有时 Ollama 可能无法按预期正常工作。找出问题所在的最佳方法之一就是查看日志文件。

查看日志文件

Mac 系统

Mac 上查看日志,请运行以下命令:

cat ~/.ollama/logs/server.log

Linux 系统

在使用 systemd 的 Linux 系统上,可以通过以下命令查看日志:

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

容器环境

当你在 容器 中运行 Ollama 时,日志会输出到容器的 stdout/stderr:

docker logs <容器名称>

(使用 docker ps 命令查找容器名称)

如果你是在终端中手动运行 ollama serve 命令,日志将直接显示在该终端中。

Windows 系统

Windows 上运行 Ollama 时,日志文件位于不同的位置。你可以按 <cmd>+R 键打开运行对话框,然后输入以下路径在资源管理器中查看:

  • explorer %LOCALAPPDATA%\Ollama 查看日志文件。最新的服务器日志位于 server.log 文件中,较旧的日志位于 server-#.log 文件中
  • explorer %LOCALAPPDATA%\Programs\Ollama 浏览可执行文件(安装程序会将此路径添加到用户 PATH 中)
  • explorer %HOMEPATH%\.ollama 浏览模型和配置文件的存储位置

启用调试日志

要启用额外的调试日志来帮助排除问题,请首先从系统托盘菜单退出正在运行的应用程序,然后在 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 库,可以使用:

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 Docker 问题

如果 Ollama 在 Docker 容器中最初可以正常使用 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.md 中的描述设置容器运行时。

有时 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 然后重试以获取更多诊断日志
  • 检查 dmesg 中的任何错误:sudo dmesg | grep -i nvrmsudo 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 amdgpusudo dmesg | grep -i kfd

多个 AMD GPU 问题

如果在 Linux 上当模型加载到多个 AMD GPU 时你遇到乱码响应,请参阅以下指南:

Windows 终端错误

已知较旧版本的 Windows 10(例如 21H1)存在一个错误,其中标准终端程序无法正确显示控制字符。这可能导致显示一长串类似 ←[?25h←[?25l 的字符串,有时会出现 参数不正确 的错误。要解决此问题,请更新到 Windows 10 22H1 或更新版本。

注意: 如果你遇到持续的问题,建议检查系统日志、更新驱动程序,并确保你的硬件配置与 Ollama 的要求兼容。

优云智算