Hyper-V GPU 直通技術:初學者必備指南

在某些情況下,您可能需要在虛擬機器上使用顯示卡(內含 GPU),此裝置亦稱為圖形適配器或顯示適配器。然而,在 Hyper-V 虛擬機器中使用模擬顯示卡,對於需要運用 OpenGL、Direct3D、CUDA 及其他硬體特點而言,可能無法滿足需求。 所幸,透過 Hyper-V 的 GPU 直通特點,您可以將實體顯示卡連接至 Hyper-V 主機上的虛擬機器。

NAKIVO Hyper-V 備份解決方案

NAKIVO Hyper-V 備份解決方案

適用於 Hyper-V 的無代理程式、應用程式感知的備份解決方案。具備防勒索軟體防護功能、可從備份立即啟動虛擬機器,並支援其他虛擬/實體平台等更多功能。

什麼是 GPU 直通?

GPU 直通是一項特點,可讓您將安裝在實體主機上的實體顯示卡直接連接到虛擬機器,無需進行模擬。因此,虛擬機器可以直接使用實體顯示卡。

預設情況下,Hyper-V 虛擬機器會使用模擬的顯示卡,該顯示卡依賴於 Hyper-V 主機的 CPU。然而,此方法僅能讓使用者執行最基本的任務,對於需要更高顯示效能的任務而言則顯得不足。

註: GPU 可以整合於主機板的晶片組中,或整合於中央處理器(CPU)內,亦稱為處理器(針對最新一代的 Intel 處理器及其相關架構)。高性能 GPU 則是一顆安裝在獨立顯示卡上的晶片,透過 PCI Express 介面(PCIe)連接至主機板。

Hyper-V 中 GPU 直通技術的主要優點

透過 GPU 直通功能連接至 Hyper-V 虛擬機器的實體顯示卡,可供家庭用戶、開發人員、設計師及其他使用者在特定情境下使用。最常見的情境包括:

  • 執行涉及大量圖形運算的工作負載的應用程式(例如:平面設計、3D 建模、AutoCAD 繪圖、工程與計算、遊戲設計及遊戲開發等)。採用硬體加速渲染技術。
  • 執行具備硬體加速特點的遊戲。若未安裝實體顯示卡,部分遊戲可能無法運作。
  • 使用 GPU 執行機器學習(ML)和人工智慧(AI)應用程式。

GPU 直通模式的優點包括:

  • Better graphics performance 虛擬機器可直接存取顯示卡,以執行圖形密集型應用程式或遊戲。影片播放更流暢。支援硬體加速圖形處理及最新 API。
  • Flexible utilization of hardware resources. 在無法使用專用工作站的情況下,利用單一 Hyper-V 主機來執行多台虛擬機器,以處理不均衡且需大量圖形運算的任務。
  • Cost-efficiency. 在某些情況下,GPU 直通傳輸可節省成本,特別是在硬體資源的運用方面。此特點亦可應用於虛擬桌面基礎架構(VDI)。
  • Security. 其安全性優勢與一般虛擬化技術相似。若虛擬機器中的漏洞遭到利用,由於虛擬機器運行於隔離環境中,因此有更多機會緩解問題。若發生嚴重問題,亦可透過備份快速還原虛擬機器。

需求

要在 Hyper-V 主機上為虛擬機器設定 GPU 直通特點,必須符合特定的硬體和軟體需求。並非所有顯示卡都能用於此特點。

GPU 直通功能的硬體規格

  • Hyper-V 主機上的 CPU 必須支援 Intel-VT 或 AMD-V 虛擬化特點。您必須在 Hyper-V 主機的 UEFI/BIOS 設定中,為您的處理器啟用相應的虛擬化特點。
  • Hyper-V 主機上的 CPU 必須支援輸入/輸出記憶體管理單元 (IOMMU)。此特點是實現 PCI 直通(包括顯示卡或 GPU 直通)的必要條件。
  • 配備支援 GPU 虛擬化技術(例如 NVIDIA GRID 或 AMD MxGPU(多使用者 GPU))之 GPU 的顯示卡。這些技術因供應商而異。使用伺服器級硬體可提高成功率。不支援使用 PCI 中斷(INTx)的舊式裝置。
  • 應支援並啟用 SR-IOV(單根輸入/輸出虛擬化),以避免發生錯誤。

Hyper-V 直通功能的軟體需求

  • Windows Server 2016 或更新版本的 Windows Server(建議使用)
  • Windows 10 或 Windows 11
  • 必須在 Windows 中啟用 Hyper-V 角色(特點)。
  • 若要使用 GPU 直通功能,必須在 Hyper-V 主機和虛擬機器 (VM) 客體上安裝最新的顯示卡驅動程式。
  • 僅限第二代 Hyper-V 虛擬機器可用於搭配 DDA 的 GPU 直通功能。

限制事項與不支援的設定

請注意以下設定: 支援使用 GPU 直通:

  • 使用 Hyper-V 動態記憶體(即根據需求為虛擬機器分配與釋放 RAM 的特點)的虛擬機器,無法使用 GPU 直通功能。
  • GPU 直通功能僅適用於最高階的 Windows 版本,例如 Windows Server 2019 Datacenter。
  • 如果 Hyper-V 主機上部署了 Windows Subsystem for Linux,則虛擬機器可能會發生代碼為 43 的錯誤。
  • 不支援叢集特點,例如高可用性與虛擬機器即時遷移。
  • 不支援透過虛擬機器檢查點進行儲存與還原。

設定 GPU 直通:您需要了解的事項

請注意,GPU 直通配置可能比大多數常規的虛擬機器配置任務更為複雜。在使用 GPU 直通時,虛擬環境的可擴展性不如使用預設的顯示卡模擬方法來得高。 您無法在 Hyper-V 主機之間遷移使用 GPU 直通功能的虛擬機器,因為這些虛擬機器已綁定至主機上安裝的實體顯示卡。

在 Windows Server 2016 之前,RemoteFX 特點用於將 GPU 直通至虛擬機器。自 Windows Server 2019 及 Windows 10 版本 1809 起,RemoteFX 特點已 已不再提供,且僅能透過 Hyper-V 直接裝置指派 (DDA) 來傳遞顯示卡,這與其他任何 PCI/PCIe 裝置(包括 NVMe 儲存裝置)的處理方式相同。DDA 相當於 VMware 的 PCI 直通功能。

RemoteFX 是 RDP(Microsoft 遠端顯示協定)的一項擴充功能,用於將(連接至主機的)USB 裝置連接到虛擬機器。相應地,RemoteFX vGPU 則用於顯示卡。 RemoteFX 允許單一 GPU 供多個虛擬機器共用,而這在"獨立裝置指派"中是不可能實現的。 此外,RemoteFX 將每台虛擬機的專用視訊記憶體限制為 1 GB,且最高幀率 (FPS) 為 30。相較之下,DDA 並無此類視訊記憶體限制,且幀率可設定為 60。

若您使用 Windows Server 2016 Datacenter 或其他曾支援 RemoteFX 的 Windows 版本與發行版,您可以安裝一個 Windows 更新 以徹底從 Hyper-V 中移除此特點,並避免任何潛在的安全漏洞。微軟的官方說法是,移除 RemoteFX 是為了避免 Hyper-V 的架構性漏洞。當無法為每台虛擬機器分配專用的實體顯示卡時,RemoteFX 對於高密度虛擬環境而言曾是極具吸引力的解決方案。 請注意,DDA 僅適用於 Windows Server 版本(不適用於客戶端版本,例如 Windows 10)。

在 PowerShell 中進行 GPU 分割雖可作為客戶端 Windows 版本的解決方案,但將視訊驅動程式從主機作業系統複製至客體作業系統(且該客體作業系統必須與主機作業系統相同)的過程相當棘手。此外,必須使用第二代虛擬機器,且在此情況下,顯示卡必須支援 GPU 分割功能。

在 Hyper-V 中設定 GPU 直通功能

請依照以下步驟準備環境並設定 Hyper-V GPU 直通功能。

準備設定 GPU 直通功能

  1. 請確認您的硬體和軟體支援 GPU 虛擬化。
  2. 請在 Hyper-V 主機的 UEFI/BIOS 中,為您的 CPU 啟用 Intel VT-d 或 AMD-V 虛擬化特點。
  3. 啟用 IOMMU。在不同主機板上,若 UEFI/BIOS 版本各異,啟用 IOMMU 的設定方式可能有所不同。有時,此設定可能位於北橋配置中。或者,當您啟用 Intel VT-d 或 AMD-V 時,IOMMU 也會一併啟用。請在 UEFI/BIOS 中檢查名為"記憶體重新映射"的特點。

    您可以透過 PowerShell 指令(以系統管理員身分執行)檢查 Hyper-V 主機是否已啟用 IOMMU:

    (Get-VMHost).IovSupport; (Get-VMHost).IovSupportReasons

    True – 啟用;False – 停用。

  4. 請移除所有即將設定為使用 GPU 直通功能的虛擬機器所屬的檢查點。

    如果虛擬機器已啟用自動檢查點,您可以使用以下 PowerShell 指令將其停用:

    Set-VM -Name VMName -AutomaticStopAction TurnOff

Windows Server 中的 GPU 直通功能

  1. 若要為 32 位元 (32 位元作業系統為 3 GB) MIMO 空間設定快取和限制,請以系統管理員身分執行此 PowerShell 指令:

    Set-VM -Name VMName -GuestControlledCacheTypes $True -LowMemoryMappedIoSpace 3Gb -HighMemoryMappedIoSpace 33280Mb

    或者,您也可以使用三個獨立的指令:

    Set-VM -GuestControlledCacheTypes $true -VMName YourVMName

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName YourVMName

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName YourVMName

    這些限制定義了虛擬機器可存取的裝置記憶體範圍。您可以使用一個 機器設定檔腳本 請參照 Microsoft 的建議設定最精確的 MIMO 限制值。不同視訊適配器的最佳值可能有所不同。若在啟動虛擬機器時收到資源不足的提示訊息,應關閉該虛擬機器並修改這些數值。若 MIMO 空間大於 32 位元,則需使用 33280 MB。

  2. 請檢查 PCI Express 裝置的實體位址(即裝置的位置路徑),這正是您想要進行直通傳輸的目標顯示卡。

    這可以在"裝置管理員"中完成。您可以透過執行 devmgmt.msc 指令。在"裝置管理員"中:

    • 在"顯示卡"區段中,右鍵點擊所需的顯示卡,然後按下 Properties 在右鍵選單中。
    • 請選擇 Details 適配器屬性視窗中的"分頁"。
    • 請選擇 Location paths 在下拉式選單中選取該屬性,並複製其值(每台電腦的值可能不同)。

      Viewing a location path of a video card

    您也可以使用 PowerShell 來識別裝置的位置路徑:

    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*" })"; }

    輸出應包含類似以下的字串:

    ‘PCIROOT(0)#PCI(0300)#PCI(0000)’

    Identifying the location path of the video card in PowerShell

  3. 請在"裝置管理員"中停用這張顯示卡。右鍵點擊顯示卡,然後按下 Disable device 在右鍵選單中。

    Disabling a video card in a Device Manager

  4. 在 PowerShell 中卸載已停用的顯示卡:

    Dismount-VmHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" -Force

    地點:

    -Force 當未安裝分割區驅動程式(可選)時,必須安裝此驅動程式。這並非用於客體作業系統中安裝的顯示卡驅動程式。有時,裝置供應商可能會為某個裝置提供此安全緩解驅動程式。若您打算安裝此驅動程式,應在從主機分割區卸載 PCI Express 裝置之前完成安裝。

    此命令中使用的位置僅供說明之用,您應使用您自己的具體位置。

  5. 執行此指令,將此顯示卡透過 DDA 功能指派給具備 GPU 直通功能的虛擬機器:

    Add-VMAssignableDevice -VMName VMName -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)"

  6. 啟動虛擬機器,並確認 Windows 虛擬機器的"裝置管理員"中是否顯示實體顯示卡,以及名為"Microsoft Hyper-V 顯示卡"的預設模擬顯示卡。
  7. 在虛擬機的客體作業系統上安裝顯示卡驅動程式。您可以從 NVIDIA 或 AMD 的官方網站下載顯示卡驅動程式。
  8. 若要將顯示卡從虛擬機器中移除,請先停止虛擬機器,然後在主機上執行以下指令:

    Remove-VMAssignableDevice -VMName YourVMName -LocationPath $locationPath

    接著,執行以下指令,將顯示卡重新連接到 Hyper-V 主機:

    Mount-VMHostAssignableDevice -LocationPath $locationPath

Windows 10 中的設定

在 Windows 10 和 Windows 11(自 Windows 10 版本 1903 起)等客戶端 Windows 版本上,設定 Hyper-V GPU 直通的工作流程有所不同,可透過 GPU 分割方法來實現:

  1. 請使用 PowerShell 指令,檢查您的顯示卡是否在 Windows 10 中支援 GPU 分割功能:

    Get-VMPartitionableGpu

    在 Windows 11 中,該指令為:

    Get-VMHostPartitionableGpu

  2. 若要將 GPU 透過傳輸至虛擬機器,則 Add-VMGpuPartitionAdapter 使用 cmdlet。不過,您必須將圖形驅動程式從 Hyper-V 主機複製到虛擬機器。請注意,驅動程式版本必須相同。一個免費的 Easy-GPU-PV 由於此為一項較為複雜的程序,因此可使用此腳本來複製驅動程式。請將此腳本以 ZIP 檔案形式下載,並將 ZIP 壓縮檔的內容解壓縮至 Hyper-V 主機上的某個資料夾中。此腳本透過運用 Windows Subsystem for Linux (WSL2) 及 Windows Sandbox 的機制,可支援 GPU 半虛擬化功能。
  3. 以系統管理員身分開啟 PowerShell,並執行以下指令以啟用腳本執行:

    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

  4. 關閉虛擬機器。在已解壓縮下載腳本的資料夾中執行該腳本,將 Hyper-V 主機上的已安裝顯示卡驅動程式複製到虛擬機器,並在虛擬機器上安裝這些驅動程式:

    .Update-VMGpuPartitionDriver.ps1 -VMName YourVMName -GPUName "AUTO"

  5. 設定虛擬機器,使其準備好進行 GPU 直通與顯示卡關聯:

    Set-VM -VMName VMName -GuestControlledCacheTypes $true -LowMemoryMappedIoSpace 1Gb -HighMemoryMappedIoSpace 32Gb

    Add-VMGpuPartitionAdapter -VMName YourVMName

    • 若要在 Hyper-V 主機上更新顯示卡驅動程式,也必須更新虛擬機器上的顯示卡驅動程式。此時虛擬機器必須處於關機狀態。

      .Update-VMGpuPartitionDriver.ps1 -VMName YourVMName -GPUName "AUTO"

    • 若需從虛擬機器中移除顯示卡,您可以使用以下指令:

      Remove-VMGpuPartitionAdapter -VMName "YourVMName"

如果已成功將顯示卡連接至虛擬機器,您應能在虛擬機器的"裝置管理員"中看到對應的顯示卡。您還將看到客體 Windows 桌面主題的視覺效果,例如透明度等。

請注意,即使已設定 GPU 直通,某些遊戲和應用程式仍可能無法執行。當應用程式強制對顯示卡進行相容性檢查時,可能會發生這種情況。 客體作業系統中關於已連接顯示卡的資訊,與主機作業系統上的資訊有所不同。某些應用程式會執行"在虛擬機器中運行"的檢查。

若使用 OpenGL 的應用程式在虛擬機器中無法運作,請安裝 OpenGL 相容性套件 在某些使用情境下可能有所幫助。

在 Windows 10 和 Windows 11 中使用 GPU 分割方法時,裝置管理員中顯示的顯示卡型號會與 Hyper-V 主機上顯示的實體顯示卡型號不同。您會看到此裝置專用的 Microsoft 驅動程式。虛擬機器中無法使用供應商專屬工具,例如 NVIDIA 控制台(或 AMD 控制台)。

您可能會遇到的另一個問題是,若在未從 RDP 工作階段中斷開連線的情況下關閉 RDP 連線。在此情況下,所有 GPU 記憶體可能會被斷開,所有使用 GPU 的應用程式都會通知您無法存取視訊記憶體。這些應用程式將在此情況下停止運作,且透過 RDP 重新連線無法解決此問題。您必須重新啟動使用 GPU 的應用程式。

解決 GPU 直通問題

如果您已設定 Hyper-V GPU 直通功能,並將顯示卡連接至虛擬機器,但顯示卡無法正常運作,請檢查以下事項:

  • 請確認已安裝最新的顯示卡驅動程式,且沒有任何與驅動程式相關的錯誤。開啟"裝置管理員"並檢查裝置與驅動程式的狀態。您必須從官方供應商網站(NVIDIA、AMD、Intel)下載並安裝驅動程式,切勿透過 Windows Update 進行安裝。
  • 請確保您已為虛擬機器分配足夠的 MIMO 空間。
  • 請確認您的顯示卡供應商是否支援 GPU 直通特點。並非所有客戶系列的顯示卡都能支援此特點。供應商通常只會為高階顯示卡啟用 GPU 直通特點。
  • 在虛擬機器中運行的應用程式必須支援您的顯示卡及其驅動程式,才能正常運作。
  • 啟用一項群組原則,以便透過遠端桌面連線至虛擬機器時使用 GPU:

    Computer ConfigurationAdministrator TemplatesWindows ComponentsRemote Desktop ServicesRemote Desktop Session HostRemote Session EnvironmentUse hardware graphics adapters for all Remote Desktop Services sessions

    將群組原則值設定為 Enabled.

  • 如果您看到類似"T操作失敗,因為找不到該物件” 或 錯誤 12,請嘗試在

    HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsHyperV

    其數值為:

    RequireSecureDeviceAssignment = 0 (REG_DWORD)

    RequireSupportedDeviceAssignment = 0 (REG_DWORD)

    您可以透過 PowerShell 指令設定這些值:

    Set-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindowsHyperV" -Name "RequireSecureDeviceAssignment" -Type DWORD -Value 0 -Force

    Set-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindowsHyperV" -Name "RequireSupportedDeviceAssignment" -Type DWORD -Value 0 -Force

  • 停用虛擬機器內繪圖驅動程式的虛擬化管理程式檢查。此設定可於 Enterprise Windows 驅動程式套件 (WDK)。
    • 將 WDK ISO 檔案掛載至虛擬機的虛擬 DVD 光碟機。
    • 執行 E:LaunchBuildEnv.cmd (其中 E: (這是虛擬機器中的虛擬 DVD 光碟機),然後執行 powershell 指令。
    • 前往存放該檔案的目錄 Remove-HypervisorChecks.ps1 腳本的位置。
    • 執行以下指令,以移除視訊驅動程式的虛擬化平台檢查(以 NVIDIA 為例):

      ./Remove-HypervisorChecks.ps1 -Nvidia -DriverPath "C:path-to-driverpackage.exe"

    • 請等待腳本執行完成。
    • 複製已準備好的驅動程式(一個 patched-driver.zip 將檔案) 傳送至虛擬機器,在虛擬機器上啟用測試模式,並在客體作業系統中安裝驅動程式。
  • 如果您遇到 錯誤 43, 使用虛擬機器 GPU 直通時,請確保 GPU 與音訊 PCI 匯流排(NVIDIA 顯示卡可能也具備音訊特點)位於同一條匯流排上。
  • 若在執行該指令時看到以下錯誤訊息:

    Update-VMGpuPartitionDriver.ps1 -VMName "YourVMName" -GPUName "AUTO"

    此錯誤可能是由於虛擬硬碟上存在多個分割區(卷)所導致。請嘗試為非系統(OS)分割區設定隱藏屬性,或在複製所需資料後暫時刪除這些分割區。另一種做法是在 PowerShell 腳本或命令中明確指定所需的系統(OS)分割區。

結論

在 Hyper-V 主機上使用具備 GPU 直通功能的虛擬機器,在某些使用情境下可能是最佳解決方案,但請注意其限制。若要在虛擬機器上使用獨立顯示卡,通常建議採用伺服器級硬體和 Windows Server 作業系統。開始設定前,請先確認支援的軟體和硬體。別忘了備份 Hyper-V 虛擬機器,以免在為虛擬機器設定顯示卡時發生問題,導致資料遺失或浪費時間。

試試看 NAKIVO Backup & Replication

試試看 NAKIVO Backup & Replication

立即申請免費試用,全面體驗本解決方案的所有資料保護特點。15 天免費試用。無功能或容量限制。無需提供信用卡資訊。

People also read