Skip to content

消费级显卡在Hyper-V中开启显卡虚拟化

NVIDIA 和 AMD 都屏蔽了消费级显卡的虚拟化技术,但是随着微软 wsl2 对显卡虚拟化功能的支持,适用于 Hyper-V 的显卡虚拟化方案得以流出。

已知信息

该方法并非官方方法,不保证长期可用,且存在一定限制:

  1. GPU Paravirtualization 是 WDDM 2.4 的功能,但微软博客声称 WDDM 2.5 才支持该功能。
  2. WDDM 2.4 宿主机和客户机必须是相同的内核版本,否则虚拟显卡加载错误。
  3. WDDM 2.5 及以上的系统中,宿主机和客户机可以是不同的系统,比如主机使用 1809,客户机可以是 1809 及以上的版本。
  4. 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 显卡,需要将所有宿主机,驱动管理器,显卡驱动信息里的文件都必须全部拷贝到虚拟机里(路径和宿主机相同)。