推荐本站淘宝优惠价购买喜欢的宝贝:
15
2024
07
19:04:12
在虚拟机里用Lumion渲图是什么体验——Hyper-V虚拟化GPU实践
平台环境
由于平时都用 Windows 10,我选择系统自带的 Hyper-V 作为虚拟化平台。Hyper-V 支持 GPU 虚拟化,其增强会话模式可以传输声音和剪贴板,此外,通过网络共享也能快速交换文件。在 1803 及之前的版本,在 Hyper-V 中添加 RemoteFX 可以启用 GPU 支持,现在它被微软砍了。自 20H1 版本开始,微软准备为基于 Hyper-V 的 WSL 2 启用 GPU 支持(1)。那么,普通的 Hyper-V 虚拟机也有办法用上显卡,据说 NVIDIA 和AMD 显卡都支持(2)。
我使用 Windows 10 20H2 进行尝试,显卡为 RTX 2070 SUPER,驱动为 457.30 Studio(DCH)。显卡的配置步骤参考 Cfx.re Community(3)上的帖子,文件共享的配置则参考了百度。中间踩了不少坑,想尝试的朋友一定要看下去。
虚拟显卡配置
首先,将显卡驱动升级到最新版。之前有人试过 Game Ready 驱动可以,但 Studio 驱动不行,其实是后者版本落后于前者,在当时不符合要求。我更新到 457.30(WDDM2.7),发现 Studio 驱动也可以。
然后,新建一个第二代 Hyper-V 虚拟机,设置核心数和内存容量,关闭检查点,启用增强会话模式,并装好系统。为了求稳,我在虚拟机中安装了和宿主机相同版本的操作系统,都是 20H2 的专业工作站版。理论上,在虚拟机中安装 1809 及以上版本都可以,只要虚拟机中系统的显卡驱动符合 WDDM2.5 标准即可。为了不经过 Hyper-V 管理器而直接连接虚拟机,可以为以下目标创建快捷方式,今后直接通过快捷方式连接:
C:\Windows\System32\vmconnect.exe 你的计算机名称 你的虚拟机名称
接着,新建内容如下的 Powershell 脚本,将“Your VM name”替换成虚拟机的名称,并以管理员身份运行一次。注意,运行一次就够了,而且运行时虚拟机必须关机。
param([switch]$Elevated)function Test-Admin {
$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)}if ((Test-Admin) -eq $false) {
if ($elevated) {
# tried to elevate, did not work, aborting
} else {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}
exit}'Running with full privileges!''Setting GPU-PV...'$vm = "Your VM name"# replace the words in double quotation marks with your virtual machine's nameAdd-VMGpuPartitionAdapter -VMName $vmSet-VMGpuPartitionAdapter -VMName $vm -MinPartitionVRAM 80000000 -MaxPartitionVRAM 100000000 -OptimalPartitionVRAM 100000000 -MinPartitionEncode 80000000 -MaxPartitionEncode 100000000 -OptimalPartitionEncode 100000000 -MinPartitionDecode 80000000 -MaxPartitionDecode 100000000 -OptimalPartitionDecode 100000000 -MinPartitionCompute 80000000 -MaxPartitionCompute 100000000 -OptimalPartitionCompute 100000000Set-VM -GuestControlledCacheTypes $true -VMName $vmSet-VM -LowMemoryMappedIoSpace 128MB -VMName $vmSet-VM -HighMemoryMappedIoSpace 8GB -VMName $vm'Finished.'
关键代码复制自 Cfx.re Community,原代码最后一行写错了两个短横线,已经改正。如果提示禁止执行脚本,以管理员身份在 Powershell 中执行以下命令:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
其实,RTX 2070 SUPER 所需的资源根本达不到原代码设置的 32GB,我把 -HighMemoryMappedIoSpace 改成了 8GB,没出问题。如果后面装好驱动,虚拟机显卡还有“代码 43”错误,很可能是这个参数过小导致内存资源不足,需要以管理员身份用 Set-VM 命令重设。
是时候给虚拟显卡装驱动了。使虚拟机开机,在宿主机的以下位置寻找显卡驱动文件夹:
C:\Windows\System32\DriverStore\FileRepository
以 NVIDIA 为例,文件夹名为“nv_dispsi.inf_amd64_一串字符”,将它复制到虚拟机中的以下目录(如果不存在则手动创建该目录):
C:\Windows\System32\HostDriverStore\FileRepository
最后,关闭增强会话模式,重启虚拟机,虚拟显卡工作正常。其实不关闭增强会话模式,Lumion 也能正常工作,但虚拟机中的游戏可能会无法运行,最终还是关掉了。这样就引出新的问题——怎么和虚拟机交换文件?
共享文件配置
目前主要有三种方法和 Hyper-V 虚拟机交换文件——网盘、VHD 和网络共享。网盘严重依赖网络,效率也低;VHD 不能在宿主机和虚拟机上同时挂载,切换麻烦;所以我果断选择网络共享。
在宿主机和虚拟机中将网络属性都改为“专用”,并更改“高级共享设置”,启用网络发现,启用网络连接设备的自动设置,启用公用文件夹共享,启用无密码的共享;
接下来将宿主机的文件夹共享给虚拟机。在宿主机中,右击要被共享的文件夹,点击属性——共享——高级共享,勾选“共享此文件夹”,接着点击“权限”,为 Everyone 添加完全控制权限。
但系统没有默认视 Everyone 为这个文件夹的用户,需要手动添加。在文件夹属性面板中,切换到“安全”标签,添加 Everyone 并赋予它完全控制权限。现在,虚拟机的网络中出现了宿主机,刚才的文件夹可以访问了。你可以输入文件夹的路径进行访问,也可以将它映射为网络驱动器并设置为“始终脱机可用”。
使用体验
配置完成后,我在虚拟机中试了试 Lumion、V-Ray Benchmark 和 Blender Cycles,虚拟机显卡支持 DirectX 和 CUDA,几乎没有性能损耗,但不支持光线追踪和 OptiX。在 Blender 2.91 中测试 BMW27 GPU,宿主机和虚拟机用时都是 53 秒出头。Lumion 的操作画面很流畅,渲染的图像和视频可以直接保存到共享文件夹中,令人满意。
参考资料
1 DirectX is coming to the Windows Subsystem for Linux —— DirectX Developer Blog
2 hyper-v的GPU-PV可以开始折腾着玩了,amd和n卡都能用 —— Chiphell
3 Running FiveM in a Hyper-V VM with full GPU performance for testing (“GPU Partitioning”) —— Cfx.re Community
本文链接:https://hqyman.cn/post/7119.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。