必须满足严格前提:BIOS启用VT-d/AMD-Vi和VT-x/AMD-V,CPU与GPU兼容DDA(如NVIDIA RTX 20/30/40或AMD RDNA2+),系统为Win11专业版22H2+或Server 2022+,虚拟机为第二代且完全关机,禁用动态内存、检查点及安全启动。

要在Windows中让Hyper-V虚拟机直接使用物理主机的独立显卡,必须绕过宿主机显卡驱动层,将GPU硬件资源以分区或直通方式交付给虚拟机——这要求系统满足严格前提,且操作路径因目标用途(共享使用 or 独占直通)而完全不同。
确认物理GPU是否支持虚拟化
打开管理员权限的PowerShell,执行命令:
Get-VMHostPartitionableGpu
若返回空结果,说明当前GPU不被识别为可分区设备。此时需检查:显卡驱动是否为NVIDIA Studio驱动或AMD Adrenalin Enterprise版;WDDM版本是否≥2.7(运行dxdiag查看);操作系统是否为Windows 11 22H2及以上或Windows Server 2022+。【禁用微软基本显示适配器后重装官方驱动是常见解决路径】
若命令返回设备列表,记下其中Name字段完整值(形如\?PCI#VEN_10DE&DEV_2782#...),后续绑定必需。
启用GPU分区(vGPU)并分配显存
此方法允许多台虚拟机共享同一块物理GPU,宿主机仍可正常使用桌面。
第一步:关闭目标虚拟机(必须是第二代虚拟机,且处于完全关机状态,非暂停或保存)。
第二步:在管理员PowerShell中依次执行以下命令(将YourVMName替换为实际虚拟机名):
Set-VM -GuestControlledCacheTypes $true -VMName YourVMName
Set-VM -LowMemoryMappedIoSpace 1GB -VMName YourVMName
Set-VM -HighMemoryMappedIoSpace 32GB -VMName YourVMName
第三步:添加GPU分区适配器:
Add-VMGpuPartitionAdapter -VMName YourVMName
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
第四步:绑定物理GPU设备路径并设定显存范围(单位字节)。例如分配8GB显存:
$gpu_path = "你的Name字段完整值"
Set-VMGpuPartitionAdapter -VMName YourVMName -InstancePath $gpu_path -MinPartitionVRAM 8589934592 -MaxPartitionVRAM 8589934592 -OptimalPartitionVRAM 8589934592
配置虚拟机内部驱动与环境
方法一:Windows虚拟机
从宿主机C:WindowsSystem32DriverStoreFileRepository下,找到对应显卡的驱动文件夹(名称含nv、amd或intel字样),复制整个文件夹到虚拟机相同路径;再将宿主机C:WindowsSystem32
vapi64.dll(N卡)或atig6txx.dll(A卡)复制到虚拟机System32目录。重启虚拟机后,在设备管理器中应出现“Microsoft Virtual GPU”设备。
方法二:Linux虚拟机(如Ubuntu 22.04)
需在宿主机启用WSL2并安装nvidia-container-toolkit;虚拟机内安装nvidia-driver-535-server及nvidia-utils-535;通过systemd服务注入GPU设备节点,命令为:sudo modprobe nvidia_uvm nvidia_drm nvidia_modeset。
【虚拟机设置中必须禁用检查点功能,否则GPU分区将无法激活】
验证GPU是否生效
启动虚拟机,在Windows虚拟机中打开任务管理器→性能选项卡,应可见“GPU 0 (Microsoft Virtual GPU)”;运行dxdiag,显示“已启用硬件加速”且D3D功能正常。
在Linux虚拟机中执行nvidia-smi,应列出分区后的显存容量与计算能力,且无“Failed to initialize NVML”错误。
至此,虚拟机已获得物理GPU的虚拟化资源。










