为 Azure Stack HCI 准备 GPU(预览版)

适用于:Azure Stack HCI 版本 23H2

本文介绍如何为 Azure Stack HCI 准备图形处理单元(GPU),以便用于在 Azure Arc 启用的 Arc 虚拟机(VM)和 AKS 上运行的计算密集型工作负荷。GPU 用于计算密集型工作负荷,例如机器学习和深度学习。

重要

此功能目前处于预览状态。 有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

在 Azure Stack HCI 上附加 GPU

可以通过以下两种方式之一为 Azure Stack HCI 附加 GPU:

  • 离散设备分配 (DDA) - 允许将物理 GPU 专用于工作负荷。 在 DDA 部署中,虚拟化工作负荷在原生驱动程序上运行,通常具有对 GPU 功能的完全访问权限。 DDA 提供最高级别的应用兼容性和潜在性能。

  • GPU 分区 (GPU-P) - 允许通过将 GPU 拆分为专用的小数部分分区来与多个工作负荷共享 GPU。

请考虑以下功能并支持使用 GPU 的两个选项之间的差异:

说明 离散设备分配 GPU 分区
GPU 资源模型 整个设备 同样分区的设备
VM 密度 低(一个 GPU 到一个 VM) 高(一个 GPU 到多个 VM)
应用兼容性 供应商(DX 12、OpenGL、CUDA)提供的所有 GPU 功能 供应商(DX 12、OpenGL、CUDA)提供的所有 GPU 功能
GPU VRAM GPU 支持的 VRAM 每个分区的 GPU 支持的最大 VRAM
来宾中的 GPU 驱动程序 GPU 供应商驱动程序 (NVIDIA) GPU 供应商驱动程序 (NVIDIA)

支持的 GPU 模型

若要查看可用的受支持解决方案和 GPU 的完整列表,请参阅 Azure Stack HCI 解决方案 ,并在 左侧菜单中选择 GPU 支持 以获取选项。

NVIDIA 使用虚拟 GPU 软件单独支持其工作负载。 有关详细信息,请参阅 Microsoft Azure Stack HCI - 支持的 NVIDIA GPU 和已验证的服务器平台

有关 AKS 工作负载,请参阅 AKS for Arc 的 GPU。

在 Arc VM 工作负荷中使用 DDA 和 GPU-P 支持以下 GPU 模型:

  • NVIDIA A2
  • NVIDIA A16

为 Arc VM 工作负荷使用 GPU-P(仅)支持这些额外的 GPU 模型:

  • NVIDIA A10
  • NVIDIA A40
  • NVIDIA L4
  • NVIDIA L40
  • NVIDIA L40S

主机要求

Azure Stack HCI 主机必须满足以下要求:

  • 系统必须支持具有 GPU 支持的 Azure Stack HCI 解决方案。 若要浏览选项,请参阅 Azure Stack HCI 目录

  • 有权访问 Azure Stack HCI 版本 23H2 群集。

  • 必须在群集中的所有服务器上为 GPU 创建同质配置。 同质配置包括安装相同的 GPU 制造和模型。

  • 对于 GPU-P,请确保在群集中每台服务器的 BIOS 中启用虚拟化支持和 SR-IOV。 如果无法识别 BIOS 中的正确设置,请与系统供应商联系。

在每个主机上准备 GPU 驱动程序

为每个主机服务器准备和安装 GPU 驱动程序的过程在 DDA 和 GPU-P 之间稍有不同。 请遵循适用于你的情况的过程。

在每个主机上查找 GPU

首先确保没有为每个主机服务器安装驱动程序。 如果安装了主机驱动程序,请卸载主机驱动程序并重启服务器。

卸载主机驱动程序或未安装任何驱动程序后,使用以下命令以管理员身份运行 PowerShell:

Get-PnpDevice -Status Error | fl FriendlyName, InstanceId

应会看到 GPU 设备显示为错误状态,如 3D Video Controller 示例输出中所示,其中列出了 GPU 的友好名称和实例 ID:

[ASRR1N26R02U46A]: PS C:\Users\HCIDeploymentUser\Documents> Get-PnpDevice - Status Error

Status		Class			FriendlyName
------		-----			------------
Error					SD Host Controller
Error					3D Video Controller
Error					3D Video Controller
Error		USB			Unknown USB Device (Device Descriptor Request Failed)

[ASRR1N26R02U46A]: PS C:\Users\HCIDeploymentUser\Documents> Get-PnpDevice - Status Error | f1 InstanceId

InstanceId : PCI\VEN_8086&DEV_18DB&SUBSYS_7208086REV_11\3&11583659&0&E0

InstanceId : PCI\VEN_10DE&DEV_25B6&SUBSYS_157E10DE&REV_A1\4&23AD3A43&0&0010

InstanceId : PCI\VEN_10DE&DEV_25B6&SUBSYS_157E10DE&REV_A1\4&17F8422A&0&0010

InstanceId : USB\VID_0000&PID_0002\S&E492A46&0&2

使用 DDA

如果使用 DDA,请遵循此过程:

1.禁用和卸载主机中的 GPU

对于 DDA,卸载主机驱动程序或设置新的 Azure Stack HCI 群集时,物理 GPU 进入错误状态。 必须卸载所有 GPU 设备才能继续。 可以使用 设备管理器 或 PowerShell 通过InstanceID上一步中获取的禁用和卸载 GPU。

$id1 = "GPU_instance_ID"
Disable-PnpDevice -InstanceId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -InstancePath $id1 -Force

确认是否已从主机中正确卸载 GPU。 GPU 现在 Unknown 处于状态:

Get-PnpDevice -Status Unknown | fl FriendlyName, InstanceId

对 Azure Stack HCI 群集中的每个服务器重复此过程,以准备 GPU。

2.下载并安装缓解驱动程序

该软件可能包括 NVIDIA Corporation 或其许可商开发并拥有的组件。 这些组件的使用受 NVIDIA 最终用户许可协议的约束。

请参阅 NVIDIA 文档,下载适用的 NVIDIA 缓解驱动程序。 下载驱动程序后,展开存档并在每个主机服务器上安装缓解驱动程序。 使用以下 PowerShell 脚本下载缓解驱动程序并将其提取:

Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver

提取缓解驱动程序文件后,找到 GPU 的正确模型的版本并安装它。 例如,如果要安装 NVIDIA A2 缓解驱动程序,请运行以下命令:

pnputil /add-driver nvidia_azure_stack_A2_base.inf /install /force

若要确认安装这些驱动程序,请运行:

pnputil /enum-devices OR pnputil /scan-devices

你应该能够在以下项中看到 Get-PnpDevice正确识别的 GPU:

Get-PnpDevice -Class Display | fl FriendlyName, InstanceId

对 Azure Stack HCI 群集中的每个主机重复上述步骤。

使用 GPU-P

如果使用 GPU-P,请遵循此过程:

下载并安装主机驱动程序

GPU-P 要求主机级别与 DDA 不同的驱动程序。 对于 NVIDIA GPU,需要在每台主机上和使用 GPU-P 的每个 VM 上使用 NVIDIA vGPU 软件图形驱动程序。 有关详细信息,请参阅最新版本的 NVIDIA vGPU 文档以及有关客户端许可用户指南许可的详细信息。

在将 GPU 标识为 3D Video Controller 主机服务器上后,下载主机 vGPU 驱动程序。 通过 NVIDIA GRID 许可证,应能够获取正确的主机驱动程序.zip文件。

需要获取以下文件夹并将其移动到主机服务器: \vGPU_<Your_vGPU_version>_GA_Azure_Stack_HCI_Host_Drivers

导航到 \vGPU_<Your_vGPU_version>_GA_Azure_Stack_HCI_Host_Drivers\Display.Driver 并安装驱动程序。

pnputil /add-driver .\nvgridswhci.inf /install /force

若要确认安装这些驱动程序,请运行:

pnputil /enum-devices

你应该能够在以下项中看到 Get-PnpDevice正确识别的 GPU:

Get-PnpDevice -Class Display | fl FriendlyName, InstanceId

还可以运行 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 分区计数

按照以下步骤在 PowerShell 中配置 GPU 分区计数:

注意

使用 PowerShell 时,必须手动确保 GPU 配置在 Azure Stack HCI 群集中的所有服务器上是同质的。

  1. 连接到要为其配置 GPU 分区计数的服务器。

  2. Get-VMHostPartitionableGpu运行命令并引用 NameValidPartitionCounts 值。

  3. 运行以下命令以配置分区计数。 请将 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
    
  4. 若要保持配置同质,请在 Azure Stack HCI 群集中的每个服务器上重复分区计数配置步骤。

来宾要求

以下 Arc VM 工作负载支持 GPU 管理:

后续步骤