在 Proxmox VE 上给 Tesla P100 开启 vGPU
2026-07-24
安装搭建
00

目录

在 Proxmox VE 上给 Tesla P100 开启 vGPU
0. 环境
版本依赖链
1. 恢复外网(盒子只是 DNS 坏了)
2. 降内核到 6.14(GRID 535 的要求)
3. 默认 6.14 启动 + IOMMU + 屏蔽 nouveau
4. 安装 NVIDIA GRID 驱动(535 分支)
5. 挂给虚拟机
6. 验证
7. 排错速查
小结
参考资料

在 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 ID 10de: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 范围)

层级上限说明
GPUTesla P100(Pascal, 0x15F8
vGPU 软件版本Release 16(R535 驱动分支)NVIDIA 官方 vGPU 支持列表 标注 Last Supported Branch = 16
GRID 驱动R535(如 535.309.01R595 已移除 Pascal 支持,R580 部分兼容;R535 完整支持且 P100 原生 14 个 profile
Linux 内核6.x(本文用 6.14)7.0 以上内核 GRID 535 DKMS 编译失败
PVE推荐 8.xPVE 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 持久化:

bash
cat > /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

bash
DEBIAN_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

重启后确认:

bash
uname -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/ 下。

bash
cd /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-83GRID P100-1Q1 GB16
nvidia-84GRID P100-2Q2 GB8
nvidia-85GRID P100-4Q4 GB4
nvidia-86GRID P100-8Q8 GB2
nvidia-87GRID P100-16Q16 GB1
nvidia-160GRID P100-2B2 GB8
nvidia-211GRID P100-2B42 GB8
nvidia-244GRID P100-1B41 GB16
nvidia-88GRID P100-1A1 GB16
nvidia-89GRID P100-2A2 GB8
nvidia-90GRID P100-4A4 GB4
nvidia-91GRID P100-8A8 GB2
nvidia-92GRID P100-16A16 GB1
nvidia-243GRID P100-1B1 GB16

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

手动验证(可选):

bash
UUID=$(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 # 验证完清理

mdevctl 1.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 types0000: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-* 类型,不需要任何解锁工具。

参考资料

ai协作,人工编辑

本文作者:张老板

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!