Ollama 本地部署避坑指南:你遇到的报错,这里都有解药
最近身边越来越多朋友开始折腾本地大模型,十有八九用的都是 Ollama。这东西确实好用,一行命令就能把模型跑起来。但好用归好用,部署过程中踩坑的概率也不小。
我自己折腾了一圈,也帮不少人排查过问题,发现报错来来回回就那么几类。今天把它们整理出来,你遇到了直接对号入座就行。
先说安装,别输在起跑线上
Ollama 的安装本身很简单。
Windows 用户去官网 https://ollama.com 下载安装包,双击就行。
macOS 用户同理,下载.dmg拖进 Applications。
Linux 用户一行命令:
curl -fsSL https://ollama.com/install.sh | sh
简单是简单,但装完不代表能跑。问题往往出在接下来这一步。
报错一:显存不够用(Out of Memory)
这大概是最高频的报错,没有之一。
你会看到类似这样的提示:
error loading model: CUDA out of memory
或者模型跑起来了,但生成几个字就崩掉。
为什么会这样?
大模型吃显存是大户。一个 7B 参数的模型,Q4 量化后大概需要 5-6GB 显存。13B 模型要 10GB 左右。70B 模型?40GB 起步。你的显卡显存不够,自然就炸了。
怎么解决?
几个思路,从简单到复杂:
1. 换个更小的模型
最直接的办法。你显卡只有 8GB 显存,就别硬上 70B 了。
# 这些模型对显存友好
ollama run qwen2.5:7b # 约 5GB 显存
ollama run llama3.2:3b # 约 2GB 显存
ollama run phi3:mini # 约 2GB 显存
2. 缩短上下文长度
上下文越长,显存吃得越多。如果你不需要处理超长文本,把上下文砍短能省不少。
# 启动时指定参数
ollama run qwen2.5:7b --num-ctx 2048
或者在 Modelfile 里设置:
PARAMETER num_ctx 2048
3. 限制同时加载的模型数量
Ollama 默认会把多个模型同时留在显存里。如果你只跑一个模型,可以限制一下:
设置环境变量OLLAMA_MAX_LOADED_MODELS=1。
Windows 用户在系统环境变量里添加,Linux/macOS 用户在启动前 export:
export OLLAMA_MAX_LOADED_MODELS=1
ollama serve
4. 实在不行,用 CPU 跑
显存不够可以退到内存。速度慢一些,但至少能跑。Ollama 会自动回退到 CPU,不需要你手动配置。只是响应速度会从每秒几十个 token 掉到几个 token,要有心理准备。
报错二:NVIDIA 驱动版本太低
模型跑不起来,一看日志发现 GPU 根本没被调用,全在 CPU 上硬扛。
报错信息可能是:
could not select GPU
NVIDIA GPU driver is too old
error during llm runner initialization: CUDA driver version is insufficient
原因很直白:Ollama 依赖 CUDA 来调用 NVIDIA 显卡,而 CUDA 需要足够新的驱动。驱动太老,CUDA 跑不起来,GPU 就用不上。
怎么解决?
1. 更新 NVIDIA 驱动
去 https://www.nvidia.com/Download/index 下载最新驱动。装完之后验证一下:
nvidia-smi
这个命令会显示你的驱动版本和 CUDA 版本。如果命令找不到或者报错,说明驱动没装好。
2. Docker 用户注意
如果你是在 Docker 里跑 Ollama,除了宿主机驱动要新,还得确保装了 NVIDIA Container Toolkit:
# 验证 Docker 能看到 GPU
docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi
如果这个命令报错,问题出在容器工具链,不是 Ollama。
3. 检查显卡是不是真的支持
不是所有 NVIDIA 显卡都能跑 CUDA。太老的卡(比如 GTX 900 系列以前的)可能力不从心。一般来说,GTX 10 系列及以上才比较靠谱。
报错三:权限不足(Permission Denied)
这个问题 Linux 用户遇到得比较多。
报错长这样:
permission denied while trying to connect to /dev/kfd
Permission denied: '/dev/dri/renderD128'
原因:你的用户没有访问 GPU 设备的权限。Linux 下 GPU 设备文件属于特定的用户组(通常是render或video),你的用户不在这个组里。
怎么解决?
# 把当前用户加入 render 组(Ubuntu/Debian)
sudo usermod -aG render $USER
# 有些发行版用 video 组
sudo usermod -aG video $USER
# 加完之后要重新登录才生效
如果是 Docker 里遇到这个问题:
# 启动容器时加上 --group-add
docker run --rm --gpus all --group-add render ollama/ollama
报错四:端口被占用
这个报错非常明确:
Error: listen tcp 127.0.0.1:11434: bind: address already in use
Ollama 默认用 11434 端口。如果这个端口已经被别的程序占了(或者你已经有一个 Ollama 在后台跑着),就会冲突。
怎么解决?
1. 杀掉占用端口的进程
Windows:
# 查看谁占了 11434 端口
netstat -ano | findstr 11434
# 用返回的 PID 杀掉进程
taskkill /PID <进程号> /F
Linux/macOS:
# 查看占用情况
lsof -i :11434
# 杀掉
kill -9 <PID>
2. 换个端口
设置环境变量:
export OLLAMA_HOST=0.0.0.0:8080
ollama serve
这样 Ollama 就跑在 8080 端口了。注意访问的时候也要改地址:http://localhost:8080。
3. 最常见的情况:后台已经有一个 Ollama 在跑了
Windows 用户尤其容易遇到。Ollama 装完会自动在后台启动服务,你又手动跑ollama serve,就撞了。
打开任务管理器,看看有没有ollama.exe在跑。有的话,不用管它,直接用ollama run就行,不需要再serve。
报错五:模型下载失败 / 网络超时
执行ollama pull或ollama run时:
error pulling model: connection timed out
或者进度条走到一半卡住不动。
原因:Ollama 的模型仓库在国外,国内访问经常不稳定。
怎么解决?
1. 设置代理
如果你有代理,给 Ollama 配上:
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
ollama pull qwen2.5:7b
Windows 用户在系统环境变量里添加同样的配置。
2. 换个网络环境
听起来很废话,但确实有用。有时候换个 WiFi、切个手机热点,反而能连上。
3. 手动下载模型文件
如果网络实在不行,可以在能下载的环境(比如公司、云服务器)先把模型文件下好,拷回来放到 Ollama 的模型目录里。
模型存放位置:
Windows:C:\Users\<你的用户名>\.ollama\models
macOS:~/.ollama/models
Linux:/usr/share/ollama/.ollama/models或~/.ollama/models
报错六:模型加载超时
error: model load timed out
llm runner timed out waiting for model to load
原因:模型文件太大,加载到显存/内存的时间超过了默认超时时间。
怎么解决?
设置环境变量延长超时时间:
export OLLAMA_LOAD_TIMEOUT=600
单位是秒,默认是 120 秒(2 分钟)。大模型可能需要 5-10 分钟才能加载完,设成 600(10 分钟)比较保险。
报错七:Linux 下 /tmp 目录权限问题
这个比较隐蔽:
fork/exec /tmp/ollama/...: permission denied
noexec 相关的报错
原因:有些 Linux 发行版(特别是服务器版本)的/tmp目录挂载时带了noexec参数,不允许执行里面的文件。Ollama 会把一些运行时文件解压到/tmp,如果执行不了就报错。
怎么解决?
1. 换个临时目录
export OLLAMA_TMPDIR=/home/你的用户名/tmp
mkdir -p $OLLAMA_TMPDIR
ollama serve
2. 或者修改 /tmp 挂载参数
sudo mount -o remount,exec /tmp
这个方法重启后会失效。要永久生效需要改/etc/fstab。
报错八:Windows 控制台乱码
在老版本 Windows 10 上,Ollama 的终端输出可能出现乱码,伴随这样的报错:
The parameter is incorrect
原因:旧版 Windows 的控制台不支持某些 ANSI 转义序列。
怎么解决?
升级到 Windows 10 22H1 或更高版本。如果暂时升不了,可以在 Windows Terminal 里运行 Ollama,它对 ANSI 的支持更好。
报错九:AMD 显卡相关的问题
Ollama 也支持 AMD 显卡(通过 ROCm),但坑比 NVIDIA 多不少。
常见问题:
could not select GPU
或者明明有 AMD 显卡,却回退到 CPU 模式。
怎么解决?
1. 确认 ROCm 版本兼容
AMD 显卡的 AI 计算依赖 ROCm 驱动。去 https://rocm.docs.amd.com 查看你的显卡是否在支持列表里。不是所有 AMD 卡都能跑。
2. Docker 用户确保设备映射正确
docker run --rm --device /dev/kfd --device /dev/dri --group-add render ollama/ollama
3. 多卡用户注意
多张 AMD 卡并行推理时,偶尔会出现输出乱码的问题。这是 ROCm 的已知问题,可以尝试限制只用一张卡:
export HIP_VISIBLE_DEVICES=0
几个有用的环境变量
最后整理一些常用的环境变量,排查问题时可能会用到:
| 环境变量 | 作用 | 示例 |
|---|---|---|
OLLAMA_DEBUG | 开启调试日志 | OLLAMA_DEBUG=1 |
OLLAMA_HOST | 设置监听地址和端口 | 0.0.0.0:8080 |
OLLAMA_MODELS | 自定义模型存储路径 | /data/ollama/models |
OLLAMA_MAX_LOADED_MODELS | 最多同时加载几个模型 | 1 |
OLLAMA_NUM_PARALLEL | 单模型并发请求数 | 4 |
OLLAMA_FLASH_ATTENTION | 开启 Flash Attention | 1 |
OLLAMA_LOAD_TIMEOUT | 模型加载超时(秒) | 600 |
OLLAMA_KEEP_ALIVE | 模型在内存中保持时间 | 10m |
CUDA_VISIBLE_DEVICES | 指定用哪张 GPU | 0 |
开启调试日志的方法:
# Linux/macOS
export OLLAMA_DEBUG=1
ollama serve
# Windows PowerShell
$env:OLLAMA_DEBUG="1"
ollama serve
调试日志会输出大量详细信息,包括 GPU 检测过程、模型加载细节、内存分配情况,排查问题时特别有用。
写在最后
Ollama 本身已经做得相当易用了,大部分情况下装完就能跑。但一旦涉及 GPU 驱动、显存管理、系统权限这些底层的东西,报错就来了。
遇到问题别慌,先看报错信息,再对照上面的列表。大多数情况下,答案就在那里;