正文之前
本文是针对特定情况(笔记本双显卡)来配置的,如果你只有一张显卡,那大可不必继续阅读下去,可以直接看最底下的相关链接找一个讲得更详细的文章。
如有可能,请尽可能使用自动化脚本 https://github.com/jamesstringerparsec/Easy-GPU-PV
自动化脚本局限较高,比如要求宿主机和虚拟机为统一系统,笔记本显卡支持可能不完善,但好处是简单省事。
不过我用自动化脚本遇到了 PowerShell
权限不足的报错,是没有权限读取虚拟机磁盘中的系统目录,尝试给予权限无果后,决定手动配置。
配置
- 宿主机: Windows 11 Pro 22563.1
- 虚拟机: Windows 10 Pro 21H2
- 显卡: R7 5800H自带核显 + NVIDIA RTX 3070 Laptop GPU(不支持显卡直连)
效果图
个人需求,只将独显虚拟化了,此图为在虚拟机上跑甜甜圈的效果图。
Step0 准备工作
- 在
Windows Features
中启用HyperV
。 - 下载虚拟机镜像,下载什么镜像取决你自己的需求,可以使用
Rufus
来下镜像,如下图
Step1 安装虚拟机
这一步没什么要说的,看个人需求安装就行,记得关掉 Dynamic Memory
(我不知道为什么,但是所有的教程都把它关了)。
记录下你虚拟机的名称,这里我们假设它 $vm = 'win10'
,下文中所有提到虚拟机名称的地方,都会用 $vm
来替代。
Step2 配置显卡
以下所有 PowerShell
脚本建议在 Windows PowerShell ISE
中运行。
上文我提到过,由于我是双显卡设备,所以不能像其他文章一样直接添加显卡,默认可能会添加核显上去,这完全没法用嘛!所以需要指定显卡给它。
# get_gpu.ps1
Get-VMPartitionableGpu
运行它,然后你会看到所有符合条件的显卡,它没有告诉我显卡名称,只是给了一长串的Name, 那就一个个试过去嘛,当然记得从后往前试,这里记录下来 Name
,后面指定显卡要用。
# get_gpu.ps1 output
Name : \\?\PCI#VEN_10DE&DEV_249D&SUBSYS_128C1043&REV_A1#4&29f08f2d&0&0009#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV
接下来,就可以往虚拟机中添加显卡。
# set_vm.ps1
$vm = "win10"
$gpu_path = "\\?\PCI#VEN_10DE&DEV_249D&SUBSYS_128C1043&REV_A1#4&29f08f2d&0&0009#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV"
Remove-VMGpuPartitionAdapter -VMName $vm
Add-VMGpuPartitionAdapter -VMName $vm -InstancePath $gpu_path
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
代码的前两行,分别是虚拟机的名称和显卡的路径。第三行是移除已经添加的显卡,无视这行可能出现的报错(如果你之前没添加过显卡这里就会报错),这一步是确保没有显卡已经被添加进去了。 第四行是添加显卡,接下来的配置是抄来的,我看不懂( 没错。如果报错的话,考虑去其他地方抄点别的配置过来。
Step3 复制驱动
其他众多文档都只是说复制 nv_dispi.inf_amd64*
这个文件夹,但是我这里并没有这个文件夹,所以提供一个可能通用的方案。
win + r
输入 dxdiag
,点击 Save All Information
导出文件,然后在系统中打开文件,搜索你的显卡型号,再稍微往下一点的地方,可以找到
Driver Name: C:\WINDOWS\System32\DriverStore\FileRepository\nvamig.inf_amd64_ce72d4a089c320b0\nvldumdx.dll,C:\WINDOWS\System32\DriverStore\FileRepository\nvamig.inf_amd64_ce72d4a089c320b0\nvldumdx.dll,C:\WINDOWS\System32\DriverStore\FileRepository\nvamig.inf_amd64_ce72d4a089c320b0\nvldumdx.dll,C:\WINDOWS\System32\DriverStore\FileRepository\nvamig.inf_amd64_ce72d4a089c320b0\nvldumdx.dll
要做的是复制宿主机 C:\WINDOWS\System32\DriverStore\FileRepository\nvamig.inf_amd64_ce72d4a089c320b0
这个文件夹,到 虚拟机中的 C:\WINDOWS\System32\HostDriverStore\FileRepository
这里,注意虚拟机的HostDriverStore
文件夹可能需要自己创建。如果遇到复制权限不足的情况,可以先复制到虚拟机的桌面上,再从虚拟机的桌面复制进System32
。
接下来复制宿主机中的 C:\Windows\System32\nvapi64.dll
到虚拟机中的C:\Windows\System32
。重启虚拟机,然后就大功告成了(应该?
正文之后
Step2 和 Step3 可能可以颠倒顺序。如果想用此方式打游戏的话,可以试试Parsec
相关文章
404和bing都找全了,就你一个muti GPU指定独显是成功的,可惜我宿主机是21H2,命令缺失指定不了独显
缺失了啥命令呢
话说我也是找了好多篇教程经验才总结出一个能用的。。
Add-VMGpuPartitionAdapter 缺少 -InstancePath 参数
能指定独显,只不过不能选择,只能是
Get-VMPartitionableGpu
命令输出结果中的第一张显卡。感谢指点思路,宿主机禁用核显后再如教程运行指令后,独显成功直通,不需要“ $vm -InstancePath $gpu_path”指令了
宿主机为win11 22h2 虚拟机也使用win11时可以成功直通,但是win11开机占内存太大了,尝试win10 ltsc版本 无法直通成功,设备管理器始终显示感叹号 【表情】
尴尬,是我操作错误 忘记新建FileRepository这个文件夹里。。。太蠢了
两个显卡只显示一个 而且做完全步骤 进入hyper-V 的ubuntu 依旧没有nvidia 的显卡
俺也一样
大佬,我这发生了这个错误,我windows版本是win11 的企业多会话版
lper-V管理器
尝试启动选定的虚拟机时出错。
“甲”无法启动。
医形处理器分区(实例标识
AAEO44D15-6579-4E71-BD08-0409661572F0错误”系统资源不足,无法光成请求的服务。
“虚拟机”无法启动。(虚拟机ID95A07EC9-9A56 4DD9-8EA0-45D1284A8AA1)
“算名称”图形处理器分区:无法完成资源保留,因为发生了错误系统资源不定,无法完成请求的服务。(02200705AA)。【字按机ID
95A07EC9-9A56-4DD9-8E60-45D1284A8641]
隐激详招信息(D)
关闭(C)
感谢,全网看了那么多文章,就你的成功了
成功了,宿主机没重启之前虚拟机里面还是3060。重启宿主机后,虚拟机里面又变成其他核显GPU了
多试几次,全部问题已成功解决
我成功接入虚拟GPUv后,就不能用动态内存了是什么问题呢?他提示我GPUv和动态内存有冲突