Ollama
在 Unraid 环境下通过 Docker 部署 Ollama 并利用 NVIDIA 显卡(如 RTX 3060)进行推理加速,核心在于打通宿主机到容器的硬件直通。
关键点
- 宿主机驱动准备:
- 必须先在 Unraid 应用市场安装 NVIDIA Driver 插件。
- 安装后进入
Settings -> Nvidia Driver确认驱动加载状态,并复制 RTX 3060 的 UUID 备用(也可直接使用all)。
- Docker 容器核心配置:
- 在模板配置的 Extra Parameters(高级视图) 中添加:
--runtime=nvidia以启用 NVIDIA 运行时。 - 新增 Environment Variables(环境变量):
NVIDIA_VISIBLE_DEVICES=all(或填入具体的 GPU UUID)NVIDIA_DRIVER_CAPABILITIES=all
- 在模板配置的 Extra Parameters(高级视图) 中添加:
- 数据持久化:
- 将宿主机路径(如
/mnt/user/appdata/ollama)映射到容器内的/root/.ollama,防止重启或更新后已下载的模型数据丢失。
- 将宿主机路径(如
附:等效的 Docker CLI 创建命令
如果不使用 Unraid 界面模板,也可直接通过命令行快速创建容器:
docker run -d \--name ollama \--runtime=nvidia \-e NVIDIA_VISIBLE_DEVICES=all \-e NVIDIA_DRIVER_CAPABILITIES=all \-v /mnt/user/appdata/ollama:/root/.ollama \-p 11434:11434 \--restart unless-stopped \ollama/ollama:latest
常用操作示例
容器启动后,可以直接通过 docker exec 自动拉取并进入模型交互(以 huihui_ai/qwen3.5-abliterated:9b 为例)。9B 的参数量对于 RTX 3060 的 12GB 显存来说运行效率相对平衡:
docker exec -it ollama ollama run huihui_ai/qwen3.5-abliterated:9b
适用边界与注意事项
- 与虚拟机直通的致命冲突(无法分时复用):在 Unraid 中,同一块物理显卡极难在 Docker 加速和虚拟机直通之间“交替(分时)使用”。
- 崩溃原理:哪怕您确保同一时间只启动了 Docker 或只启动了虚拟机,当关闭挂载显卡的虚拟机时,虚拟机会对显卡执行硬件重置(PCIe Reset)以释放资源。但消费级显卡(如 RTX 3060)普遍存在重置缺陷,此时若宿主机的 NVIDIA 驱动(插件)仍驻留底层,硬件重置往往会失败或状态异常,直接导致宿主机 PCIe 总线锁死,引发 Unraid 系统彻底无响应。
- 解决方案:显卡生态必须“二选一”:
- 虚拟机优先:在
System Devices中将显卡绑定到vfio-pci以便彻底隔离给直通使用,代价是 Docker 完全无法使用该显卡。 - Docker 优先:取消虚拟机所有的直通配置,显卡完全交由宿主机的 NVIDIA 插件支配。
- 极客折腾路线(脆弱且不推荐):社区中存在使用 User Scripts 在开启 VM 前强制停止所有 Docker 并
modprobe -r nvidia卸载驱动,VM 关机后再重新加载驱动的脚本方案。但这非常挑主板 IOMMU 分组,且容错率极低,稍有不慎依然会死机。
- 虚拟机优先:在
- 显存瓶颈(VRAM):RTX 3060 通常配备 12GB 显存(部分为 8GB)。当运行参数量较大的 LLM 时,若模型体积超出显存容量,Ollama 会自动将多余部分卸载到系统 RAM 并交由 CPU 计算,这会导致推理速度出现断崖式下跌。建议优先运行 7B~8B 级别的量化模型(如
llama3,qwen2等)。 - 验证加速状态:部署完成后,通过终端进入 Ollama 容器,执行
nvidia-smi确认能否正确读取显卡信息。运行模型时,也可通过watch -n 1 nvidia-smi观察 GPU 利用率和显存占用。
后续思路方向
- 交互界面接入:可以额外部署 Open WebUI 或 Lobe Chat,通过 API 连接该 Ollama 容器,获得更完善的图形化多轮对话体验。
- 自定义与量化模型:对于特定上下文需求,可自行通过 Modelfile 构建模型,或寻找高压缩比的 GGUF 格式模型来适配 12GB 显存上限。