环境
- 系统
- 宿主机:(全新安装的) Proxmox VE 7.3-6
- 客户机:Debian 11
- 硬件
- Tesla P40
- BIOS 开启 VT-x/VT-d 虚拟化技术以及 Above 4G Decoding
- Above 4G Decoding 的坑详见 Tesla P40 硬件避坑
主板需要支持 Intel VT-d 虚拟化技术才能开启 IOMMU 并向客户机添加 PCI 设备
需要注意 VT-d 不是 VT-x,有些(阉割了功能的)主板只支持 VT-x,不支持 VT-d
Intel 平台有这个硬件坑,AMD 平台没有搭建过不清楚
参考
- https://forum.proxmox.com/threads/kernel-5-11-nvidia-linux-vgpu-kvm.94266/page-3
- https://gitlab.com/polloloco/vgpu-proxmox
- https://pve.proxmox.com/wiki/PCI_Passthrough
步骤
准备安装环境
apt install gcc g++ make cmake dkms pve-headers mdevctl
配置 IOMMU
安装好 PVE 后,先开启 IOMMU,以下以 Intel 平台、grub 启动为例,AMD 平台或者使用 systemd-boot 可以查看参考链接里的官方教程
编辑 /etc/default/grub,修改 GRUB_CMDLINE_LINUX_DEFAULT 一行,添加
intel_iommu=on iommu=pt
如下图
这里删除了默认的 quiet 参数方便 debug
编辑后执行
update-grub
然后编辑 /etc/modules,添加以下组件
vfio vfio_iommu_type1 vfio_pci vfio_virqfd
禁用 Nvidia 开源驱动
Proxmox(Debian) 会默认启用 Nvidia nouveau 开源驱动,需要禁用才能安装 Nvidia 官方驱动
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
然后重启系统
验证 IOMMU
重启完毕后执行
dmesg | grep -e DMAR -e IOMMU
如果出现类似下图的输出信息,代表开启成功
如果只输出了
DMAR: IOMMU enabled
一行,没有其他输出,代表主板不支持 VT-d,需要换主板(当然也有可能是其他方面的问题,这里只阐述我遇到的坑)
获取 Nvidia vGPU 驱动
不同于一般的 Geforce/Studio 驱动,Nvidia 没有提供公开免费下载 vGPU 驱动的渠道,必须注册企业账户后在账户页面下载
然而账户不是个人随便能注册成功的(使用公共邮箱的话 Nvidia 会审核申请),最后在 Reddit 和 PVE 论坛找到了驱动资源
- 论坛地址:https://forum.proxmox.com/threads/kernel-5-11-nvidia-linux-vgpu-kvm.94266/page-3
- 驱动的 Google Drive 地址:https://drive.google.com/drive/folders/1WvrzUE-p8ZQFglgeKU3PAx9x5UPJ1dAF
以上链接包含了 525.60.12 版本的宿主机 vGPU 驱动和 525.60.13(Linux)、527.41(Windows)的客户机 Grid 驱动
并不是最新版本,但是能用
下载后解压
安装 vGPU 驱动
赋予运行权限
chmod +x ./NVIDIA-xxxx.run
运行安装程序
./NVIDIA-xxxx.run --dkms
DKMS 提示信息选择 yes 即可,安装完毕后重启系统
验证驱动安装
执行以下指令,如果正确输出了安装的显卡,则代表安装成功
nvidia-smi
另外可以执行下述指令查看显卡支持的 vGPU 类型,输出如图
mdevctl types
也可以执行下述指令查看显卡是否支持并开启 vGPU
nvidia-smi vgpu
新建 vGPU 客户机
按一般的客户机新建步骤新建客户机,机器类型要注意选择 q35
新建完毕后进入客户机 Web UI 下的 Hardware 标签,添加一个 PCI 设备
PCI 设备选择显卡,然后右侧会出现选择 vGPU 类型(MDev Type)的选项
选择结尾为 C 类型的设备,Avail 列的数字代表 vGPU 的显存大小
关于不同 vGPU 系列的差异可以查看 https://docs.nvidia.com/grid/13.0/grid-vgpu-user-guide/index.html#vgpu-types-tesla-p40
Grid 驱动安装
Grid 驱动需要安装在分配了 vGPU 的客户机内
将 Grid 驱动传输到客户机,关闭 nouveau 开源驱动
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
安装驱动运行环境
apt install gcc g++ cmake make linux-headers-$(uname -r)
重启客户机
赋予驱动运行权限
chmod +x ./NVIDIA-Linux-x86_64-xxx.xx.xx-grid.run
安装驱动
./NVIDIA-Linux-x86_64-xxx.xx.xx-grid.run
安装完毕后运行
nvidia-smi
查看设备信息,验证安装状态
修改客户机配置
执行此步骤是因为发现开启显示时,Stable Diffusion 在启动过程中会假死,关闭后才能运行,如果使用中没有遇到问题则可以忽略此步骤
将客户机关闭,进入 PVE Web UI,导航到当前客户机配置界面,进入硬件设置
选择显示,将显卡设置为无(none),关闭前确保开启了 SSH 等可以控制客户机的服务,否则将无法与客户机交互
然后开启客户机即可
Windows 客户机驱动安装
同 Debian,系统安装完毕后先开启 Remote Desktop,然后安装驱动,关闭系统
在硬件设置中关闭显卡 (选择 none),开机即可,之后使用远程桌面管理虚拟机