1、对于 Proxmox VE 8,需要使用16.0+版本的 vGPU 驱动程序,低版本的驱动程序不支持 Linux 6.x 内核。
vGPU
vGPU 技术通过将硬件 GPU 分割成多个虚拟 GPU 以支持多个虚拟机。每个虚拟 GPU 可以被分配给不同的虚拟机,从而使多个虚拟机拥有“独显”。
2、关于 PVE 使用 GPU 有三种方法:
显卡直通
普通显卡 + vGPU-unlock
数据中心显卡 vGPU
3、NVIDIA® 虚拟 GPU 软件支持的 GPU(NVIDIA® Virtual GPU Software Supported GPUs)
4、物理宿主机
主板 BIOS 需要开启 IOMMU / VT-d、Above 4G Decoding、SR-IOV。
IOMMU 是一种地址映射技术,而 VT-d 是 Intel 对该技术的别称;Above 4G Decoding 关系到 PCI-E 设备 RAM 的 64 位寻址能力,通常用于需要让 CPU 访问全部显存的场景,使用 vGPU 时推荐开启;SR-IOV 允许一个 PCI-E 设备被多个虚拟机使用,常用于网卡等设备共享。
PVE 物理宿主机配置
# 把下面几行追加到 /etc/modules 里,用于加载所需的内核模块 vfio vfio_iommu_type1 vfio_pci vfio_virqfd # 屏蔽开源驱动 echo "blacklist nouveau" >> /etc/modprobe.d/pve-blacklist.conf # 开启IOMMU #编辑grub,请不要盲目改。根据自己的环境,选择设置 vi /etc/default/grub #在里面找到: GRUB_CMDLINE_LINUX_DEFAULT="quiet" #然后修改为: GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt" #如果是amd cpu请改为: GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt" #如果是需要显卡直通,建议在cmdline再加一句video=vesafb:off video=efifb:off video=simplefb:off,加了之后,pve重启进内核后停留在一个画面,这是正常情况 GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=vesafb:off video=efifb:off video=simplefb:off" 修改完成之后,直接更新grub update-grub 注意,如果此方法还不能开启iommu,请修改 /etc/kernel/cmdline文件 并且使用proxmox-boot-tool refresh 更新启动项 # 安装依赖包 apt install build-essential dkms mdevctl pve-headers-$(uname -r) # 重启机器 reboot 重启之后,在终端输入 dmesg | grep iommu 出现如下例子。则代表成功 [ 1.341100] pci 0000:00:00.0: Adding to iommu group 0 [ 1.341116] pci 0000:00:01.0: Adding to iommu group 1 [ 1.341126] pci 0000:00:02.0: Adding to iommu group 2 [ 1.341137] pci 0000:00:14.0: Adding to iommu group 3 [ 1.341146] pci 0000:00:17.0: Adding to iommu group 4
5、安装 NVIDIA Host 驱动
NVIDIA 官网的驱动是非公开的,需要注册 NVIDIA 商业账户才可访问;
vGPU16.7 KVM 驱动 NVIDIA-GRID-Linux-KVM-535.183.04-53...
链接:https://pan.baidu.com/s/181yNg67-nr1u5kF6unjrIQ?pwd=w3lh
提取码:w3lh
# 本次安装环境:PVE版本7.4-3,Linux内核版本5.15.107-2,驱动版本15.1 chmod +x NVIDIA-Linux-x86_64-430.67-vgpu-kvm.run ./NVIDIA-Linux-x86_64-430.67-vgpu-kvm.run # 安装过程完成后可以使用以下命令验证 $ dkms status nvidia, 525.85.07, 5.15.107-2-pve, x86_64: installed $ nvidia-smi +-----------------------------------------------------------------------------+ | NVIDIA-SMI 525.85.07 Driver Version: 525.85.07 CUDA Version: N/A | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla P4 On | 00000000:81:00.0 Off | 0 | | N/A 53C P8 12W / 75W | 1899MiB / 7680MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+
6、划分 PCI-E 设备给虚拟机
通过 mdevctl types | grep '^[^ ]*$' 查看所有生成了 mdev 的 PCI 设备 ID,然后通过 PVE 网页控制台给虚拟机分配 PCI 设备,设备选择刚才查到的设备 ID。该处的 MDev 字段,后面半段的数字为显存容量,字母为 vGPU 类型,这里选 Q 全能型即可,显存按需分配。
7、Debian 系统安装vGPU。
# 禁用 nouveau 并安装必须软件包 echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf apt install build-essential gcc-multilib dkms mdevctl update-initramfs -k all -u reboot # 重启完成后安装 Guest 驱动 chmod +x NVIDIA-Linux-x86_64-430.63-grid.run ./NVIDIA-Linux-x86_64-430.63-grid.run # 验证安装是否成功 dkms status nvidia-smi nvidia-smi -q | grep License # 查看授权,Unlicensed (Unrestricted) 表示未授权 8、安装授权 Windows 使用管理员身份启动 PowerShell 执行如下命令 # <ls-hostname-or-ip>为你的授权服务IP端口 curl.exe --insecure -L -X GET https://<dls-hostname-or-ip>/-/client-token -o "C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken\client_configuration_token_$($(Get-Date).tostring('dd-MM-yy-hh-mm-ss')).tok" Restart-Service NVDisplay.ContainerLocalSystem Linux root 执行如下命令 # <ls-hostname-or-ip>为你的授权服务IP端口 curl --insecure -L -X GET https://<dls-hostname-or-ip>/-/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok service nvidia-gridd restart 9、查看授权 Windows 使用管理员身份启动 PowerShell 执行如下命令 nvidia-smi.exe -q | Select-String License # 查看授权状态 Linux root 执行如下命令 nvidia-smi -q | grep License # 查看授权状态