0x01 前言
对于使用Windows虚拟桌面进行日常远程工作的应用场景,使用NVIDIA vGPU可以极大地优化使用体验。
在使用VMware虚拟的SVGA驱动在进行图形化操作,如:Office软件,甚至使用浏览器浏览网页的时候都会出现明显调帧卡顿的问题,使用体验较本地电脑有明显差距,会极大地降低工作效率。使用NVIDIA Tesla系列显卡可以为虚拟桌面加上硬件加速,因为需要购买显卡及License,单一虚拟机的成本会上升明显,但工作效率也因此得以提高。
在实际应用中,使用Office软件、Teams、WhatsApp和WeChat等IM软件明显流畅,使用浏览器浏览网页、浏览PDF和使用一些绘图软件也有改善。
0x02 准备
首先确认需求,vGPU目前有以下类型:
Series | Optimal Workload |
---|---|
Q-series | Virtual workstations for creative and technical professionals who require the performance and features of Quadro technology |
C-series | Compute-intensive server workloads, such as artificial intelligence (AI), deep learning, or high-performance computing (HPC) |
B-series | Virtual desktops for business professionals and knowledge workers |
A-series | App streaming or session-based solutions for virtual applications users |
在我的应用环境中,虚拟桌面的定位为日常工作,所以选择B系列。不通系列的License授权费用可能有差异,具体需要向供应商确认。计费方式主要有2种:订阅和买断。订阅授权的年费为每个授权HKD $420左右,买断则需要强制购买5年技术支持,每个授权合计需要HKD $1800左右。两种授权使用大概5年的时候,总花费出现交叉,使用超过5年的时候,买断比订阅便宜。
vGPU的授权其实是不绑定显卡和设备的,需要私有化部署License Server,虚拟机内安装的驱动需要填写这台License Server的IP地址。当虚拟机关机,就会释放1个License,驱动启动的时候会重新申请1个。
确认好需求也知道大致费用后,在选择显卡型号前需要知道每台服务器大致放多少台虚拟机。按设计,我一般会放置15台左右,而且我的使用环境为虚拟桌面,所以每台虚拟机分配1G显存即可,这样可以选择2块8G内存的显卡或1块16G内存的显卡。
一般情况下,确认好显存就可以开始选择显卡。但对于计算型的场景,还需要确认vGPU核心数量,因为某些高端型号每块板卡所支持的vGPU数量非常多,比如:Tesla M10就支持高达64个vGPU。这时候确认每台虚拟机的内存和CPU核心型号是很重要的工作,因为要确认每台物理服务器能承载多少台虚拟机,这时候才能确认这些vGPU是否都能用上,如果都用上,是否存在性能瓶颈,毕竟各个组件间是相互制衡的。
综上,我环境中的虚拟桌面每台需要24~32G内存,4~8vCPU,那么一台服务器需要328G~512G内存,最多放置16台虚拟机。显卡有这些选择:2个M6、1个P100 16G、2个P4、1个T4、1个V100 16G,实际选用2个P4。
然后确认vGPU Type,比如我选择的B系列有以下Type,这里选用P4-1B:
上图中的P4-2B4和P4-1B4已经弃用,在后续的驱动中会移除。
这个vGPU Type在VMware中会以一个profile体现,需要在vCloud内配置和分配,对应的OVDC下的虚拟机才能使用。
还需要到NVIDIA许可门户网站下载对应的驱动和License Server软件或虚拟机模版,这篇文章不涉及License Server的部署及配置,软件版本选用14.1,后续会应用一个脚本:
压缩包内包含VMware ESXi 7.0.2的VIB文件和Windows等系统的驱动:
最后准备vCloud等环境,至此,准备工作完成。
0x03 部署
将显卡装入服务器内,如果一切正常,可以在Graphics Devices中找到相关设备:
然后打开SSH服务,解压以下文件并将其中的VIB文件上传至Host的/tmp目录中:
NVD-VGPU_510.73.06-1OEM.702.0.0.17630552_19796074.zip NVIDIA_bootbank_NVIDIA-VMware_ESXi_7.0.2_Driver_510.73.06-1OEM.702.0.0.17630552.vib
然后执行以下命令:
esxcli software vib install -v /tmp/NVIDIA_bootbank_NVIDIA-VMware_ESXi_7.0.2_Driver_510.73.06-1OEM.702.0.0.17630552.vib
虽然不要求重启,但我建议重启一遍:
[root@esxi:~] esxcli software vib install -v /tmp/NVIDIA_bootbank_NVIDIA-VMware_ESXi_7.0.2_Driver_510.73.06-1OEM.702.0.0.17630552.vib Installation Result Message: Operation finished successfully. Reboot Required: false VIBs Installed: NVIDIA-vGPU-VMware_ESXi_7.0.2_Host_Driver_510.73.06-1OEM.702.0.0.17630552 VIBs Removed: VIBs Skipped:
最后确认:
# 确认软件包的安装及内核加载情况 [root@localhost:~] vmkload_mod -l | grep nvidia nvidia 995 35828 # 检查GPU [root@localhost:~] nvidia-smi Mon Jan 30 21:43:43 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.73.06 Driver Version: 510.73.06 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:04:00.0 Off | 0 | | N/A 28C P8 10W / 75W | 1899MiB / 7680MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla P4 On | 00000000:82:00.0 Off | Off | | N/A 37C P8 10W / 75W | 1028MiB / 8192MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 2172725 C+G xxx-xxxxx-xxxx 1046MiB | | 0 N/A N/A 2494912 C+G xxx-xxxxx-xxxx 936MiB | | 1 N/A N/A 2215092 C+G xxx-xxxxx-xxxx 1734MiB | +-----------------------------------------------------------------------------+
至此,完成部署工作。
0x04 配置
0x04.1 PVDC
首先到PVDC中添加vGPU Policy:
首先选择vGPU Profile:
应用到目标OVCD中,这里可以选NO,然后手动在OVDC中应用亦可:
接下来是应用到虚拟机中,因为授权和资源有限,建议选NO后在虚拟机中手动配置:
然后是CPU和内存资源的预留设定,因为这属于PCI设备,需要预留100%的资源。我倾向于在OVDC中设置,所以这里选NO:
最后是检查确认:
完成后,可以看到OVDC名称旁边会出现一个NVIDIA的LOGO:
0x04.2 OVDC
首先调整OVDC中资源预留的设定,将CPU和内存预留设置为100%:
然后定位到vGPU标签,添加刚才在PVDC中创建的vGPU Profile:
至此,完成OVDC的配置。
0x04.3 虚拟机
在虚拟机配置界面中定位到Hardware –> Compute标签,单击vGPU Policy上面的Edit,选择目标Policy后单击SAVE即可:
如果是迁移进来的虚拟机,还需要确认CPU和内存的预留情况,可以在vCPU和内存设置界面中直接单击确认,vCloud会自动调整。
最后启动虚拟机即可。
0x05 驱动
启动虚拟机后先安装vmtools,然后安装驱动,最后重启一遍:
512.78_grid_win10_win11_server2016_server2019_server2022_64bit_international.exe
重启之后会提示许可证不存在:
此时可以右击桌面打开NVIDIA控制面板,在管理许可证页面内填入License Server的IP或域名:
如果是用于测试,可以试试这个:
如README所说的,这个脚本主要做2件事:
- 创建注册表项
- 允许未授权使用时间从20分钟调整至1天
- 禁用许可证获取通知
- 创建定时任务
- 每天凌晨3点重启vGPU驱动
在实际使用中发现有一个问题:因为是重启驱动,所以会导致使用GPU渲染的软件崩溃或黑屏,首当其冲的就是浏览器。除此之外一切正常。
至此,所有工作均已完成。
0x06 结语
图形性能稍有提升,但图像质量的提升会给RD网关或直连的网络带来压力,对延迟的要求也有所提升。