由于非Windows Server系统的Hyper-v难以直接使用SR-IOV,所以这里我们使用基于SR-IOV的GPU分区技术完成对GPU的虚拟化

这里我使用Win11 Arc 140V核显,虚拟机名称canary

在设备管理器中获得需要虚拟化的设备的实例路径,记住框选住的内容"DEV_64A0"

在终端执行Get-VMHostPartitionableGpu或者Get-VMPartitionableGpu

Name                          : \\?\PCI#VEN_8086&DEV_64A0&SUBSYS_1E131043&REV_04#3&11583659&0&10#{064092b3-625e-43bf-9e
                                b5-dc845897dd59}\GPUPARAV
ValidPartitionCounts          : {32}
PartitionCount                : 32
TotalVRAM                     : 1000000000
AvailableVRAM                 : 1000000000
SupportsIncomingLiveMigration : False
MinPartitionVRAM              : 0
MaxPartitionVRAM              : 1000000000
OptimalPartitionVRAM          : 1000000000
TotalEncode                   : 18446744073709551615
AvailableEncode               : 18446744073709551615
MinPartitionEncode            : 0
MaxPartitionEncode            : 18446744073709551615
OptimalPartitionEncode        : 18446744073709551615
TotalDecode                   : 1000000000
AvailableDecode               : 1000000000
MinPartitionDecode            : 0
MaxPartitionDecode            : 1000000000
OptimalPartitionDecode        : 1000000000
TotalCompute                  : 1000000000
AvailableCompute              : 1000000000
MinPartitionCompute           : 0
MaxPartitionCompute           : 1000000000
OptimalPartitionCompute       : 1000000000
CimSession                    : CimSession: .
ComputerName                  : NEPTUNE
IsDeleted                     : False

即使只装了一块GPU,此处也可能会返会多个对象,这里复制包含上步"DEV_64A0"字样的完整设备路径,记得去掉换行

后面需要频繁使用虚拟机名称,这里先存入变量方法后续设置

$vm = "canary"
$gpu_path = "\\?\PCI#VEN_8086&DEV_64A0&SUBSYS_1E131043&REV_04#3&11583659&0&10#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV"

添加虚拟机到gpu分区

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
Set-VM -GuestControlledCacheTypes $true -VMName $vm
Set-VM -LowMemoryMappedIoSpace 1Gb -VMName $vm
Set-VM -HighMemoryMappedIoSpace 32GB  -VMName $vm 

HighMemoryMappedIoSpace不建议设置的过小,否则可能会出问题

最后一步,复制驱动文件到虚拟机

复制物理机C:\Windows\System32\DriverStore\FileRepository
到虚拟机C:\Windows\System32\HostDriverStore\FileRepository

HostDriverStore文件夹需要手动创建

完成后重启虚拟机,应该就可以在任务管理器里看见gpu了

全能废物