
非常非常感谢这些好人, 是他们让这篇文章成为可能 (#≧▽≦)人

这篇文章可能没有多少图, 所以观感可能比较差... (配置虚拟机的时候没想到要写文章 (×﹏×)
本文不一定适用于最新的 PVE 版本。
前言
去年生日的时候, 买了一台 RH2288 V3 服务器放在家里。里面有两张 Tesla V100
的 GPU。一开始只是打算用来跑 AI 推理之类的。
不过最近开发 HugoAura 需要用到 Windows 虚拟机, 如果用 CPU 渲染的话, 基本调试不了任何 UI 动效, 所以打算利用一下 GPU。
直通不行嘛?
我天真地以为, 计算卡只需要作为 PCI 设备直通到虚拟机里, 然后再装上驱动就好。但是这样做了之后, 发现设备管理器里能识别到 NVIDIA Tesla V100 PCIe 16G
, 任务管理器里却看不到任何 GPU。显示输出也依然是 Microsoft 基本显示适配器
。
后来一搜才知道, NVIDIA 的 GPU 有两种工作模式, 分别是 TCC 和 WDDM。简单来讲...
据说可以通过 nvidia-smi -dm 0 -i <NVIDIA SMI 显卡 Index>
来切换到 WDDM 模式。但是我执行了一下, 发现 WDDM / TCC 切换好像不适用于纯计算卡:
> nvidia-smi -dm 0 -i 0
Unable to set driver model for GPU XXXXXXXX:XX:00.0: Not Supported
Treating as warning and moving on.
All done.
>
网上搜了一圈, 大多数改注册表强制开启 WDDM
的方法都失败了, 每次尝试的时候, 基本上都卡在了 Windows 的转圈圈第一屏。(花了我好多时间测试 TwT
还是 vGPU 吧
想起来很久远的一个名词: vGPU
。上次看到这个词, 还是当时选服务器 GPU 的时候, 问 AI 能不能多个虚拟机用同一个 GPU...
因为 vGPU 是付费功能, 所以那个时候并没有进一步去了解。(但现在不得不了解一下了
好在有众多大佬已经研究过了这方面的知识, 那就开始吧 ~
前期准备
大概需要这些东西:
PVE 8.X (只测试过 6.8.X 的内核版本, 其他内核兼容性未知)
至少一张 NVIDIA 的计算卡
别的没了...
Host 驱动
1. 下载 Host 驱动
可以从 佛西大佬的云盘 上下载宿主机的驱动。
我测试的时候只有 v17.X 的 Host 驱动 支持 Guest (虚拟机) 驱动用假的许可证, 但不知道你读到这篇文章的时候怎么样了... 总之看情况吧。
选一个合适的版本, 点进去之后找到名字类似 NVIDIA-Linux-x86_64-XXX.XXX.XX-vgpu-kvm-custom.run
的文件, 右键 - 复制链接, 然后在 PVE 的 Shell 里运行:
$ wget [复制的链接]
--2025-04-20 19:24:50-- https://alist.homelabproject.cc/d/foxipan/vGPU/XX.X/NVIDIA-Linux-x86_64-XXX.XXX.XX-vgpu-kvm-custom.run
Resolving alist.homelabproject.cc (alist.homelabproject.cc)... 172.67.174.43, 104.21.40.14, 2606:4700:3033::6815:280e, ...
Connecting to alist.homelabproject.cc (alist.homelabproject.cc)|172.67.174.43|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 88M [application/octet-stream]
Saving to: ‘NVIDIA-Linux-x86_64-XXX.XXX.XX-vgpu-kvm-custom.run’
2025-04-20 19:25:06 (52.2 MB/s) - ‘NVIDIA-Linux-x86_64-XXX.XXX.XX-vgpu-kvm-custom.run’ saved
2. 安装 Host 驱动
$ chmod +x ./NVIDIA-Linux-x86_64-XXX.XXX.XX-vgpu-kvm-custom.run && sudo ./NVIDIA-Linux-x86_64-XXX.XXX.XX-vgpu-kvm-custom.run
就是这样! 接下来应该会弹出来一个安装 UI, 除了一个 DKMS 选项需要选 "Yes" 以外, 其他的都默认就好 ~
⚠ 注意
照道理来说, 纯计算卡的场景, 不需要安装
vgpu_unlock_rs
。那个只是用来欺骗 Guest 驱动侧数据的, 只有消费级显卡跑 vGPU 才会用到。
3. 启动 Host 驱动服务
一般来讲, 装好驱动之后就会自动启动服务, 不过还是以防万一:
$ sudo systemctl restart nvidia-vgpud.service
$ sudo systemctl restart nvidia-vgpu-mgr.service
✨ 应该好啦
Guest 驱动
由于英伟达的 vGPU 许可证鉴权是在 Guest 侧的, 所以客户机配置过程会相对麻烦一些。
0. 开启 RDP
先把 RDP 开起来吧。一会驱动装好之后, VNC 的显示屏会默认变成副屏。那样就很难办了...
1. 下载 Guest 驱动
回到之前的云盘, 在 .run 文件的同目录下找到 NVIDIA-GRID-Linux-KVM
开头的文件夹。点进去之后再进入 Guest_Drivers
文件夹, 找到 EXE 的驱动文件。
2. 安装 Guest 驱动
就和安装正常的 N 卡驱动一样, 一路下一步就好啦...
3. 先看看成果吧
驱动装完之后, 应该不需要重启, 就能识别出 GPU。像这样 ↓
△ 就是这样!
4. 搭建 FastAPI-DLS
FastAPI-DLS 是一个假的 vGPU 授权服务器。
这边假设各位读者都已经有良好的 Docker 基础了哦...
以及, 个人不太喜欢用 Docker Compose, 所以下面的步骤都用 Docker CLI
下面这些步骤最好不要在宿主机上运行, 我个人还是比较倾向于保持宿主机环境整洁的...
I > 拉取镜像
$ sudo docker pull collinwebdesigns/fastapi-dls
⚠ 注意
可能需要自行解决网络问题
II > 先选择一个数据存储位置吧
我个人比较喜欢 /opt/docker-containers/data/<容器名>
之类的。
$ export WORKING_DIR=/opt/docker-containers/data/FastAPI-DLS
$ sudo mkdir -p $WORKING_DIR
III > 然后自签两份 OpenSSL 公私钥对
⚠ 注意
有个人 PKI 的读者请跳过此步, 优先用 PKI 签发证书
$ cd $WORKING_DIR && sudo mkdir certs && cd ./certs
$ sudo openssl genrsa -out $WORKING_DIR/instance.private.pem 4096
$ sudo openssl rsa -in $WORKING_DIR/instance.private.pem -outform PEM -pubout -out $WORKING_DIR/instance.public.pem
$ sudo openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout $WORKING_DIR/webserver.key -out $WORKING_DIR/webserver.crt
IV > 启动容器!
这个就很简单了吧...
$ export TARGET_URL=<这里填运行 Docker 容器的宿主机 IP! (或者如果有本地域名的话, 就用本地域名吧>
$ export EXPOSE_PORT=<这里填 Docker 容器对外开放的端口, 如果宿主机没有其他服务的话, 那就 443 吧>
$ sudo docker run -e DLS_URL=$TARGET_URL -e DLS_PORT=$EXPOSE_PORT -p $EXPOSE_PORT:443 -v $WORKING_DIR/certs:/app/cert --name INF-Custom-FastAPI-DLS collinwebdesigns/fastapi-dls:latest
V > 测试一下访问
看一看 https://${TARGET_URL}:${EXPOSE_PORT}/
能不能正常访问吧。
应该会看到像下面这样 ▽
△ FastAPI-DLS 的首页 (没用 PKI 签证书, 懒得改了 (((> <))) )
5. 获取 Client Config Token
从客户机那侧, 用浏览器访问 https://<DLS URL>/-/client-token
, 就会拿到一个 ClientConfigToken。
进到 C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken
文件夹 (如果不存在就新建一下), 把 Config Token 放进去。
重启客户机, 再次进入桌面的时候, 应该就会:
△ 咱也是有钱人了 (划
结束啦
🎉 好咯, 到这里, 一切都已经完成啦~
后记
不知道是通病还是希沃镜像的问题, 每次启动虚拟机似乎都要 VIDEO_MEMORY_MANAGEMENT_INTERNAL
蓝屏一次。第二次重启才会好。或许是因为希沃镜像里塞了 Intel 的显卡驱动 (?
以及, 最近夏天到了, 服务器进风口温度动不动就 34º+, 所以不是很敢用了 ((>_<)) 还是用 MacBook + Parallels Desktop 吧。