用 Ollama 在 PVE 虚拟机里跑本地大模型:显卡直通与显存规划

用 Ollama 在 PVE 虚拟机里跑本地大模型:显卡直通与显存规划

内容标识:本文为 AI 辅助生成内容。依据 《人工智能生成合成内容标识办法》2025-09-01,已添加显式标识(本声明)与隐式标识(文件元数据 / 图片 ComfyUI 元信息)。文中技术细节与结论均由作者复核确认。

家里或机房里那台跑着 PVE(Proxmox VE)的服务器,往往还插着一块吃灰的显卡。与其再单独买一台 AI 主机,不如把这块卡直通给一台虚拟机,用 Ollama 跑本地大模型:数据不出内网、模型随换随用,还能和 NAS、监控等其它虚机共用同一台宿主机。本文按「宿主机直通 → 虚机驱动 → 显存规划 → 跑模验收」四步走完整个流程,并标出每个容易踩坑的版本细节。本站更多本地化部署实践见 cqiot.cc。

一、宿主机:开启 IOMMU 并把显卡绑给 vfio

第一步是让宿主机的内核把显卡「让出来」。编辑 GRUB 配置开启 IOMMU:

# Intel 平台
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# AMD 平台改为 amd_iommu=on iommu=pt

改完后刷新引导配置。注意 PVE 有两种引导方式,命令不同:

update-grub                 # 传统 GRUB 引导
proxmox-boot-tool refresh   # systemd-boot(EFI)引导用这个

接着加载 vfio 相关模块,把显卡的 PCI 地址绑定到 vfio-pci,并屏蔽宿主机自己的显卡驱动:

cat >> /etc/modules <<EOF
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
EOF

lspci -nn | grep -i vga     # 记下显卡地址与厂商:设备 ID,例如 01:00.0 [10de:1b80]
echo "options vfio-pci ids=10de:1b80,10de:10f0" > /etc/modprobe.d/vfio.conf
echo "blacklist nouveau"    > /etc/modprobe.d/blacklist-nouveau.conf
update-initramfs -u -k all
reboot

最后把设备挂给虚机(建议用 q35 机型 + host CPU):

qm set 100 --hostpci0 01:00,pcie=1

二、虚拟机内:驱动版本是最大的坑

直通成功后,虚机里的 lspci 就能看到显卡了。装驱动前先确认一件事:你的卡还受哪个驱动分支支持。NVIDIA 的 590/595 系列驱动已移除 Maxwell/Pascal/Volta 架构,这意味着 Tesla P4/P40/P100、GTX 10 系这类老卡必须锁定 R580 分支:

apt-get install -y nvidia-driver-580-server

装完重启后四项验证缺一不可:能看到 nvidia-smi 输出卡名和显存、lsmod | grep nouveau 为空、ls /dev/nvidia* 存在设备节点、且后续 apt upgrade 不会把驱动偷偷升到 590。最后一项建议用 apt pin 把 59x 系列包设为不可安装,这是老卡机器最容易被忽视、也最容易「过两个月突然挂掉」的隐患。

三、显存规划:先算账,再下模型

Ollama 加载的是量化模型,显存占用 ≈ 权重体积 + KV cache + 少量运行时开销。按 Q4 量化的经验值粗算:

模型规模 权重大约占用 8 GB 卡 16 GB 卡 24 GB 卡
7B~8B 4.5~5.5 GB 宽裕 宽裕 宽裕
13B~14B 8~9.5 GB 勉强/不够 宽裕 宽裕
32B 18~20 GB 不够 不够 可以

两个立竿见影的省显存/扩容技巧,通过 systemd 覆写配置:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_CONTEXT_LENGTH=8192"
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"

OLLAMA_KV_CACHE_TYPE=q8_0 实测能让同样显存下的可用上下文接近翻倍(例如在 8 GB 卡上把 8B 模型从 8192 上下文提到 16384,只多占约百 MB),是低显存卡上性价比最高的开关。

四、跑通并验收

curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen3:8b
ollama run qwen3:8b

验收看三点:ollama ps 的 PROCESSOR 列必须显示「100% GPU」而不是 CPU;推理时 nvidia-smi 能看到显存占用与算力利用率;用中英文各问一次,确认中文输出不乱码(如果中文输出异常,先怀疑终端编码,而不是模型坏了)。

总结

整条链路其实只有三个真正的风险点:宿主机的 IOMMU/vfio 绑定(改错引导配置会起不来)、虚机里的驱动分支选择(老卡装新分支直接黑屏)、以及显存规划(拍脑袋下模型会反复重下)。把这三处按本文的命令逐项核对、并按 VERIFY 标记替换成自己机器的实测值,一块吃灰的显卡就能变成全家可用的本地大模型服务。下一篇我们讲如何在这台虚机上给 Ollama 套一层 OpenAI 兼容网关,供多个应用共用。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注