方案:PVE8.1.x 安装 P40 vGPU 驱动并授权
术语说明
简单介绍后面内容中的几个术语:
vGPU
vGPU 技术通过将硬件 GPU 分割成多个虚拟 GPU 以支持多个虚拟机。每个虚拟 GPU 可以被分配给不同的虚拟机,从而使多个虚拟机拥有“独显”。
vGPU-unlock
从硬件上来看,同代的数据中心显卡和消费者显卡 GPU 架构是一样的,只是驱动层限制了支持的特性。通过修改型号与宿主驱动等方式,将消费级显卡伪装成具有相同核心型号的专业卡,使得普通消费者显卡也可以支持虚拟化;对于虚拟机,同时在 vGPU 启动前后进行 hook,绕过特定检查、汇报虚假结果等,使得虚拟机的 vGPU 能正常启动。目前支持的消费卡型号可以参考此文章的第三点。
vGPU 授权机制
在宿主机上,驱动无需授权。不过,只有企业级 GPU 能够被 vGPU 宿主机驱动所识别,消费级显卡无法合法地用于 vGPU 硬件。
在虚拟机上,使用 vGPU 客户端驱动需要获得 NVIDIA 授权。不同能力的 vGPU 子设备被分为 A、B、C、Q 四类,并对应不同的授权费用。未获得授权的驱动会逐渐降低 vGPU 子设备的性能,最终导致无法使用。可参考:关于 NVIDIA vGPU 软件许可。
在几种 vGPU 类型中,覆盖应用场景最广的是 Q 型 vGPU,授权为 vWS。
前情提要
关于 PVE 使用 GPU 有三种方法:
- 显卡直通
- 普通显卡 + vGPU-unlock
- 数据中心显卡 vGPU
Tesla P40 是数据中心卡,原生支持 vGPU 功能,所以本文不涉及 vGPU-unlock,如需了解可以参考 PolloLoco 的 NVIDIA vGPU Guide。
安装流程(需自行配置BIOS)
宿主机
主板 BIOS 配置(需自行配置)
需要在主板 BIOS 中开启开启 IOMMU / VT-d、Above 4G Decoding、SR-IOV,不同的主板选项所在位置可能不同,需要自行查找。
IOMMU 是一种地址映射技术,而 VT-d 是 Intel 对该技术的别称;Above 4G Decoding 关系到 PCI-E 设备 RAM 的 64 位寻址能力,通常用于需要让 CPU 访问全部显存的场景,使用 vGPU 时推荐开启;SR-IOV 允许一个 PCI-E 设备被多个虚拟机使用,常用于网卡等设备共享。
PVE 宿主机配置
配置软件源,安装必要的软件包,配置内核,配置引导
安装 NVIDIA Host 驱动
NVIDIA 官网的驱动是非公开的,你需要注册 NVIDIA 商业账户才可访问;当然你也可以去网上寻找驱动包,比如:APQA 网盘、GitHub 等
确认系统和驱动版本
版本信息:
root@pve :~# pveversion
pve-manager/8.1.4/ec 5 affc 9 e 41 f 1 d 79 (running kernel: 6.5.13-1-pve)
(已废弃方案:kernel 降级安装 16.0 的 vGPU 驱动)
内核版本和 vGPU 软件版本对应可参考 NVIDIA vGPU on Proxmox VE - Proxmox VE
pve-manager | kernel | vGPU Software Branch | NVIDIA Host drivers |
---|---|---|---|
7.2-7 | 5.15.39-2-pve | 14.1 | 510.73.06 |
7.2-7 | 5.15.39-2-pve | 14.2 | 510.85.03 |
7.4-3 | 5.15.107-2-pve | 15.2 | 525.105.14 |
7.4-17 | 6.2.16-20-bpo11-pve | 16.0 | 535.54.06 |
8.1.4 | 6.5.11-8-pve | 16.3 | 535.154.02 |
8.1.4 | 6.5.13-1-pve | 16.3 | 535.154.02 |
本文使用 535.154.02 ,16.3 版本的驱动
开始部署
配置环境
- 在开始下列步骤之前,需要在主板 BIOS 中开启开启 IOMMU / VT-d、Above 4 G Decoding、SR-IOV,不同的主板选项所在位置可能不同,需要自行查找,本文在此不作举例。
禁用企业源,添加国内源
- Web 后台 禁用企业源
1 | # 下载中科大的GPG KEY |
安装必要软件包
1 | apt update && apt install dkms git build-essential pve-kernel-5.15 pve-headers-5.15 dkms cargo jq uuid-runtime -y |
配置内核
1 | echo vfio >> /etc/modules |
配置引导
1 | #编辑grub,请不要盲目改。根据自己的环境,选择设置 |
验证环境配置
再次检查内核版本
1 | uname -r |
验证是否开启iommu
1 |
|
验证nouveau是否未启用
1 |
|
下载并安装vGPU 驱动
从 APQA 云盘下载驱动压缩包 下载链接
(包括宿主机-host 和虚拟机-guest 的驱动程序和文档等,十分贴心)下载压缩包解压后,将 Host_Drivers 文件夹中的 NVIDIA-Linux-x 86_64-535.154.02-vgpu-kvm. run上传到 pve,并执行安装
1 | #r如果安装了显卡驱动,先卸载 |
(示例安装图是旧版方案的,懒得替换了,流程是一致的)
以DKMSs方式安装驱动(选择 YES)
显示安装完成后,检查驱动
1 | nvidia-smi |
- 如正常显示,则安装成功可进行下一步。
直通设备给虚拟机
Win 10
获取物理 GPU 的 PCI 设备 bus/device/function (BDF):
- 获取 GPU 设备的 BDF
1 | lspci | grep NVIDIA |
此时看到的物理 GPU 设备如下:
04:00.0 3D controller: NVIDIA Corporation GP102GL [Tesla P40] (rev a1)
这里显示输出的04:00.0
就是 GPU 的 PCI 设备 BDF
扫描输出对应的 NVIDIA Virtual GPU 组合设备规格:
使用
mdevctl types
命令扫描mdev_suppo #Site01rted_types
目录获得 NVIDIA Virtual GPU (vGPU) 设备配置
1 | mdevctl types |
可以看到不同规格 vGPU 命名以及对应配置, 即为配置完成
1 | root@pve:~# mdevctl types |
- 每种规格末尾有一个 A/B/C/Q 标识类型
- vGPU 类型和用途关系
类型 | 建议用途 |
---|---|
A | 虚拟应用程序(Virtual Applications / vApps) |
B | 虚拟桌面(Virtual Desktops / vPC) |
C | AI/机器学习/训练( vCS or vWS ) |
Q | 虚拟工作站 (Virtual Workstations / vWS) |
给虚拟机分配 vGPU
登录 PVE Web 后台,在对应的 Windows 虚拟机下添加原始设备(对应设备 BDF)
按需配置显存大小,本例使用 Q 通用型 12G 显存
Windows 安装 GRID 驱动
- 为后续方便操作,建议提前在 PVE Web 后台使用 NoVNC 操作开启对应虚拟机 RDP
启动 Windows 虚拟机,将驱动包中的 Guest_Drivers 中的538.15_grid_win10_win11_server2019_server2022_dch_64bit_international.exe
上传到虚拟机,并安装(过程略,下一步就行)驱动安装时记得选择安装虚拟屏幕驱动,最高支持 7680 x 5120 的分辨率,(虽然串流只支持 4K
vGPU 授权
授权流程
授权方法分为如下几种方式:
- 向 NVIDIA 申请 90 天 free license(NVIDIA 中国只面向企业用户发放免费授权,个人可以尝试去海外官网申请),到期后购买 license
(注册后要和邮件说明注册理由,地址填 HongKong 给我安排纯英文商务邮件) - Rust-based vgpu_unlock,通过 vGPU 伪装,从而可以在虚拟机使用不需要授权的消费级显卡驱动,此方式是唯一支持消费级显卡的方式
- vGPU_LicenseBypass,此方式将不限制性能的时间从 20 分钟延长为一天,并且每天定时重启驱动,以达成一直不受限的目地,但不适合需要长时间运行 GPU 的场景
- FastAPI-DLS,此方式通过模拟正规流程的激活服务器,对虚拟机进行许可证授权,支持容器部署
对于原生支持 vGPU 的显卡而言,使用 FastAPI-DLS 为最优解,整套方案除授权服务器虚假外与正规流程无异。而且只要不更新虚拟机驱动,证书验证算法不变,理论具有等同于正规授权的稳定性。
搭建授权服务器
- 首先安装容器环境,此步略过。
- 启动容器,原项目需要自行创建证书,这里使用一个二次封装的免证书容器镜像。
- 本例中使用授权服务器 IP 10.0.0.6,仅作举例,记得替换成自己的
1
2
3# 此处的DLS_URL与DLS_PORT是后续生成授权文件,告知Guest如何访问授权容器IP地址和端口
# 需替换DLS_URL为授权服务器ip(可在本机docker环境搭建,替换为本机IP)
docker run -d -e DLS_URL=10.0.0.6 -e DLS_PORT=443 -p 443:443 makedie/fastapi-dls
获取授权
- 使用管理员身份启动 PowerShell 执行如下命令
1 | # <ls-hostname-or-ip>为你的授权服务IP端口 |
- 现在 vGPU 已经可以正常使用了,只要确保授权服务容器正常运行,grid 驱动就会自动续期
- DEBUG:如显示授权失败可尝试 # 来自民间的NVIDIA VGPU授权fastapi-dls 中最后的”应用授权“部分方法手动下载文件,然后重启
# pve 7/8 kvmqemu 反虚拟化检测(可选)
- 如要运行的程序不支持在虚拟机中运行,可参考这一步反虚拟化检测教程
- 参考文章:pve7 pve8 kvmqemu反虚拟化检测显卡直通玩游戏教程 (bilibili.com)
- 所使用的项目链接:
1.更为安全的方式:参照上文和项目对应 kvm 版本(或 PVE 版本),自行编译(在此不再赘述)
2.最简单快捷的方式:在 Q群中) 找到对应版本已经编译好的 deb 文件,直接安装
请务必确认版本,Web 端左上角 Virtual Environment 8.1.4 这个和 kvm 包比如 8.0.2-4 版本是不一样的哈
查看你目前使用的 kvm 版本:
1 | dpkg -l | grep kvm |
下载并上传到 pve ,
使用 dpkg 安装
1 | dpkg -i pve-qemu-kvm_Your_KVM_Version_amd64_anti_detection.deb |
在 Web 后台修改对应虚拟机 bios 为 ovmf,机型选 i440
然后在虚拟机配置文件中添加参数
虚拟机配置文件在 /etc/pve/qemu-server/xxx.conf ( xxx 为对应的虚拟机 ID )
使用 vim 打开,并添加:
1 | args: -cpu host,hypervisor=off,vmware-cpuid-freq=false,enforce=false,host-phys-bits=true, -smbios type=0,vendor="American Megatrends International LLC.",version=H3.7G,date='02/21/2023' -smbios type=1,manufacturer="Maxsun",product="MS-Terminator B760M",version="VER:H3.7G(2022/11/29)" -smbios type=2,manufacturer="Maxsun",product="MS-Terminator B760M",version="VER:H3.7G(2022/11/29)" -smbios type=17,manufacturer="KINGSTON",speed=3200,serial=DF1EC466,part=SED3200U1888S |
启动 Windows 虚拟机,如看到下图所示设备名,则配置完成
可顺带使用群内虚拟机检测软件进行测试
Linux (还没开始玩)
至此,完成部署
游戏串流
使用方案
Parsec
在(Parsec 注册账号,并两端下载客户端登录同一账号即可
【串流完全入门教程】 链接SunShine – Moonlight
【安卓使用 JoyCon 手柄串流 PC 】 链接
【Moonlight 多点触控】 链接
实测
需要每次开机后使用 RDP 连接,然后 vGPU 验证授权才会执行,之后就可以使用 Parsec 串流了(小问题)
串流时没间隔一段时间有卡顿(瞬时延迟高、编解码耗时长),未找到原因,怀疑是 SATA 固态读写问题,考虑换 NVME (nmon 查看磁盘读写占用在地图加载等场景中占用高)
我的 PVE (一堆虚拟机)上唯一一块 Intel 1.6T SATA 固态盘:
2024 年 3 月 28 日更新:已购入二手 Inte; P4610 1.6 T ,待部署,后面补充换盘后测试结果。
图穷匕见
其实,这一篇教你怎么PVE8.1.x 安装 P40 vGPU 驱动并授权,实现私人云游戏 玩原神的文章
欸嘿⭐~
参考文献
ProTechEx/vgpu-proxmox (github.com)
GreenDamTan/fastapi-dls (github.com)
zhaodice/proxmox-ve-anti-detection: A patch to hide PVE itself (github.com)
安装NVIDIA Virtual GPU Manager — Cloud Atlas beta 文档 (cloud-atlas.readthedocs.io)
第四章 配置vGPU — Proxmox VE Nvidia-vGPU doc 6.4 文档 (pve-doc-cn.readthedocs.io)
在Proxmox VE下开启vGPU - Tesla P4为例 - 雾时之森 (fairysen.com)
vGPU在Proxmox VE下的配置与使用 – 雪林荧光 (xinalin.com)
PVE+Tesla P4 vGPU All IN ONE NAS 折腾小记 | 梓喵出没 (azimiao.com)
佛西博客 - 基于Proxmox VE的VDI云桌面解决方案 (buduanwang.vip)
佛西博客 - Proxmox VE vGPU 教程汇总 (buduanwang.vip)