Hyper-V 显卡直通(vGPU)

发布于 2023-08-17  2,033 次阅读


NVIDIA GeForce 其实是理论上是可以使用『显卡直通』的(皮衣刀客:加钱上 Quadro 给你直通驱动),反观 Intel 的 SR-IOV 就很实在,但是核显的性能有时候不一定够用,所以就需要独显直通了,正好 Hyper-V 的 vGPU 是可以满足日常家用的需求的。

一、系统要求

考虑到 Hyper-V 和 PowerShell 版本的问题,可能需要 Windows NT10 22H1 及以上版本才可以正常使用(是的没错,LTSC 是 21H2)。

仅限 NVIDIA 的 GPU,AMD 的没试过不清楚,但是看国外论坛似乎只是复制驱动会多几步。

二、获取 GPU 详情

管理员权限运行 PowerShell 指令 Get-VMHostPartitionableGpu 会得到以下形式的返回数据:

Name : \?\PCI#VEN_10DE&DEV_1FB2&SUBSYS_1489103C&REV_A1#4&50a4bfd&0&0008#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV
ValidPartitionCounts : {32}
PartitionCount : 32
TotalVRAM : 1000000000
AvailableVRAM : 1000000000
MinPartitionVRAM : 0
MaxPartitionVRAM : 1000000000
......

其中,Name : \?\PCI#VEN_10DE&DEV_1FB2 就是显卡的设备 ID,如果计算机有多个 GPU 的话,可以通过打开设备管理器,前往各个 GPU 对比其『设备 ID』确定具体是哪张 GPU,之后记下 Name: 后面的内容备用。

三、分配 GPU

依次执行以下命令(# 后面为命令解释,不需要执行):

$vm = "example"   #设置临时变量 vm,example 换成需要分配 GPU 的虚拟机的名称
$gpu_path = "\?\PCI#VEN_10DE&DEV_1FB2&SUBSYS_1489103C&REV_A1#4&50a4bfd&0&0008#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV"   #设置临时变量 gpu_path,引号中内容换成需要分配 GPU 的名称(Name 后面的内容)
Add-VMGpuPartitionAdapter -VMName $vm -InstancePath $gpu_path   #给目标虚拟机分配 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   #设置虚拟机中分配的 GPU 的具体参数
Set-VM -GuestControlledCacheTypes $true -VMName $vm   #给虚拟机调用权限
Set-VM -LowMemoryMappedIoSpace 1Gb -VMName $vm   #设置虚拟机中分配的 GPU 的最小显存
Set-VM -HighMemoryMappedIoSpace 32GB –VMName $vm   #设置虚拟机中分配的 GPU 的最大显存

四、复制驱动

  1. 打开设备管理器,打开目标 GPU,打开『驱动程序详细信息』,拉到最下面,会有如『nvwu.inf_amd64_3cd73f4669c33d6c\*』形式的文件,记下这个 nvwu.inf_amd64_3cd73f4669c33d6c(不同电脑可能不一样,以实际为准,下同)。
  2. 宿主机打开 C:\WINDOWS\System32\DriverStore\FileRepository\, 并复制走 nvwu.inf_amd64_3cd73f4669c33d6c 这个文件夹。
  3. 虚拟机打开 C:\WINDOWS\System32\HostDriverStore\FileRepository 如果不存在这个文件夹就自己新建,NTFS 权限直接继承就行,不需要单独配置。
  4. 2 中的 nvwu.inf_amd64_3cd73f4669c33d6c 这个文件夹复制到 3 中的那个文件夹里面去。(即 C:\WINDOWS\System32\HostDriverStore\FileRepository\nvwu.inf_amd64_3cd73f4669c33d6c
  5. 宿主机中的 C:\Windows\System32\nvapi64.dll 复制到虚拟机中的 C:\Windows\System32 文件夹。
  6. 关闭虚拟机,然后重启宿主机。

五、其他

打游戏就别想了,鼠标得单独弄,也可参考下面的参考文章。

参考文章:废纸时雨