双显卡笔记本 HyperV GPU虚拟化 踩坑记录

正文之前

本文是针对特定情况(笔记本双显卡)来配置的,如果你只有一张显卡,那大可不必继续阅读下去,可以直接看最底下的相关链接找一个讲得更详细的文章。

如有可能,请尽可能使用自动化脚本 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 准备工作

  1. Windows Features 中启用 HyperV
  2. 下载虚拟机镜像,下载什么镜像取决你自己的需求,可以使用 Rufus 来下镜像,如下图
Rufus 下载 windows iso

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


相关文章

https://jasper1024.com/jasper/ioubn7891wc/

评论

  1. NewBayStanly
    3年前
    2022-5-02 6:04:36

    404和bing都找全了,就你一个muti GPU指定独显是成功的,可惜我宿主机是21H2,命令缺失指定不了独显

    • 废纸时雨 博主
      3年前
      2022-5-02 12:47:56

      缺失了啥命令呢
      话说我也是找了好多篇教程经验才总结出一个能用的。。

      • NewBayStanly
        3年前
        2022-5-04 2:35:31

        Add-VMGpuPartitionAdapter 缺少 -InstancePath 参数

    • SirnoChan
      3年前
      2022-5-19 23:14:14

      能指定独显,只不过不能选择,只能是Get-VMPartitionableGpu命令输出结果中的第一张显卡。

      • AT TA
        2月前
        2024-10-10 10:45:23

        感谢指点思路,宿主机禁用核显后再如教程运行指令后,独显成功直通,不需要“ $vm -InstancePath $gpu_path”指令了

  2. fujie
    2年前
    2023-1-14 2:19:10

    宿主机为win11 22h2 虚拟机也使用win11时可以成功直通,但是win11开机占内存太大了,尝试win10 ltsc版本 无法直通成功,设备管理器始终显示感叹号 【表情】

    • fujie
      2年前
      2023-1-14 2:37:28

      尴尬,是我操作错误 忘记新建FileRepository这个文件夹里。。。太蠢了

  3. yeson
    7月前
    2024-4-22 15:15:43

    两个显卡只显示一个 而且做完全步骤 进入hyper-V 的ubuntu 依旧没有nvidia 的显卡

    • 杜甫
      4月前
      2024-7-26 22:45:33

      俺也一样

  4. aaa
    4月前
    2024-7-26 15:40:17

    大佬,我这发生了这个错误,我windows版本是win11 的企业多会话版
    lper-V管理器
    尝试启动选定的虚拟机时出错。
    “甲”无法启动。
    医形处理器分区(实例标识
    AAEO44D15-6579-4E71-BD08-0409661572F0错误”系统资源不足,无法光成请求的服务。
    “虚拟机”无法启动。(虚拟机ID95A07EC9-9A56 4DD9-8EA0-45D1284A8AA1)
    “算名称”图形处理器分区:无法完成资源保留,因为发生了错误系统资源不定,无法完成请求的服务。(02200705AA)。【字按机ID
    95A07EC9-9A56-4DD9-8E60-45D1284A8641]
    隐激详招信息(D)
    关闭(C)

  5. kanadeblisst
    3月前
    2024-9-14 15:51:02

    感谢,全网看了那么多文章,就你的成功了

  6. karakuri
    已编辑
    4周前
    2024-11-08 18:48:47

    成功了,宿主机没重启之前虚拟机里面还是3060。重启宿主机后,虚拟机里面又变成其他核显GPU了

    • karakuri
      3周前
      2024-11-09 8:32:39

      多试几次,全部问题已成功解决

  7. karakuri
    3周前
    2024-11-11 0:09:03

    我成功接入虚拟GPUv后,就不能用动态内存了是什么问题呢?他提示我GPUv和动态内存有冲突

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇