Hyper-V

如何讓 Hyper-V 虛擬機使用宿主機顯卡資源

2024 年 10 月 7 日

1. 宿主機安裝顯卡驅動

下載Nvidia Expirence,登入後下載驅動程式照著步驟一直安裝即可。

2. 取消 checkpoint

3. (系統管理員)執行PowerShell命令

設定虛擬機”Windows 10″使用顯示卡資源,這裡的Windows 10是我的虛擬機器名稱,你可以在你的Hyper-V管理器查看

Set VMGPU.ps1

$vm = "Windows 10"
Add-VMGpuPartitionAdapter -VMName $vm
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

4. 複製宿主機顯示卡驅動程式到虛擬機

右檢點擊開始->裝置管理員->雙擊顯示卡適配器->驅動程式分頁->驅動程式細節

之後到以下路徑中尋找上圖紅框中宿主機的對應資料夾:C:\Windows\System32\DriverStore\FileRepository

找到之後複製到虛擬機的路徑:C:\Windows\System32\HostDriverStore\FileRepository\

5. 複製nvapi64.dll

從宿主機的 C:\Windows\System32 複製到虛擬機的 C:\Windows\System32

重開虛擬機之後就OK了

6. 備註

這篇文章的做法只能讓一台虛擬機使用顯卡資源,如果要讓多台虛擬機同時使用顯卡資源,請再自行查詢資料。

這裡提供另外一個做法,就是取消目前使用顯卡資源的虛擬機設定,再設定到另外一台虛擬機上,方法如下。

取消使用宿主機顯卡資源(請先將虛擬機關機再進行設定)

Unset VMGPU.ps1

$vm = "Windows 10"
Remove-VMGpuPartitionAdapter -VMName $vm
Set-VM -GuestControlledCacheTypes $false -VMName $vm
Set-VM -LowMemoryMappedIoSpace 512MB -VMName $vm  # 預設值為 512MB
Set-VM -HighMemoryMappedIoSpace 32GB -VMName $vm  # 預設值可能是 32GB,但根據需要調整

取消完成之後,再設定另外一台虛擬機即可。

7. 流程自動化

流程概述:

宿主機

  1. 以系統管理員執行powershell
  2. 切換到指令檔目錄
  3. 輸入暫時解除禁令指令
  4. 執行指令檔(設定使用宿主機資源/複製顯示卡驅動程式/複製nvapi.dll)
  5. 將顯示卡驅動程式、nvapi.dll複製到虛擬機

虛擬機

  1. 以系統管理員執行powershell
  2. 切換到指令檔目錄
  3. 輸入暫時解除禁令指令
  4. 執行指令檔(貼上顯示卡驅動程式/貼上nvapi.dll)

可以把這些常用的動作整理成如下的資料夾結構:

宿主機

在【3. (系統管理員)執行PowerShell命令】的步驟,可以透過powershell來完成流程自動化,只要將指令透過記事本儲存成.ps1的檔案儲存即可:

儲存好的檔案需要系統管理員權限才能執行,所以請在windows搜尋欄搜尋powershell,並選擇以系統管理員權限執行

接著切換到儲存指令檔的目錄,記得要將路徑用雙引號包起來,不然可能出錯

此時輸入set然後按下tab,應該就會跳出我們儲存的powershell指令

執行之後應該會遇到禁止執行指令的錯誤

輸入

Set-ExecutionPolicy RemoteSigned -Scope Process

即可暫時解除禁令

再次執行指令,應該應該就不會有錯誤了(但是也沒有任何回饋),這樣就是完成設定了。

在【4. 複製宿主機顯示卡驅動程式到虛擬機】的步驟,也可以透過powershell來完成流程的自動化。

複製顯示卡驅動程式

因為我觀察我的顯示卡驅動程式資料夾都是nv_dispi.inf_amd64_作為開頭,所以我就依照這個規則來寫一個自動複製所有包含這個文字開頭的資料夾

Copy All Graphic Card Driver.ps1

# 定義來源路徑和目標路徑
$sourcePath = "C:\Windows\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_*"
$destinationPath = Get-Location

# 複製資料夾
Copy-Item -Path $sourcePath -Destination $destinationPath -Recurse

Copy nvapi64.dll

# 複製 nvapi64.dll 從 C:\Windows\System32 到當前目錄
Copy-Item -Path "C:\Windows\System32\nvapi64.dll" -Destination . -Force

虛擬機

把宿主機的顯示卡驅動程式資料夾、nvapi64.dll複製到虛擬機後,用系統管理員powershell執行以下指令。(記得解除限制)

Paste All Graphic Card Driver.ps1

# 定義來源路徑和目標路徑
$sourcePath = ".\nv_dispi.inf_amd64_*"
$destinationPath = "C:\Windows\System32\HostDriverStore\FileRepository"

# 檢查目標資料夾是否存在,若不存在則建立
if (-not (Test-Path -Path $destinationPath)) {
    New-Item -ItemType Directory -Force -Path $destinationPath
}

# 複製資料夾到目標路徑
Copy-Item -Path $sourcePath -Destination $destinationPath -Recurse

# 使用檔案總管打開目標資料夾
Start-Process explorer.exe $destinationPath

Paste nvapi64

# 複製當前目錄下的 nvapi64.dll 到 C:\Windows\System32
Copy-Item -Path ".\nvapi64.dll" -Destination "C:\Windows\System32" -Force

參考資料:

1. 【真强】 Hyper-V 虚拟机安装 及显卡直通教程,vGPU虚拟化,用途广,速度快!秒开应用!| 零度解说

2.ChatGPT

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *