你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
用于 Azure IoT Edge for Linux on Windows 的 GPU 加速
适用于:IoT Edge 1.5 IoT Edge 1.4
重要
IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 是受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果你使用的是较低的版本,请参阅更新 IoT Edge。
GPU 是适用于人工智能计算的常用选项,因为它们提供并行处理功能,并且通常可以执行基于视觉的推断,速度比 CPU 更快。 为了更好地支持人工智能和机器学习应用程序,Azure IoT Edge for Linux on Windows (EFLOW) 可以向虚拟机的 Linux 模块公开一个 GPU。
Azure IoT Edge for Linux on Windows 支持几种 GPU 传递技术,其中包括:
直接设备分配 (DDA) - 将 GPU 核心分配给 Linux 虚拟机或主机。
GPU 半虚拟化 (GPU-PV) - 在 Linux 虚拟机和主机之间共享 GPU。
必须在部署期间选择适当的直通方法,以便与设备 GPU 硬件支持的功能匹配。
重要
这些功能可能包括由 NVIDIA 公司或其授权方开发和拥有的组件。 组件的使用受 NVIDIA 网站上的 NVIDIA 最终用户许可协议的约束。
使用 GPU 加速功能,即表示你接受并同意 NVIDIA 最终用户许可协议的条款。
先决条件
Azure IoT Edge for Linux on Windows 的 GPU 加速功能目前支持一组选定的 GPU 硬件。 此外,使用此功能可能需要特定版本的 Windows。
下面列出了支持的 GPU 和所需的 Windows 版本:
支持的 GPU | GPU 传递类型 | 支持的 Windows 版本 |
---|---|---|
NVIDIA T4、A2 | DDA | Windows Server 2019 Windows Server 2022 Windows 10/11(专业版、企业版、IoT 企业版) |
NVIDIA GeForce、Quadro、RTX | GPU-PV | Windows 10/11(专业版、企业版、IoT 企业版) |
Intel iGPU | GPU-PV | Windows 10/11(专业版、企业版、IoT 企业版) |
重要
GPU-PV 支持可能仅限于由 GPU 供应商确定的某些代系的处理器或 GPU 体系结构。 有关详细信息,请参阅 Intel 的 iGPU 驱动程序文档或 NVIDIA 的适用于 WSL 文档的 CUDA。
Windows Server 2019 用户必须使用最低内部版本 17763,并且安装了所有当前累积更新。
Windows 10 用户必须使用 2021 年 11 月更新内部版本 19044.1620 或更高版本。 安装完成后,可在命令提示符下运行 winver
来验证内部版本。
嵌套虚拟化不支持 GPU 直通,例如在 Windows 虚拟机中运行 EFLOW。
系统设置和安装
以下部分包含的设置和安装信息取决于你的 GPU。
NVIDIA T4/A2 GPU
对于 T4/A2 GPU,Microsoft 建议从 GPU 的供应商那里安装设备缓解驱动程序。 尽管安装缓解驱动程序是可选的操作,但安装后可以提高部署的安全性。 有关详细信息,请参阅使用直接设备分配来部署图形设备。
警告
启用硬件设备直通可能会增加安全风险。 Microsoft 建议使用 GPU 供应商提供的设备缓解驱动程序(如果适用)。 有关详细信息,请参阅使用离散设备分配部署图形设备。
NVIDIA GeForce/Quadro/RTX GPU
对于 NVIDIA GeForce/Quadro/RTX GPU,请下载并安装适用于 Linux 的 Windows 子系统 (WSL) 的支持 NVIDIA CUDA 的驱动程序,以便与现有 CUDA ML 工作流一起使用。 WSL CUDA 驱动程序最初是为 WSL 开发的,它也可以用于 Azure IoT Edge for Linux on Windows。
Windows 10 用户还必须安装 WSL,因为某些库在 WSL 与 Azure IoT Edge for Linux on Windows 之间共享。
Intel iGPU
对于 Intel iGPU,请下载并安装支持 WSL GPU 的 Intel 显卡驱动程序。
Windows 10 用户还必须安装 WSL,因为某些库在 WSL 与 Azure IoT Edge for Linux on Windows 之间共享。
在 Azure IoT Edge Linux on Windows 部署中启用 GPU 加速
完成系统设置后,即可创建 Azure IoT Edge for Linux on Windows 部署。 在此过程中,必须启用 GPU 作为 EFLOW 部署的一部分。
例如,以下命令创建一个支持 GPU 的虚拟机,其中包含 NVIDIA A2 GPU 或 Intel Iris Xe 图形卡。
#Deploys EFLOW with NVIDIA A2 assigned to the EFLOW VM
Deploy-Eflow -gpuPassthroughType DirectDeviceAssignment -gpuCount 1 -gpuName "NVIDIA A2"
#Deploys EFLOW with Intel(R) Iris(R) Xe Graphics assigned to the EFLOW VM
Deploy-Eflow -gpuPassthroughType ParaVirtualization -gpuCount 1 -gpuName "Intel(R) Iris(R) Xe Graphics"
若要查找 GPU 的名称,可以运行以下命令或者在设备管理器中查看显示适配器。
(Get-WmiObject win32_VideoController).caption
完成安装后,即可通过 Azure IoT Edge for Linux on Windows 部署和运行 GPU 加速的 Linux 模块。
在现有的 Azure IoT Edge Linux on Windows 部署中配置 GPU 加速
在部署时分配 GPU 可以获得最直接的体验。 但是,若要在部署后启用或禁用 GPU,请使用“set-eflowvm”命令。 使用“set-eflowvm”时,将为任何未指定的自变量使用默认参数。 例如,应用于对象的
#Deploys EFLOW without a GPU assigned to the EFLOW VM
Deploy-Eflow -cpuCount 4 -memoryInMB 16384
#Assigns NVIDIA A2 GPU to the existing deployment (cpu and memory must still be specified, otherwise they will be set to the default values)
Set-EflowVM -cpuCount 4 -memoryInMB 16384 -gpuName "NVIDIA A2" -gpuPassthroughType DirectDeviceAssignment -gpuCount 1
#Reduces the cpuCount and memory (GPU must still be specified, otherwise the GPU will be removed)
Set-EflowVM -cpuCount 2 -memoryInMB 4096 -gpuName "NVIDIA A2" -gpuPassthroughType DirectDeviceAssignment -gpuCount 1
#Removes NVIDIA A2 GPU from the existing deployment
Set-EflowVM -cpuCount 2 -memoryInMB 4096
后续步骤
通过示例入门
访问我们的 EFLOW 示例页,找到几个可以尝试使用的 GPU 示例。 这些示例演示了常见的制造和零售方案,例如缺陷检测、工人安全保护和库存管理。 这些开源示例可用作解决方案模板,从中可以生成你自己的基于视觉的机器学习应用程序。
从我们的合作伙伴那里了解详细信息
有多家 GPU 供应商提供了有关通过 EFLOW 发挥硬件和软件最大作用的用户指南。
- 参阅 Intel 的带 Azure IoT Edge for Linux on Windows (EFLOW) 和 OpenVINO™ 工具包的 iGPU 指南和参考实现,了解如何在 EFLOW 上运行 Intel OpenVINO™ 应用程序。
- 参阅 NVIDIA 的 GeForce/Quadro/RTX GPU 的 EFLOW 用户指南,开始在 EFLOW 上部署 CUDA 加速的应用程序。
注意
此指南未介绍基于 DDA 的 GPU,例如 NVIDIA T4 或 A2。
深入了解技术
有关 GPU 传递技术的详细信息,请参阅 DDA 文档和 GPU-PV 博客文章。