消费级显卡在Hyper-V中开启显卡虚拟化
NVIDIA 和 AMD 都屏蔽了消费级显卡的虚拟化技术,但是随着微软 wsl2 对显卡虚拟化功能的支持,适用于 Hyper-V 的显卡虚拟化方案得以流出。
已知信息
该方法并非官方方法,不保证长期可用,且存在一定限制:
- GPU Paravirtualization 是
WDDM 2.4
的功能,但微软博客声称WDDM 2.5
才支持该功能。 WDDM 2.4
宿主机和客户机必须是相同的内核版本,否则虚拟显卡加载错误。WDDM 2.5
及以上的系统中,宿主机和客户机可以是不同的系统,比如主机使用1809
,客户机可以是1809
及以上的版本。WDDM 2.7
以前的系统,客户机运行D3D
独占模式进入全屏的应用会引起各种宿主机蓝屏。
操作流程
本操作流程适用于 NVIDIA 消费级显卡,AMD 的解决方案放到最后,为网传方案,本人未曾验证。
为虚拟机添加 GPU 分区适配器
注:使用管理员身份的 PowerShell 执行以下命令。
注:请关闭虚拟机
方便后续无脑粘贴操作,设置一个暂时的变量(<VM Name>
为你虚拟机的名称,例如Windows 11
):
$vm = "<VM Name>"
为指定虚拟机($vm
)添加 GPU 分区适配器:
Add-VMGpuPartitionAdapter -VMName $vm
配置虚拟机($vm
)上的 GPU 分区,分配资源:
Set-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 100000000
允许虚拟机来控制其内存缓存策略:
Set-VM -GuestControlledCacheTypes $true -VMName $vm
设置虚拟机的 Low Memory Mapped I/O Space 为 1GB:
Set-VM -LowMemoryMappedIoSpace 1GB -VMName $vm
设置虚拟机的 High Memory Mapped I/O Space 为 32GB:
Set-VM -HighMemoryMappedIoSpace 32GB -VMName $vm
至此,我们完成了为虚拟机分配 GPU 分区的任务,但此时虚拟机还无法使用这个分区,因为我们没有驱动。
复制显卡驱动文件
NVIDIA的官方驱动安装程序在识别到自己处于虚拟机后会拒绝安装,不过我们可以另辟蹊径,将宿主机中的虚拟机文件复制到虚拟机中。
首先,将宿主机的 API 文件:
C:\Windows\System32\nvapi64.dll
复制到虚拟机同目录:
C:\Windows\System32
其次是驱动程序所在目录整体:
C:\Windows\System32\DriverStore\FileRepository\<驱动程序目录>
<驱动程序目录>
可以在设备管理器
-显示适配器
-<显卡型号> 上右键
-属性
-驱动程序详情信息
中获取,在驱动程序详情信息中拉到最下面看到nv
开头的目录名即是<驱动程序目录>
。
复制到宿主机目录(若不存在需要手动创建):
C:\Windows\System32\HostDriverStore\FileRepository
随后重启虚拟机即可。
附:AMD 显卡操作
对于 AMD 显卡,需要将所有宿主机,驱动管理器,显卡驱动信息里的文件都必须全部拷贝到虚拟机里(路径和宿主机相同)。