为 Azure 本地准备 GPU (预览版)
适用于:Azure 本地版本 23H2
本文介绍如何在 Azure 本地实例上准备图形处理单元(GPU),以便在 Azure Arc 虚拟机(VM)和 AKS 上运行的计算密集型工作负荷。GPU 用于计算密集型工作负荷,例如机器学习和深度学习。
重要
此功能目前处于预览状态。 有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款。
在 Azure 本地附加 GPU
可以通过以下两种方式之一为 Azure 本地附加 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 本地解决方案 ,并在 左侧菜单中选择 GPU 支持 以获取选项。
NVIDIA 使用虚拟 GPU 软件单独支持其工作负载。 有关详细信息,请参阅 Microsoft Azure 本地 - 支持的 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 本地主机必须满足以下要求:
系统必须支持具有 GPU 支持的 Azure 本地解决方案。 若要浏览选项,请参阅 Azure 本地目录。
有权访问 Azure 本地版本 23H2。
必须为系统中所有计算机中的 GPU 创建同质配置。 同质配置包括安装相同的 GPU 制造和模型。
对于 GPU-P,请确保在系统中每台计算机的 BIOS 中启用虚拟化支持和 SR-IOV。 如果无法在 BIOS 中识别正确的设置,请与硬件供应商联系。
在每个主机上准备 GPU 驱动程序
准备和安装每台计算机的 GPU 驱动程序的过程在 DDA 和 GPU-P 之间稍有不同。 请遵循适用于你的情况的过程。
在每个主机上查找 GPU
首先确保没有为每个计算机安装驱动程序。 如果安装了主机驱动程序,请卸载主机驱动程序并重启计算机。
卸载主机驱动程序或未安装任何驱动程序后,使用以下命令以管理员身份运行 PowerShell:
Get-PnpDevice -Status Error | fl FriendlyName, ClusterId
应会看到 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 本地设置时,物理 GPU 将进入错误状态。 必须卸载所有 GPU 设备才能继续。 可以使用 设备管理器 或 PowerShell 通过ClusterID
上一步中获取的禁用和卸载 GPU。
$id1 = "GPU_instance_ID"
Disable-PnpDevice -ClusterId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -ClusterPath $id1 -Force
确认是否已从主机中正确卸载 GPU。 GPU 现在 Unknown
处于状态:
Get-PnpDevice -Status Unknown | fl FriendlyName, ClusterId
对系统中的每台计算机重复此过程,以准备 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, ClusterId
对 Azure 本地中的每个主机重复上述步骤。
使用 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, ClusterId
还可以运行 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 Local 中的所有计算机上是同质的。
连接到要配置的 GPU 分区计数的计算机。
Get-VMHostPartitionableGpu
运行命令并引用 Name 和 ValidPartitionCounts 值。运行以下命令以配置分区计数。 请将
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
若要保持配置同质,请在系统中的每台计算机上重复分区计数配置步骤。
来宾要求
以下 Arc VM 工作负载支持 GPU 管理:
第 2 代 VM