一、vGPU介绍
vGPU的产生背景还是和计算机虚拟化背景有相似之处,都为了充分提高硬件资源的使用率而设计。目前市面上主要有 intel、amd、nvidia三家主流厂商提供相关技术,本文分主要介绍vGPU原理和Nvidia vGPU在Proxmox VE7.4版本的部署过程。
Nvidia vGPU支持的显卡
具体型号请参考下面链接 Supported Products - NVIDIA Docs
例如:A10、A16、A30、A40、P4、P40、P100、T4、RTX A5000、RTX A6000等等。
不同的平台系统支持也不一致,在此不在列举。
二、Nvidia vGPU PVE节点环境准备
1、配置软件源安装必要依赖
#source.list使用清华源
deb https://mirrors.ustc.edu.cn/debian bullseye main contrib non-free
deb https://mirrors.ustc.edu.cn/debian bullseye-updates main contrib non-free
deb https://mirrors.ustc.edu.cn/debian bullseye-backports main contrib non-free
deb https://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-octopus/ bullseye main
#pve-install-repo.list使用清华源
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve/ bullseye pve-no-subscription
- 安装必要的依赖
apt install dkms build-essential pve-headers pve-headers-`uname -r` dkms jq uuid-runtime -y
2、调整内核参数
禁用nouveau 驱动,使Nvidia显卡不被其占用,从而能够顺利安装Nvidia vGPU驱动。
echo "blacklist nouveau" >>/etc/modprobe.d/disable-nouveau.confecho "options nouveau modeset=0" >>/etc/modprobe.d/disable-nouveau.conf
-
3、允许不安全中断
echo" options vfio_iommu_type1 allow_unsafe_interrupts=1" >/etc/modprobe.d/iommu_unsafe_interrupts.conf
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
4、开启IOMMU
编辑/etc/default/grub,在cmdline中添加iommu参数 如下
#我这边平台是intel_cpu,amd平台自行查阅
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
-
5、更新内核以应用内核参数
update-initramfs -k all -u
-
6、最后使用更新系统引导,重启系统
update-grub
reboot
三、Nvidia vGPU Host主机驱动安装
PVE为KVM平台需要下载KVM版本的驱动,我这里已经准备好相关驱动程序(由于开心版授权许可的问题,我们选择535版本的驱动)
1、切换显卡为无显示模式
RTX A6000带有HDMI和DP接口出厂设置为显示输出模式,使用vGPU需要切换为无显示模式
使用英伟达提供的显示模式切换工具切换为无显示模式,执行切换工具,根据提示选择切换为无显示模式,忘了截图( ̄□ ̄||),很简单看一眼就明白
./displaymodeselector
2、上传文件至节点并赋权
chmod +x NVIDIA-Linux-x86_64-535.161.05-vgpu-kvm.run
3、以dkms方式安装并重启系统
./NVIDIA-Linux-x86_64-535.161.05-vgpu-kvm.run --dkms
-
4、检查安装情况,重启系统
~# dkms status
nvidia, 535.161.05, 5.15.158-1-pve, x86_64: installed
reboot
5、配置SR-IOV
NVIDIA GPU(在基于 Ampere 架构的 GPU)上,必须先启用 SR-IOV,然后才能使用 vGPU。 可以使用 NVIDIA 的脚本执行此操作sriov-manage
/usr/lib/nvidia/sriov-manage -e <pciid | ALL>
由于该配置重启节点后会丢失,我制作了一个服务用于重启服务器后重新启用配置
cat <<EOF >/usr/local/lib/systemd/system/nvidia-sriov.service
[Unit]
Description=Enable NVIDIA SR-IOV
After=network.target nvidia-vgpud.service nvidia-vgpu-mgr.service
Before=pve-guests.service
[Service]
Type=oneshot
ExecStartPre=/bin/sleep 5 #为避免vGPU相关服务未启动完成导致重新启用配置失败,使用延时配置,实测5秒正常
ExecStart=/usr/lib/nvidia/sriov-manage -e ALL
[Install]
WantedBy=multi-user.target
EOF
-
6、重载服务配置,启用服务
systemctl daemon-reload
systemctl enable --now nvidia-sriov.service
四、Nvidia vGPU Guest主机分配vGPU和驱动安装
1、分配规则
- 同一张卡上,同显存的C和Q可以同时分配。
- 同一张卡上,不能同时分配不同显存的vGPU
- 不同卡上,不同显存可以同时分配,但必须满足上一原则。
2、查看vGPU设备
lspci -d 10de:
查看vGPU设备配置类型,使用以下工具查询支持的设备类型(部分设备类型截图)
mdevctl types
3、为客户机分配vGPU(Web界面)
- 虚拟机机型修改为Q35,以便启用PCIE。
- 选择vGPU设备,选择MDev设备类型,建议选择Q类型的vGPU(分配遵循1.1规则)打开高级选项卡,主GPU选项不中(选中后控制台VNC界面无显示)
五、Guest主机驱动安装
1、Windows
- 安装536.25_grid_win10_win11_server2019_server2022_dch_64bit_international.exe(已在win10 验证)
- 把下载的 token 文件放进虚拟机的 C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken 文件夹内
- 重启NVDisplay.ContainerLocalSystem 服务
- 检查授权,显示授权到期时间则为vGPU已正确部署,
2、Linux
以Ubuntu为例 (Nv驱动和内核有较强的相关性,升级内核将有很大概率导致驱动无法安装或正常使用)
- 安装必要组件
sudo apt update && sudo apt dist-upgrade && sudo apt install gcc make -y
- 安装驱动程序
sudo chmod +x NVIDIA-Linux-x86_64-535.183.01-grid.run ./ NVIDIA-Linux-x86_64-535.183.01-grid.run
- 安装许可,许可文件存放路径
/etc/nvidia/ClientConfigToken/client_configuration_token.tok
- 重启服务
sudo systemctl restart nvidia-gridd
nvidia-smi -q
六、授权服务器安装
请参考官方文档