在群集 VM 中使用 GPU

适用于:Azure Stack HCI 版本 22H2

本主题提供有关如何在运行 Azure Stack HCI 操作系统的群集虚拟机 (VM) 上使用图形处理单元 (GPU),以便为群集 VM 中的工作负载提供 GPU 加速的指导。

从 Azure Stack HCI 版本 21H2 开始,可以在 Azure Stack HCI 群集中包含 GPU,以便为群集 VM 中运行的工作负载提供 GPU 加速。 本主题介绍此功能的基本先决条件,以及如何部署此功能。

GPU 加速是通过离散设备分配(DDA,也称为 GPU 直通)提供的,使用 DDA 技术可将一个或多个物理 GPU 专用分配给某个 VM。 群集 VM 可以利用 GPU 加速和群集功能(例如,通过故障转移实现高可用性)。 目前不支持实时迁移 VM,但在发生故障时,VM 可以自动重启并定位在可提供 GPU 资源的位置。

先决条件

若要开始,你需要一个运行 Azure Stack HCI 版本 21H2 的 Azure Stack HCI 群集。 此外,需要在该群集中的每个服务器上以物理方式安装 GPU。

注意

Azure Stack HCI 目录目前不会指示 GPU 兼容性或证书信息。 请按照制造商的说明安装 GPU。

用法说明

本部分介绍使用 Windows Admin Center 或 Windows PowerShell 为 GPU 使用准备群集服务器所需的步骤。 可以将一个或多个 VM 分配到群集 GPU 资源池,并从群集 GPU 资源池中删除 VM。 还可使用 PowerShell 测试自动重启。

使用 Windows Admin Center

使用 Windows Admin Center 准备群集、将 VM 分配到 GPU 资源池,以及取消将 VM 分配到 GPU 资源池。

若要准备群集并将 VM 分配到 GPU 资源池,请执行以下操作:

  1. 在“工具”菜单的“扩展”下,选择“GPU”以打开该工具。

    Windows Admin Center 中 GPU 工具的屏幕截图

  2. 在工具的主页上,选择“GPU 池”选项卡,然后选择“创建 GPU 池”。

    Windows Admin Center 中“创建 GPU 池”页面的屏幕截图

  3. 在“新建 GPU 池”页面上,指定以下内容,然后选择“保存”:

    1. 服务器名称
    2. GPU 池名称
    3. 要添加到池的 GPU

    Windows Admin Center 中用于指定服务器、池名称和 GPU 的“新建 GPU 池”页面的屏幕截图

    该过程完成后,你将收到一条成功提示,显示新 GPU 池的名称和主机服务器。

  4. 在“将 VM 分配给 GPU 池”页面上,指定以下内容,然后选择“分配”:

    1. 服务器名称
    2. GPU 池名称
    3. 要从 GPU 池中将 GPU 分配到的目标虚拟机。

    还可以为内存映射 IO (MMIO) 空间定义高级设置值,以确定单个 GPU 的资源需求。

    该屏幕截图显示了 Windows Admin Center 中的“将 VM 分配给 GPU 池”页,你可在其中将 VM 分配给 GPU 池中的 GPU

    该过程完成后,你将收到一条确认提示,显示你已成功从 GPU 资源池将 GPU 分配到 VM,该提示显示在“分配的 VM”下。

    成功提示的屏幕截图,其中显示了分配给 VM 的 GPU 以及显示在“已分配 VM”下的 VM

若要取消从 GPU 资源池分配 VM,请执行以下操作:

  1. 在“GPU 池”选项卡上,选择要取消分配的 GPU,然后选择“取消分配 VM”。

  2. 在“取消从 GPU 池分配 VM”页面上的“虚拟机”列表框中,指定 VM 的名称,然后选择“取消分配”。

    该屏幕截图显示了“取消从 GPU 池分配 VM”页,其中显示了要取消分配的 VM

    该过程完成后,你将收到一条成功提示,指出已取消从 GPU 池中分配 VM,并且在“分配状态”下,GPU 显示“可用(未分配)”。

使用 PowerShell

使用 PowerShell 准备群集、将 VM 分配到 GPU 资源池并测试自动重启。

准备群集

按如下所述在每个服务器中准备 GPU:在每个服务器上安装安全缓解措施驱动程序,禁用 GPU,然后根据使用离散设备分配来部署图形设备中的说明从主机装载 GPU。 根据硬件的供应商,可能还需要配置任何 GPU 许可要求。

  1. 在将要包含群集 GPU 资源的每个服务器上新建一个空的资源池。 确保在每个服务器上提供相同的池名称。

    在 PowerShell 中,以管理员身份运行以下 cmdlet:

     New-VMResourcePool -ResourcePoolType PciExpress -Name "GpuChildPool"
    
  2. 将已从每个服务器中卸除的 GPU 添加到在上一步骤中创建的资源池。

    在 PowerShell 中运行以下 cmdlet:

     $gpu = Get-VMHostAssignableDevice
    
     Add-VMHostAssignableDevice -HostAssignableDevice $gpu -ResourcePoolName "GpuChildPool"
    

现在你已有一个群集范围的资源池(名为 GpuChildPool),其中填充了可分配的 GPU。 群集将使用此池来确定已分配到 GPU 资源池的任何已启动或已移动 VM 的 VM 位置。

将 VM 分配到 GPU 资源池

首先,在群集中创建新的 VM,或查找现有的 VM。

根据使用离散设备分配来部署图形设备中的说明设置 VM 的缓存行为、停止操作和内存映射 I/O (MMIO) 属性,以根据 DDA 准备 VM。

  1. 将群集 VM 资源的默认脱机操作配置为 force-shutdown 而不是 save

    在 PowerShell 中运行以下 cmdlet:

     Get-ClusterResource -name vmname | Set-ClusterParameter -Name "OfflineAction" -Value 3
    
  2. 将前面创建的资源池分配到 VM。 这会向群集声明,VM 在启动或移动时,需要从 GpuChildPool 池中分配的设备。

    在 PowerShell 中运行以下 cmdlet:

     $vm | Add-VMAssignableDevice -ResourcePoolName "GpuChildPool"
    

    注意

    如果要将多个 GPU 添加到 VM,请先验证资源池是否具有多个可用的可分配 GPU,然后再次运行上一个命令。

如果现在启动 VM,则该群集会确保将该 VM 放置在适当的服务器上,该服务器具有在此群集范围的池中提供的 GPU 资源。 该群集还会通过 DDA 将 GPU 分配到 VM,这样就可以从 VM 内部的工作负载访问 GPU。

注意

还需要在 VM 内部安装 GPU 制造商提供的驱动程序,使 VM 中的应用能够利用分配给它们的 GPU。

还可以从 VM 中删除已分配的 GPU。 为此,请在 PowerShell 中运行以下 cmdlet:

 Get-VMAssignableDevice -VMName $vm | Where-Object { $_.ResourcePoolName -eq "GpuChildPool" } | Remove-VMAssignableDevice

故障转移分配有 GPU 的 VM

若要测试群集能否使 GPU 工作负载保持可用,请在分配有 GPU 的 VM 运行所在的服务器上执行清空操作。 若要清空服务器,请按照故障转移群集维护过程中的说明进行操作。 群集将重启群集中另一个服务器上的 VM,前提是这另一个服务器具有你所创建的池中提供的足够 GPU 资源。

后续步骤

有关详细信息,请参阅: