Proxmox VE + NVIDIA vGPU 虚拟化全流程部署
适用版本:vGPU 16.x / 17.x / 18.x / 19.x (通用)
适用显卡:Maxwell (9系), Pascal (10系), Turing (20系/16系)
目标人群:零基础小白 / Homelab 用户
⚠️ 核心免责与兼容性声明 (必读)
硬件白名单(不支持 30/40 系):
- ✅ 支持:GTX 9xx, GTX 10xx, RTX 20xx, GTX 16xx, Titan X/Xp/V。
- ❌ 不支持:RTX 30xx (Ampere) 和 RTX 40xx (Ada Lovelace) 消费级显卡。由于硬件物理限制,这些显卡无法通过此方法解锁 vGPU。
法律声明:修改驱动违反 NVIDIA EULA 协议。本教程仅供个人技术研究,严禁用于商业生产环境。
风险提示:操作涉及 PVE 内核修改,有系统崩溃风险,请务必提前备份 PVE 关键数据。
📦 第一阶段:资源准备 (Resource Preparation)
请在开始前准备好以下文件,后续需上传到 PVE 或虚拟机。
| 资源名称 | 文件名示例 | 说明 | 下载来源 |
|---|---|---|---|
| PVE 宿主机驱动 | ...vgpu-kvm.run |
必须带 kvm 字样 | Alist 镜像 (foxipan) |
| 虚拟机驱动 | ...grid.run / .exe |
版本号需与宿主机完全一致 | Alist 镜像 (foxipan) |
| 补丁文件 | xxx.xx.patch |
必须与驱动版本号完全一致 | GitLab Patches |
| 解锁工具 | vgpu_unlock-rs |
宿主机核心解锁 (Rust源码) | (无需下载,教程中通过命令拉取) |
| 激活工具 | nvlts 或 patcher |
虚拟机激活工具 | (教程中提供一键脚本/下载链接) |
🛠️ 第二阶段:PVE 宿主机 (Host) 部署
目标:破解 PVE 内核限制,使其能识别并切分消费级显卡。
1. 基础环境与依赖安装
登录 PVE 的 SSH(命令行),复制以下命令执行:
# 1. 更新软件源
apt update
# 2. 安装编译工具 (编译驱动和解锁器必备)
apt install -y git build-essential dkms pve-headers curl libelf-dev
# 3. 强制安装当前内核头文件 (★★★ 关键!缺此必报错 ★★★)
apt install -y pve-headers-$(uname -r)
# 4. 安装 Rust 环境 (因为 vgpu_unlock-rs 是 Rust 写的)
# 运行后出现选项时,直接按 1 回车
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
2. 彻底屏蔽原生驱动 (Nouveau)
# 写入黑名单,防止原生驱动占用显卡
echo "blacklist nouveau" >> /etc/modprobe.d/pve-blacklist.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/pve-blacklist.conf
# 更新引导并重启 (必须重启生效)
update-initramfs -u
reboot
3. 编译并部署解锁器 (vgpu_unlock-rs)
重启完成后,继续在 SSH 执行:
# 1. 下载解锁器源码
git clone https://github.com/mbilker/vgpu_unlock-rs.git
cd vgpu_unlock-rs
# 2. 编译 (Release 模式)
cargo build --release
# 3. 部署文件到系统
mkdir -p /etc/vgpu_unlock
cp target/release/libvgpu_unlock_rs.so /usr/lib/libvgpu_unlock_rs.so
touch /etc/vgpu_unlock/profile_override.toml
4. 配置显卡伪装 (Profile Override)
操作:编辑配置文件 nano /etc/vgpu_unlock/profile_override.toml。
内容:根据你的显卡架构,复制对应的配置填入。
-
Turing 架构 (如 RTX 2080 Ti, RTX 2070, GTX 1660)
[profile_override] devid = 0x1e30 # 伪装成 Quadro RTX 6000 ssvid = 0x10de -
Pascal 架构 (如 GTX 1080 Ti, GTX 1080)
[profile_override] devid = 0x1b38 # 伪装成 Tesla P40 ssvid = 0x10de
5. 设置服务自动注入 (Hooks)
此步骤确保 NVIDIA 服务启动时自动加载解锁代码。
# 直接复制以下整段代码执行:
for service in nvidia-vgpud nvidia-vgpu-mgr; do
mkdir -p /etc/systemd/system/${service}.service.d/
cat <<EOF > /etc/systemd/system/${service}.service.d/unlock.conf
[Service]
Environment=LD_PRELOAD=/usr/lib/libvgpu_unlock_rs.so
Restart=always
RestartSec=5
EOF
done
# 刷新服务
systemctl daemon-reload
6. 安装 Host 驱动 (手动 Patch)
将 Host 驱动 (.run) 和 补丁 (.patch) 上传到 PVE。
(请手动替换命令中的 <驱动文件名>)
# 1. 赋予权限
chmod +x <驱动文件名>.run
# 2. 应用补丁 (不要解压,直接运行此命令)
# 这一步会生成一个新的 -custom.run 文件
./<驱动文件名>.run --apply-patch ./<补丁文件名>.patch
# 3. 安装新生成的定制驱动
# -m=kernel: 仅安装内核模块,保护 PVE 界面
./<驱动文件名>-custom.run --dkms -m=kernel
# 4. 启动服务并设置开机自启
systemctl enable --now nvidia-vgpud nvidia-vgpu-mgr
7. 宿主机验证
执行命令:
mdevctl types
成功标志:终端输出大量 vGPU 类型列表(如 nvidia-256, rtx6000-4q 等)。
💻 第三阶段:虚拟机 (VM) 配置
在激活前,请先创建好虚拟机。
-
创建 VM 关键设置:
- BIOS:
OVMF (UEFI)(必须)。 - 机型:
q35。 - CPU:
host。 - 显卡: 添加 PCI 设备 -> 勾选 Raw Device -> 选择 MDev Type (显存大小)。
- (Windows 用户建议在 PCI 高级选项取消勾选 ROM-Bar)。
- BIOS:
-
安装 Guest 驱动:
- 启动虚拟机,安装下载好的 Guest 驱动 (
grid版本)。 - 安装后重启虚拟机。
- 此时显卡能用,但状态为 Unlicensed (未授权),性能受限。
- 启动虚拟机,安装下载好的 Guest 驱动 (
🔓 第四阶段:虚拟机激活 (二选一)
请根据您的喜好选择 方案 A (nvlts) 或 方案 B (FastAPI-DLS)。不可混用。
✅ 方案 A:nvlts 离线激活 (一键脚本版)
推荐理由:基于 Go 语言,全离线,无依赖,提供一键脚本,最为简单。
1. Linux 虚拟机 (一键脚本)
在虚拟机内以 root 身份执行官方提供的一键脚本。脚本会自动下载二进制文件、生成配置并重启服务。
# 执行官方一键安装脚本
# (如果无法连接 git.collinwebdesigns.de,请检查网络或使用代理)
bash <(curl -sSL "https://git.collinwebdesigns.de/vgpu/nvlts/-/raw/master/scripts/install.sh")
如果脚本执行成功,你会看到 Success 提示。等待几秒后执行 nvidia-smi -q 查看状态。
(备用方法:如果脚本下载失败,请手动下载 nvlts_linux_amd64,重命名为 nvlts,赋予 chmod +x 权限,然后运行 ./nvlts -g -r)
2. Windows 虚拟机 (一键命令)
- 下载工具:前往 GitLab Releases 下载
nvlts_windows_amd64.exe。 - 放置:将文件重命名为
nvlts.exe,放入C:\根目录(或者任意你喜欢的目录)。 - 执行:以 管理员身份 打开 PowerShell 或 CMD,运行:
C:\nvlts.exe -g -r参数说明:
-g生成授权文件,-r重启服务。 - 验证:等待服务重启后,输入
nvidia-smi -q。
🌐 方案 B:FastAPI-DLS 网络激活 (Docker版)
推荐理由:适合有多台虚拟机需要集中管理,或者已经有 Docker 环境的用户。
1. 部署服务端 (在 PVE 或任意 Docker 主机上)
# 1. 安装 Docker (如果已安装可跳过)
apt install -y docker.io docker-compose
# 2. 生成自签名证书并启动
mkdir -p /opt/fastapi-dls/cert && cd /opt/fastapi-dls
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout cert/webserver.key -out cert/webserver.crt -subj "/CN=fastapi-dls"
# 3. 启动容器
docker run -d --restart=always -p 443:443 \
-v /opt/fastapi-dls/cert:/app/cert \
collinwebdesigns/fastapi-dls:latest
记录服务器 IP,假设为 <DLS_IP>。
2. Linux 虚拟机客户端激活
需要下载 gridd-unlock-patcher 破解驱动签名,然后连接 DLS。
# 1. 下载 Patcher 工具
wget -O patcher https://git.collinwebdesigns.de/vgpu/gridd-unlock-patcher/-/releases/permalink/latest/downloads/gridd-unlock-patcher-x86_64-unknown-linux-gnu
chmod +x patcher
# 2. 注入服务器证书 (建立信任)
curl -k -L https://<DLS_IP>/-/config/root-certificate -o root.pem
sudo ./patcher -g $(which nvidia-gridd) -c root.pem
# 3. 下载 Token (获取授权)
mkdir -p /etc/nvidia/ClientConfigToken
curl -k -L https://<DLS_IP>/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token.tok
chmod 744 /etc/nvidia/ClientConfigToken/client_configuration_token.tok
# 4. 重启服务
systemctl restart nvidia-gridd
3. Windows 虚拟机客户端激活
Windows 无法直接运行 Patch 工具,流程稍繁琐:
- 提取文件:将 Windows 内
C:\Windows\System32\DriverStore\...\nvxdapix.dll复制到 Linux 环境(如 PVE)。
Get-ChildItem -Path "C:\Windows\System32\DriverStore\FileRepository" -Recurse -Filter "nvxdapix.dll" -ErrorAction SilentlyContinue | Select-Object -First 1命令获取nvxdapix.dll路径 - 执行破解:在 Linux 上运行
./patcher -g nvxdapix.dll -c root.pem。 - 替换回写:将破解后的 DLL 传回 Windows,在安全模式下替换原文件。
或使用脚本替换#1 下载脚本 curl https://git.collinwebdesigns.de/vgpu/gridd-unlock-patcher/-/raw/main/windows-replace-nvxdapix.ps1 -o "$HOME\Desktop\gridd-apply-patch.ps1" #2 复制破解后的nvxdapix.dll到桌面或者你自定义目录必须跟脚本同级 #3 执行回写替换 powershell.exe -executionpolicy bypass -file "$HOME\Desktop\gridd-apply-patch.ps1" - 下载 Token:下载
client_configuration_token.tok到C:\ProgramData\NVIDIA Corporation\Grid licensing\ClientConfigToken\。 - 执行下载tok
curl.exe --insecure -L -X GET https://dls.rws.im/-/client-token -o "C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken\dls.tok" - 重启:重启 Windows。
❓ 常见问题 (FAQ)
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
PVE mdevctl types 为空 |
显卡架构不支持 | 确认显卡不是 30系/40系。仅支持 9/10/20 系。 |
PVE mdevctl types 为空 |
钩子未生效 | 运行 systemctl status nvidia-vgpud 检查是否有报错。 |
| Windows 代码 43 | BIOS 设置 | 检查 PVE 虚拟机 PCI 设备的 ROM-Bar 是否已取消勾选。 |
| nvlts 脚本报错 | 网络问题 | 如果一键脚本无法下载,请使用浏览器下载 Release 文件后手动上传执行。 |
| License 状态: Unlicensed | 时间不同步 (DLS方案) | 虚拟机时间必须与 Docker 服务器时间完全一致。 |
| 驱动安装报错 | 内核头文件缺失 | 再次检查 apt install pve-headers-$(uname -r) 是否执行成功。 |