將實體顯示卡連接到 Hyper-V 主機上的虛擬機器的指南
您可能需要虛擬機器中的顯示卡 (GPU) 來執行 OpenGL、Direct3D 和 CUDA 等任務。在這種情況下,我們通常使用模擬顯示卡,其效能不如專用GP。因此,在這篇文章中,我們將學習如何將實體顯示卡連接到主機上的虛擬機器。
如何讓我的 GPU 通過 Hyper-V?
若要將實體顯示卡連接到 Hyper-V 主機上的虛擬機,我們將使用GPU 直通。
GPU 直通是一項進階功能,可讓您將實體 GPU 指派給虛擬機器。此功能對於遊戲或 3D 渲染等需要高效能圖形的應用程式特別有用。在此設定中,虛擬機器可以直接存取實體圖形適配器,而無需模擬開銷,這可以顯著提高圖形效能。預設情況下,Hyper-V 中的虛擬機器使用模擬顯示卡,這可能不足以滿足要求較高的圖形任務。透過 GPU 直通,虛擬機器可以充分利用實體 GPU 的能力,使其能夠高效處理更密集的圖形工作負載。
GPU 直通的系統需求是什麼?
在我們繼續設定 GPU 直通之前,讓我們確保滿足以下先決條件。
硬體需求
- 您需要確保您的處理器支援Intel-VT或AMD-V 虛擬化。
- 對於 PCI 直通,您的處理器必須支援輸入輸出記憶體管理單元 (IOMMU)。
- 您的 GPU 必須支援 GPU 虛擬化技術,例如NVIDIA GRID 或 AMD MxGPU。這些技術特定於各個供應商。透過利用伺服器級硬體可以提高成功率。依賴 PCI 中斷 (INTx) 的舊裝置不相容。
- 最後,您的系統應該支援單一輸入/輸出虛擬化。
軟體需求:
- 作業系統: Windows Server 2016(或更高版本)或Windows 11/10。
- 特點:必須啟用 Hyper-V。
- VM Generation:虛擬機器應為第 2 代。
- 驅動程式:所有 GPU 驅動程式均應更新至最新版本。
GPU直通的限制:
如果要使用GPU Passthrough,必須避免以下配置。
- 您的虛擬機器不應使用動態記憶體。
- GPU 直通僅適用於最高 Windows 版本,例如 Windows Server 2019 Datacenter。
- 如果在 Hyper-V 主機上部署適用於 Linux 的 Windows 子系統,則可能會出現代碼 43 的 VM 錯誤。
- 不支援高可用性和即時虛擬機器遷移等叢集功能。
- 不支援使用 VM 檢查點儲存和復原。
滿足前面提到的要求後,我們就可以利用GPU Passthrough了。
將實體顯示卡連接到 Hyper-V 主機上的 VM
若要使用 GPU 直通將實體顯示卡連接到 Hyper-V 主機上的 VM,請依照下列步驟操作。
- 啟用 Intel-VT 或 AMD-V 虛擬化
- 配置您的電腦以進行 GPU 直通
- 為 Windows 11/10 設定 GPU 直通
- 為 Windows Server 設定 GPU 直通
讓我們詳細談談它們。
1]啟用Intel-VT或AMD-V虛擬化
正如先決條件中所提到的,我們的第一步應該是啟用硬體虛擬化。因此,如果您使用的是 Intel CPU,則應啟用 Intel-VT,而 AMD 用戶應啟用 AMD-V 虛擬化。
為此,請啟動至BIOS,前往“配置”>“虛擬化技術”,然後將其設置為“已啟用”,因為這些步驟是HP 獨有的,所以您可以轉到鏈接的帖子,了解如何為您的計算機啟用該功能。
2] 設定您的電腦進行 GPU 直通
接下來,我們需要為 GPU Passthrough 配置主機。如前所述,我們首先啟用硬體虛擬化。接下來,我們需要確保啟用 IOMMU 並停用自動檢查點。
因此,您可以查看有關啟用硬體虛擬化的連結指南來啟用 IOMMU,但它通常是預設啟用的。我們可以開啟 PowerShell 並執行以下查詢來檢查它是否已啟用。
(Get-VMHost).IovSupport; (Get-VMHost).IovSupportReasons
如果顯示“True”,則功能已啟用,您可以繼續下一個配置,但如果顯示“False”,則需要啟用此功能。
現在,繼續刪除虛擬機器的所有檢查點,然後使用以下命令將其停用。
Get-VM
Set-VM -Name NameOfVM -AutomaticStopAction TurnOff
注意:將變數 NameOfVM 替換為您可以透過執行上一個命令取得的虛擬機器的實際名稱。
3]為Windows 11/10設定GPU直通
首先,讓我們了解如何在 Windows 用戶端作業系統上啟用 GPU Passthrough。
您需要執行以下命令來檢查您的顯示卡是否支援 GPU Passthrough。
視窗11
Get-VMHostPartitionableGpu
Windows 10
Get-VMPartitionableGpu
接下來,我們需要將圖形驅動程式從主機用戶端複製到虛擬機器。為了簡化該過程,我們建議從github.com下載 ZIP 檔案並將其解壓縮到某個位置。
要執行此腳本,我們首先需要使用以下兩個命令允許腳本執行。
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
設定-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
運行命令後,您需要使用以下命令運行腳本。您可以在將虛擬機器新增至 GPU 直通之前和/或之後運行它
.\Update-VMGpuPartitionDriver.ps1 -VMName <VMNAME> -GPUName "AUTO"
現在,執行以下命令將您的 VM 新增至 GPU 直通。
Set-VM -VMName VMName -GuestControlledCacheTypes $true -LowMemoryMappedIoSpace 1Gb -HighMemoryMappedIoSpace 32Gb
Add-VMGpuPartitionAdapter -VMName <VMNAME>
若要刪除 GPU 分割區,請執行 – Remove-VMGpuPartitionAdapter -VMName <VMNAME>
。
4]為Windows Server設定GPU直通
如果您使用的是Windows Server,則需要在PowerShell的提升模式下執行以下命令來設定32位元(32位元作業系統為3 GB)MIMO空間的快取和限制。
Set-VM -Name VMNAME -GuestControlledCacheTypes $True -LowMemoryMappedIoSpace 3Gb -HighMemoryMappedIoSpace 33280Mb
這些限制定義了允許虛擬機器存取設備的記憶體。使用learn.microsoft.com中的電腦設定檔腳本來設定準確的 MIMO 限制。若虛擬機器顯示資源不足,請調整數值;大於 32 位元的 MIMO 空間需要 33280 MB。
接下來,我們需要檢查 PCI Express 裝置的位置。為此,請執行以下查詢。
Get-PnpDevice | Where-Object {$_.Present -eq $true} | Where-Object {$_.Class -eq "Display"}|select Name,InstanceId
和
Get-PnpDevice -Class Display | ForEach-Object { Write-Output "$($_.FriendlyName) has a device id of $($_.DeviceId) and is located at $($_ | Get-PnpDeviceProperty DEVPKEY_Device_LocationPaths | Select-Object -ExpandProperty Data | Where-Object { $_ -like "PCIROOT*"})"; }
您需要查看 GPU 所在的位置,它應該類似於PCIROOT(0)#PCI(0200)。
最後,請按照下面提到的步驟操作。
- 打開裝置管理員,展開顯示適配器,右鍵單擊顯示驅動程序,然後按一下停用裝置。
- 更改PCI位址後,執行下列命令卸載GPU驅動程式。
Dismount-VmHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0200)"-Force
- 修改PCI位址和虛擬機器名稱後,執行下列指令為虛擬機器指派GPU設備。
Add-VMAssignableDevice -VMName VMNAME -LocationPath "PCIROOT(0)#PCI(0200)"
- 開啟虛擬機器並在裝置管理員中檢查實體顯示卡。
- 從 NVIDIA 或 AMD 網站安裝顯示卡驅動程式。
如果要切換回主機,請關閉虛擬機器並在主機裝置上執行下列查詢。
Remove-VMAssignableDevice -VMName VMNAME -LocationPath $locationPath
然後,執行下列命令將顯示卡連接回 Hyper-V 主機。
Mount-VMHostAssignableDevice -LocationPath $locationPath
就是這樣!
發佈留言