分割 GPU 並指派給虛擬機器
本文內容
本文說明如何設定圖形處理器 (GPU) 分割區,並將分割區指派給虛擬機器 (VM)。 其提供相關指示說明如何透過 Windows Admin Center 和 PowerShell 設定 GPU 分割區計數、指派 GPU 分割區和取消指派 GPU 分割區。
若要佈建 GPU 分割功能,您必須完成下列步驟:
必要條件
開始使用 GPU 分割功能之前,需要考慮幾個需求和事項:
主機伺服器的必要條件
您的主機伺服器必須已安裝 Windows Server 2025。 如果即時移轉虛擬機器主機時需要叢集,則必須安裝 Windows Server 2025 Datacenter。
在您的伺服器上安裝並進行設定的 Hyper-V 角色。 請參閱在 Windows Server 上安裝 Hyper-V 角色 ,以瞭解如何開始使用。
在叢集的每個伺服器上,安裝相同品牌、型號和大小的實體 GPU 裝置。 在叢集中的實體伺服器上安裝 GPU 裝置時,請參閱 OEM 提供的文件。
依照 GPU IHD 提供的指示,在叢集的每個伺服器上安裝 GPU 驅動程式。 如需了解 NVIDIA GPU 驅動程式,請參閱 NVIDIA vGPU 文件 。
請確定叢集中每個伺服器的 BIOS 中有啟用虛擬化支援和 SR-IOV。 如果您無法識別 BIOS 中的正確設定,請聯絡您的系統廠商。
叢集主機必須具有輸入/輸出記憶體管理單元 (IOMMU) DMA 位追蹤功能的處理器。 例如,支援 Intel VT-D 或 AMD-Vi 的處理器。
注意
即時移轉已指派 GPU 分割區的虛擬機器時,Hyper-V 即時移轉會自動回復為使用 TCP/IP 和壓縮。 這會有提高主機 CPU 使用率的潛在影響。 此外,比起沒有附加 GPU 分割區的虛擬機器,即時移轉可能會花費更長的時間。
VM 的必要條件
Windows Admin Center 的必要條件
如果您使用 Windows Admin Center 來佈建 GPU 分割區,則必須安裝具有 GPU 擴充功能的最新版本 Windows Admin Center (版本 2.8.0 或更新版本)。 有關如何在 Windows Admin Center 中安裝 GPU 擴充功能的指示,請參閱安裝擴充功能 。
安裝擴充功能後,它會顯示在已安裝的擴充功能 索引標籤下,如下列螢幕擷取畫面所示。 確保 GPU 擴充功能的版本為 2.8.0 或更新版本。
PowerShell 的先決條件
如果您使用 PowerShell 來佈建 GPU 分割,您必須以系統管理員使用者身分執行所有 PowerShell 命令。
如需如何使用 PowerShell 命令進行 GPU 分割的詳細資訊,請參閱 Add-VMGpuPartitionAdapter 、Get-VMGpuPartitionAdapter 和 Remove-VMGpuPartitionAdapter 參考文件。
確認 GPU 驅動程式安裝
完成所有必要條件 後,您必須確認 GPU 驅動程式是否已安裝並可分割。
請依照下列步驟確認 GPU 驅動程式是否已安裝並且可以使用 Windows Admin Center 進行分割:
啟動 Windows Admin Center 並確保已安裝 GPU 擴充功能。
從頂端下拉功能表中選取 [叢集管理員] ,然後連接到您的叢集。
從 設定 功能表中,選取擴充功能 >GPU 。
GPU 頁面上的 GPU 索引標籤顯示所有伺服器的清單,以及每個伺服器上安裝的實體 GPU。
檢查所有伺服器的每個 GPU 的 [指派狀態 ] 資料行。 [指派狀態 ] 資料行可以有下列其中一個狀態:
可用於 DDA 指派 。 表示 GPU 可用於 DDA 指派。 您無法將它用於 GPU 分割。
已分割 。 表示 GPU 可分割。
半虛擬化 . 表示 GPU 已安裝分割驅動程式功能,但伺服器上的 SR-IOV 未啟用。
不可指派 。 表示 GPU 不可指派,因為它是較舊的 PCI 類型裝置或交換器連接埠。
只有當叢集中所有伺服器之 GPU 的 [指派狀態 ] 資料行顯示已分割 時,才可進一步繼續進行 GPU 分割工作流程。
請依照下列步驟確認 GPU 驅動程式是否已安裝並且可以使用 PowerShell 進行分割:
使用遠端桌面通訊協定 (RDP) 連線至叢集中的伺服器,然後執行下列 PowerShell 命令來確認是否已安裝 GPU 裝置:
Get-PnpDevice -FriendlyName "<device-friendly-name>"
例如,若要列出 NVIDIA A2 GPU 裝置,請輸入下列命令:
Get-PnpDevice -FriendlyName "NVIDIA A2"
以下是範例輸出:
Status Class FriendlyName
------ ----- ------------
OK Display NVIDIA A2
對於 NVIDIA GPU 裝置,您也可以執行 NVIDIA 系統管理介面 nvidia-smi
以列出主機伺服器上的 GPU。
如果已安裝了驅動程式,則會看到類似於以下範例的輸出:
nvidia-smi
以下是範例輸出:
Wed Nov 30 15:22:36 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 527.27 Driver Version: 527.27 CUDA Version: N/A |
|-------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA A2 WDDM | 00000000:65:00.0 Off | 0 |
| 0% 24C P8 5W / 60W | 15192MiB / 15356MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 NVIDIA A2 WDDM | 00000000:66:00.0 Off | 0 |
| 0% 24C P8 5W / 60W | 15192MiB / 15356MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
執行以下命令,透過列出支援 GPU 分割的 GPU,來確認主機伺服器是否已安裝所需的 GPU 配接器。
Get-VMHostPartitionableGpu | FL Name,ValidPartitionCounts
記下 命令輸出中的 Name 和 Get-VMHostPartitionableGpu
值。 您稍後會使用這些值來設定分割區計數。
以下是 Get-VMHostPartitionableGpu
命令的輸出範例,顯示此伺服器上安裝了兩個可分割 GPU 驅動程式。 第一個 GPU 的已設定數分割區計數為 16,而第二個 GPU 則為 4。
PS C:\Users> Get-VMHostPartitionableGPU
Name : \\?\PCI#VEN_10DE&DEV_25B6&SUBSYS_157E10DE&REV_A1#4&18416dc3&0&0000#{064092b3-625e-43bf-9eb5-dc845897dd59}
ValidPartitionCounts : {16, 8, 4, 2...}
Name : \\?\PCI#VEN_10DE&DEV_25B6&SUBSYS_157E10DE&REV_A1#4&5906f5e&0&0010#{064092b3-625e-43bf-9eb5-dc845897dd59}
ValidPartitionCounts : {16, 8, 4, 2...}
每個可分割的 GPU 都隨附一組有效的分割區計數,由其 OEM 預先定義。 您無法定義 GPU 可以擁有的分割區數目。 不過,您可以將分割區計數設定為一組受支援的分割區計數內的任何有效計數。
依照下列步驟,透過 Windows Admin Center 設定分割區計數:
選取 [GPU 分割區 ] 索引標籤以設定分割區計數。 您也可以使用此索引標籤,將分割區指派給 VM,並從 VM 取消指派分割區。
注意
如果您的叢集中沒有可用的可分割 GPU,或未安裝正確的 GPU 分割驅動程式,則 [GPU 分割區] 索引標籤標會顯示下列訊息:
找不到可分割的 GPU。 請檢查您的 GPU 是否具有正確的 GPU-P 驅動程式才能繼續。
選擇 GPU 或 GPU 分割區,以在頁面底部區段的所選項目詳細資料 下顯示其詳細資料。 例如,如果您選取 GPU,它會顯示 GPU 名稱、GPU 識別碼、可用的編碼器和解碼器、可用的 VRAM、有效的分割區計數,以及目前的分割區計數。 如果您選取 GPU 分割區,則會顯示分割區識別碼、VM 識別碼、執行個體路徑、分割區 VRAM、分割區編碼,以及分割區解碼。
選取設定分割區計數 」。
[定 GPU 上的分割區計數 ] 頁面隨即顯示。 針對每個伺服器,它顯示其上安裝的 GPU 裝置。
選取一組同質 GPU。 一組同質 GPU 是具有相同大小、製造商、型號和分割區數目的 GPU。 預設情況下,Windows Admin Center 如果偵測到一組同質 GPU,則會自動選取一組同質 GPU,如下列螢幕擷取畫面所示:
根據您所做的選擇,您可能會看到警告或錯誤:
Warning。 如果您從一組同質 GPU 中取消選取一或多個 GPU,Windows Admin Center 會發出警告,但不會阻止您繼續進行。 警告文字指出您並未選取所有 GPU,因此可能會導致不同的分割區計數,而這不是建議的做法。
Warning。 如果並非所有伺服器中的所有 GPU 都有相同的設定,Windows Admin Center 會發出警告。 您必須手動選取具有相同設定的 GPU,才能繼續進行。
Error。 如果您選擇具有不同設定的 GPU,Windows Admin Center 會顯示錯誤,並且不允許您繼續進行。
Error。 如果您選取已指派給 VM 的 GPU 分割區,Windows Admin Center 會顯示錯誤,並且不允許您繼續進行。 您必須先從 VM 取消指派分割區,然後再繼續進行。 請參閱從 VM 取消指派分割區 。
選取一組同質 GPU 之後,請從 [分割區數目 ] 下拉式清單中選取分割區計數。 此清單會自動填入 GPU 製造商所設定的分割區計數。 清單中顯示的計數可能會根據您選取的 GPU 類型而有所不同。
一旦您選取不同的分割區計數,下拉清單下方就會出現工具提示,其中動態顯示每個分割區獲得的 VRAM 大小。 例如,如果 GPU 中 16 個分割區的總 VRAM 為 16 GB,則將分割區計數從 16 變更為 8,會為每個分割區指派 1.85 GB 的 VRAM。
選取設定分割區計數 」。
設定分割區計數後,Windows Admin Center 會通知您分割區計數已成功設定,並再次顯示 [GPU 分割區 ] 索引標籤。 您可以在 [分割區計數 ] 資料行底下看到 GPU 分割區的新分割區計數。
依照下列步驟在 PowerShell 中設定 GPU 分割區計數:
注意
使用 PowerShell 時,您必須手動確定叢集中所有伺服器的 GPU 具有同質設定。
請參閱先前執行 命令時記下的 Name 和 Get-VMHostPartitionableGpu
值。 請參閱上一節的確認 GPU 驅動程式安裝 中的 PowerShell 索引標籤。
連線到要設定其 GPU 分割區計數的伺服器。
執行下列命令來設定分割區計數。 將 GPU-name
替換為 Name 值,將 partition-count
替換為 ValidPartitionCounts 值中支援的計數之一:
Set-VMHostPartitionableGpu -Name "<GPU-name>" -PartitionCount <partition-count>
例如,下列命令會將分割區計數設定為 4:
PS C:\Users> Set-VMHostPartitionableGpu -Name "\\?\PCI#VEN_10DE&DEV_25B6&SUBSYS_157E10DE&REV_A1#4&18416dc3&0&0000#{064092b3-625e-43bf-9eb5-dc845897dd59}" -PartitionCount 4
您可以再次執行 Get-VMHostPartitionableGpu | FL Name,ValidPartitionCounts,PartitionCount
,以確認分割區計數是否已設定為 4。
以下是範例輸出:
PS C:\Users> Get-VMHostPartitionableGpu | FL Name,ValidPartitionCounts,PartitionCount
Name : \\?\PCI#VEN_10DE&DEV_25B6&SUBSYS_157E10DE&REV_A1#4&18416dc3&0&0000#{064092b3-625e-43bf-9eb5-dc845897dd59}
ValidPartitionCounts : {16, 8, 4, 2...}
PartitionCount : 4
Name : \\?\PCI#VEN_10DE&DEV_25B6&SUBSYS_157E10DE&REV_A1#4&5906f5e&0&0010#{064092b3-625e-43bf-9eb5-dc845897dd59}
ValidPartitionCounts : {16, 8, 4, 2...}
PartitionCount : 4
若要讓設定保持同質,請在叢集中的每個伺服器上重複分割區計數設定步驟。
將 GPU 分割區指派給 VM。
將分割區指派給 VM 之前,請先儲存工作負載。
注意
目前,您只能將單一 GPU 分割區指派給 VM。 VM 和 GPU 分割區必須位於相同的主機電腦上。 建議您事先規劃,並根據工作負載效能需求來確定 GPU 分割區大小。
您必須先儲存工作負載,才能指派分割區。 如果您的 VM 目前已開啟或執行中,Windows Admin Center 會自動將其關閉、指派分割區,然後自動將其開啟。
在 [GPU 分割區 ] 索引標籤上,選取 [+ 指派分割區 ]。
[將 GPU 分割區指派給 VM ] 頁面隨即顯示。
從 [選擇伺服器 ] 清單中,選取 VM 所在的伺服器。 此清單會顯示叢集中的所有伺服器。
搜尋並選取要指派 GPU 分割區的 VM。 此清單會自動填入在步驟 2 中選取之伺服器上的 VM。
選取可用的 VRAM 選項。 此欄位中的值必須符合您設定的分割區計數大小。
(選擇性,但建議) 如果您希望 VM 具有高可用性,並在其主機伺服器發生故障時進行容錯移轉,請選取設定強制關機的離線動作 核取方塊。
選取指派分割區 。 這會將所選 VRAM 大小的分割區指派給所選主機伺服器上的所選 VM。
指派分割區計數後,Windows Admin Center 會通知您已成功指派分割區,並再次顯示 [GPU 分割區 ] 索引標籤。 在 GPU 分割區 索引標籤上,VM 會出現在其安裝所在伺服器底下的 [GPU 分割區] 資料列上。
依照下列步驟,使用 PowerShell 將 GPU 分割區指派給 VM:
連線到裝載您要指派 GPU 分割區之 VM 的伺服器。
執行下列命令,將叢集 VM 資源的預設離線動作設定為 force-shutdown
,而非 save
。
Get-ClusterResource -name vmname | Set-ClusterParameter -Name "OfflineAction" -Value 3
注意
如果發生失敗,您必須關閉 VM、清空伺服器,然後手動將 VM 容錯移轉至另一部伺服器。
若要指派分割區,請執行以下命令。
Add-VMGpuPartitionAdapter -VMName $VMName
若要驗證是否已指派分割區,請執行以下命令。
Get-VMGpuPartitionAdapter -VMName $VMName | FL InstancePath,PartitionId,PartitionVfLuid
例如,執行下列命令,先將分割區指派給 mytestgpu-vm1 VM,然後確認指派:
$VMname = "mytestgpu-vm1"
Add-VMGpuPartitionAdapter -VMName $VMName
Get-VMGpuPartitionAdapter -VMName $VMName | FL InstancePath,PartitionId,PartitionVfLuid
以下是範例輸出:
InstancePath : \\?\PCI#VEN_10DE&DEV_25B6&SUBSYS_157E10DE&REV_A1#4&18416dc3&0&0000#{064092b3-625e-43bf-9eb5-dc845897dd59}
PartitionId : 0
PartitionVfLuid : 10-973909323
使用 PowerShell 或 Windows Admin Center 啟動 VM,以解析分割區。
下一個步驟是使用 PowerShell 或 Windows Admin Center 啟動 VM。 VM 啟動並執行之後,它會在裝置管理員中顯示 GPU。
從 VM 取消指派分割區
如果您不再需要 GPU 分割區來執行工作負載,您可以從 VM 取消指派 GPU 分割區。 取消指派分割區會釋放 GPU 分割區資源,之後您可以重新指派給另一個 VM。
您必須先儲存工作負載,才能取消指派分割區。
如果您的 VM 目前已開啟或執行中,Windows Admin Center 會自動將其關閉、取消指派分割區,然後自動將其開啟。
依照下列步驟,從 VM 取消指派分割區:
在 [GPU 分割區 ] 索引標籤上,選取您要取消指派的 GPU 分割區。
選取 [- 取消指派分割區 ]。
[ 從 VM 取消指派 GPU 分割區 ] 頁面隨即顯示。
從 [選擇伺服器 ] 清單中,選取具有要取消指派之 GPU 分割區的伺服器。
從 [選擇要從中取消指派分割區的虛擬機器 ] 清單中,搜尋或選取要從中取消指派分割區的 VM。
選取 [取消指派分割區 ]。
取消指派分割區計數後,Windows Admin Center 會通知您已成功取消指派分割區,並再次顯示 [GPU 分割區 ] 索引標籤。 在 [GPU 分割區 ] 索引標籤上,從中取消指派分割區的 VM 不會再顯示在 [GPU 分割區] 資料列上。
依照下列步驟,使用 PowerShell 從 VM 取消指派 GPU 分割區:
連線到裝載您要從中取消指派 GPU 分割區之 VM 的伺服器。
執行下列命令,將叢集 VM 資源的預設離線動作設定為 force-shutdown
,而非 save
。
Get-ClusterResource -name vmname | Set-ClusterParameter -Name "OfflineAction" -Value 3
注意
如果發生失敗,您必須關閉 VM、清空伺服器,然後手動將 VM 容錯移轉至另一部伺服器。
執行下列命令以移除分割區:
Remove-VMGpuPartitionAdapter -VMName $VMname
執行下列命令以確認分割區已移除。 如果分割區已移除,此命令不會傳回任何結果。
Get-VMGpuPartitionAdapter -VMName $VMName