目录
在 Proxmox VE 上给 Tesla P100 开启 vGPU
建议环境:PVE 8.x(出厂内核在 6.x 范围,GRID R535 DKMS 直接编译通过)。本文在 PVE 9.2.2 上操作,多了一步降内核,其余流程完全一致。
经验分享:在刚装好的 PVE 9.2.2 上,给一张 Tesla P100(Pascal 架构)开启 vGPU 的完整做法。P100 在 NVIDIA vGPU 官方支持列表中(见 vgpu-evaluation),使用 R535 分支的 GRID 驱动即可原生支持 vGPU,不需要任何解锁工具。装好驱动后直接暴露 14 个
GRID P100-*vGPU 类型。本文每一步都在这台机器上实际跑过。
0. 环境
- PVE:
pve-manager/9.2.2,内核6.14.11-4-pve(PVE 9 出厂是 7.0 内核,GRID 535 需要降到 6.14 才能正常编译 DKMS 模块) - 显卡:
01:00.0 NVIDIA Corporation GP100GL [Tesla P100 PCIe 16GB](PCI ID10de:15f8,Pascal 架构) - 宿主机:AMD 平台 → IOMMU 参数用
amd_iommu=on - 启动方式:EFI,引导器是 GRUB(
/EFI/proxmox/grubx64.efi),内核参数改/etc/default/grub - 机器默认没有外网(仅 DNS 解析失败),把 DNS 指到公共 DNS 即恢复
- vGPU 必须用 NVIDIA GRID 驱动(企业门户登录才能下载,nvid.nvidia.com),公版 Tesla 驱动没有 vGPU 管理器
版本依赖链
P100 的 vGPU 支持有明确上限,向下传导形成了版本约束:
P100 → vGPU Release 16(R535 分支,Last Supported Branch)→ Linux 内核 6.x(7.0 以上 DKMS 编不过)→ PVE 8.x(出厂内核在 6.x 范围)
| 层级 | 上限 | 说明 |
|---|---|---|
| GPU | Tesla P100(Pascal, 0x15F8) | — |
| vGPU 软件版本 | Release 16(R535 驱动分支) | NVIDIA 官方 vGPU 支持列表 标注 Last Supported Branch = 16 |
| GRID 驱动 | R535(如 535.309.01) | R595 已移除 Pascal 支持,R580 部分兼容;R535 完整支持且 P100 原生 14 个 profile |
| Linux 内核 | 6.x(本文用 6.14) | 7.0 以上内核 GRID 535 DKMS 编译失败 |
| PVE | 推荐 8.x | PVE 8 出厂内核在 6.x 范围;PVE 9 出厂 7.0 需要手动降内核 |
如果从零搭建,直接装 PVE 8.x + R535 GRID 驱动 是最省事的组合——内核不用动、驱动直接装。本文盒子装的是 PVE 9,所以多了一步降内核(第 2 节),其余流程完全一致。
1. 恢复外网(盒子只是 DNS 坏了)
bash# 临时把 DNS 指向公共 DNS(立刻生效)
cp /etc/resolv.conf /etc/resolv.conf.bak
printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" > /etc/resolv.conf
# 验证 DNS 恢复
getent hosts google.com && echo DNS_OK
curl -s -o /dev/null -w "nvidia=%{http_code}\n" https://www.nvidia.com
curl -s -o /dev/null -w "ustc=%{http_code}\n" https://mirrors.ustc.edu.cn
download.proxmox.com 在本机网络里不可达,apt 源换到中科大镜像,并让 DNS 持久化:
bashcat > /etc/apt/sources.list.d/debian.sources <<'EOF'
Types: deb
URIs: https://mirrors.ustc.edu.cn/debian
Suites: trixie trixie-updates
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: https://mirrors.ustc.edu.cn/debian-security
Suites: trixie-security
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
cat > /etc/apt/sources.list.d/pve-no-subscription.sources <<'EOF'
Types: deb
URIs: https://mirrors.ustc.edu.cn/proxmox/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
# 关掉企业源
mv -f /etc/apt/sources.list.d/pve-enterprise.sources /etc/apt/sources.list.d/pve-enterprise.sources.disabled
mv -f /etc/apt/sources.list.d/ceph.sources /etc/apt/sources.list.d/ceph.sources.disabled
# DNS 持久化
grep -q "dns-nameservers" /etc/network/interfaces || \
sed -i "/iface vmbr0 inet static/a\\ dns-nameservers 8.8.8.8 1.1.1.1" /etc/network/interfaces
apt-get update
2. 降内核到 6.14(GRID 535 的要求)
PVE 9 出厂内核是 7.0,GRID 535 的 DKMS 模块在 7.0 上编不过。降到社区验证可用的 6.14.11-4-pve:
bashDEBIAN_FRONTEND=noninteractive apt-get install -y \ proxmox-kernel-6.14.11-4-pve proxmox-headers-6.14.11-4-pve \ build-essential dkms mdevctl
3. 默认 6.14 启动 + IOMMU + 屏蔽 nouveau
bash# 屏蔽 nouveau
echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf
# 内核参数(AMD 主机)
cp /etc/default/grub /etc/default/grub.bak
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt modprobe.blacklist=nouveau"/' /etc/default/grub
# 默认启动 6.14
sed -i 's|^GRUB_DEFAULT=.*|GRUB_DEFAULT="Advanced options for Proxmox VE GNU/Linux>Proxmox VE GNU/Linux, with Linux 6.14.11-4-pve"|' /etc/default/grub
update-grub
update-initramfs -u -k all
reboot
重启后确认:
bashuname -a # 6.14.11-4-pve
cat /proc/cmdline # 含 amd_iommu=on 和 modprobe.blacklist=nouveau
lsmod | grep nouveau || echo "nouveau 未加载(OK)"
dmesg | grep -i iommu | head # IOMMU 已启用
4. 安装 NVIDIA GRID 驱动(535 分支)
从 NVIDIA 企业门户 下载 R535 分支的 vGPU KVM 驱动(如 NVIDIA-Linux-x86_64-535.309.01-vgpu-kvm.run)。R595 已砍掉 Pascal 支持,P100 只能用 R535 或 R580。 把 .run 放到 /root/ 下。
bashcd /root
chmod +x NVIDIA-Linux-x86_64-535.309.01-vgpu-kvm.run
./NVIDIA-Linux-x86_64-535.309.01-vgpu-kvm.run --silent --dkms --accept-license
# --silent 无交互
# --dkms 模块随内核更新自动重编
# --accept-license 接受协议(silent 模式必须带)
# 退出码 0 即成功
# 启动两个 daemon
# nvidia-vgpud:oneshot,把 vGPU profile 注册到内核 mdev 类型
# nvidia-vgpu-mgr:长驻,管 vGPU 实例生命周期
systemctl enable --now nvidia-vgpud nvidia-vgpu-mgr
# 验证
nvidia-smi # 应看到 Tesla P100-PCIE-16GB / 535.309.01
mdevctl types # 0000:01:00.0 下出现 GRID P100-* 类型
P100 有 16GB 显存,暴露的 vGPU 类型(14 个):
| nvidia 编号 | Profile | 显存 | 最大实例数 |
|---|---|---|---|
| nvidia-83 | GRID P100-1Q | 1 GB | 16 |
| nvidia-84 | GRID P100-2Q | 2 GB | 8 |
| nvidia-85 | GRID P100-4Q | 4 GB | 4 |
| nvidia-86 | GRID P100-8Q | 8 GB | 2 |
| nvidia-87 | GRID P100-16Q | 16 GB | 1 |
| nvidia-160 | GRID P100-2B | 2 GB | 8 |
| nvidia-211 | GRID P100-2B4 | 2 GB | 8 |
| nvidia-244 | GRID P100-1B4 | 1 GB | 16 |
| nvidia-88 | GRID P100-1A | 1 GB | 16 |
| nvidia-89 | GRID P100-2A | 2 GB | 8 |
| nvidia-90 | GRID P100-4A | 4 GB | 4 |
| nvidia-91 | GRID P100-8A | 8 GB | 2 |
| nvidia-92 | GRID P100-16A | 16 GB | 1 |
| nvidia-243 | GRID P100-1B | 1 GB | 16 |
Q 系列(Quadro)适合图形工作站;A 系列(vApps)适合应用虚拟化;B 系列(vPC)适合普通桌面。本机 VM 9000 用的是 nvidia-86(P100-8Q, 8 GB)——留一半显存给宿主机或其他 VM。
5. 挂给虚拟机
PVE 用 mdev 方式最省事。qm set 指定 mdev 类型,启停 VM 时 PVE 自动创建/回收实例:
bash# VMID 9000 已创建(详见 windows-vm-anti-detection.md),直接挂 vGPU
qm set 9000 -hostpci0 0000:01:00.0,mdev=nvidia-86
手动验证(可选):
bashUUID=$(cat /proc/sys/kernel/random/uuid) mdevctl define -u $UUID -p 0000:01:00.0 -t nvidia-86 && mdevctl start -u $UUID mdevctl list mdevctl stop -u $UUID; mdevctl undefine -u $UUID # 验证完清理
mdevctl1.4.0 语法是define/start/undefine,没有老版本的create子命令。UUID 用cat /proc/sys/kernel/random/uuid(盒子无 uuidgen)。
6. 验证
- 宿主机:
nvidia-smi能看到 P100;mdevctl list能看到已创建的 vGPU 实例 - Guest(Windows):设备管理器出现 NVIDIA 显卡,装 535 分支 GRID 客户驱动后
nvidia-smi看到 Tesla P100,无需伪装
7. 排错速查
| 现象 | 原因 | 处理 |
|---|---|---|
apt-get update 报 "Temporary failure resolving" | DNS 未修复 | 回到第 1 步确认 /etc/resolv.conf 和 /etc/network/interfaces |
nvidia-smi 报 "couldn't communicate with driver" | 内核不匹配或 nouveau 未屏蔽 | 确认当前是 6.14 且 nouveau 未加载,重跑安装 |
装完 mdevctl types 在 0000:01:00.0 下没有 nvidia 类型 | 两个 daemon 没都起,或内核模块残留 | 确认 systemctl is-active nvidia-vgpud nvidia-vgpu-mgr,两个 daemon 都正常运行即可 |
切换驱动后 mdevctl types 仍空 + dmesg vGPU type info already present | 内核模块残留上轮注册表 | systemctl stop nvidia-vgpu-mgr nvidia-vgpud; modprobe -r nvidia_vgpu_vfio nvidia_uvm nvidia_drm nvidia_modeset nvidia; sleep 2; modprobe nvidia; modprobe nvidia_vgpu_vfio; systemctl restart nvidia-vgpud nvidia-vgpu-mgr |
启动 VM 报 vfio 警告(Could not enable error recovery / BAR 1: dma-buf) | 无害 | vGPU 设备正常工作,忽略 |
| Guest 显卡报错 43 | 驱动大版本不匹配 | 宿主机和 guest 都用 535 分支 GRID 驱动;guest 设备管理器应看到 Tesla P100 |
| 选了 24Q/16Q 等大 profile 但创建失败 | 显存、实例数超限 | P100 有 16G,单实例不能超过 16G;参考第 4 节表格选型 |
小结
Tesla P100 在 PVE 9 上开 vGPU 只需要三件事:降内核到 6.14 + 装 R535 GRID 驱动 + 起两个 daemon。P100 在 535 下原生支持 vGPU,直接装驱动即可暴露 14 个 GRID P100-* 类型,不需要任何解锁工具。
参考资料
- NVIDIA vGPU 评估页面 — P100 在官方 vGPU 支持列表中
- NVIDIA 企业门户 — GRID vGPU-kvm 驱动下载(需企业账号)
- pve-anti-detection-main — Windows 虚拟机反检测(同一台机器的配套教程
windows-vm-anti-detection.md)
ai协作,人工编辑