Proxmox VE + NVIDIA vGPU 虚拟化全流程部署

1,159次阅读
没有评论

Proxmox VE + NVIDIA vGPU 虚拟化全流程部署

适用版本:vGPU 16.x / 17.x / 18.x / 19.x (通用)
适用显卡:Maxwell (9系), Pascal (10系), Turing (20系/16系)
目标人群:零基础小白 / Homelab 用户

⚠️ 核心免责与兼容性声明 (必读)

  1. 硬件白名单(不支持 30/40 系)

    • 支持:GTX 9xx, GTX 10xx, RTX 20xx, GTX 16xx, Titan X/Xp/V。
    • 不支持RTX 30xx (Ampere)RTX 40xx (Ada Lovelace) 消费级显卡。由于硬件物理限制,这些显卡无法通过此方法解锁 vGPU。
  2. 法律声明:修改驱动违反 NVIDIA EULA 协议。本教程仅供个人技术研究,严禁用于商业生产环境

  3. 风险提示:操作涉及 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源码) (无需下载,教程中通过命令拉取)
激活工具 nvltspatcher 虚拟机激活工具 (教程中提供一键脚本/下载链接)

🛠️ 第二阶段: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) 配置

在激活前,请先创建好虚拟机。

  1. 创建 VM 关键设置

    • BIOS: OVMF (UEFI) (必须)。
    • 机型: q35
    • CPU: host
    • 显卡: 添加 PCI 设备 -> 勾选 Raw Device -> 选择 MDev Type (显存大小)。
    • (Windows 用户建议在 PCI 高级选项取消勾选 ROM-Bar)
  2. 安装 Guest 驱动

    • 启动虚拟机,安装下载好的 Guest 驱动 (grid 版本)。
    • 安装后重启虚拟机
    • 此时显卡能用,但状态为 Unlicensed (未授权),性能受限。

🔓 第四阶段:虚拟机激活 (二选一)

请根据您的喜好选择 方案 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 虚拟机 (一键命令)

  1. 下载工具:前往 GitLab Releases 下载 nvlts_windows_amd64.exe
  2. 放置:将文件重命名为 nvlts.exe,放入 C:\ 根目录(或者任意你喜欢的目录)。
  3. 执行:以 管理员身份 打开 PowerShell 或 CMD,运行:
    C:\nvlts.exe -g -r

    参数说明:-g 生成授权文件,-r 重启服务。

  4. 验证:等待服务重启后,输入 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 工具,流程稍繁琐:

  1. 提取文件:将 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路径
  2. 执行破解:在 Linux 上运行 ./patcher -g nvxdapix.dll -c root.pem
  3. 替换回写:将破解后的 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"
  4. 下载 Token:下载 client_configuration_token.tokC:\ProgramData\NVIDIA Corporation\Grid licensing\ClientConfigToken\
  5. 执行下载tok
    curl.exe --insecure -L -X GET https://dls.rws.im/-/client-token -o "C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken\dls.tok"
  6. 重启:重启 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) 是否执行成功。
正文完
 0
评论(没有评论)