重要
AKS Edge Essentials 的 GPU 加速目前处于预览阶段。 有关适用于 beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅Microsoft Azure 预览版 补充使用条款。
GPU 是适用于人工智能计算的常用选项,因为它们提供并行处理功能,并且通常可以执行基于视觉的推断,速度比 CPU 更快。 为了更好地支持人工智能和机器学习应用程序,AKS Edge Essentials 可以将 GPU 公开给虚拟机的 Linux 模块。
AKS Edge Essentials 支持 GPU-Paravirtualization (GPU-PV)作为 GPU 直通技术。 换句话说,GPU 在 Linux 虚拟机和主机之间共享。
重要
这些功能包括 NVIDIA Corporation 或其许可商开发并拥有的组件。 通过使用 GPU 加速功能,你接受并同意 NVIDIA 最终用户许可协议的条款。
先决条件
AKS Edge Essentials 的 GPU 加速目前支持一组特定的 GPU 硬件。 此外,使用此功能需要特定版本的 Windows。
支持的 GPU 和所需的 Windows 版本如下所示:
支持的 GPU | GPU 直通类型 | 支持的 Windows 版本 |
---|---|---|
NVIDIA GeForce、Quadro、RTX | GPU-PV | Windows 10/11(专业版、企业版、IoT 企业版) |
重要
GPU-PV 支持可能仅限于某些代处理器或 GPU 体系结构,由 GPU 供应商决定。 有关详细信息,请参阅适用于 WSL 的 NVIDIA CUDA 文档。
Windows 10 用户必须使用 2021 年 11 月更新版本 19044.1620 或更高版本。 安装完成后,可在命令提示符下运行 winver
来验证内部版本。
嵌套虚拟化不支持 GPU 直通,例如在 Windows 虚拟机中运行 AKS Edge Essentials 时。
系统设置和安装
以下部分包含安装和安装信息。
- 对于 NVIDIA GeForce/Quadro/RTX GPU,请下载并安装适用于 Linux 的 Windows 子系统 (WSL) 的支持 NVIDIA CUDA 的驱动程序,以便与现有 CUDA ML 工作流一起使用。 最初为 WSL 开发,适用于 WSL 驱动程序的 CUDA 也用于 AKS Edge Essentials。
- Windows 10 用户还必须 安装 WSL ,因为某些库在 WSL 和 AKS Edge Essentials 之间共享。
- 安装或升级 AKS Edge Essentials 到 2024 年 5 月或更高版本。 有关详细信息,请参阅 更新 AKS Edge Essentials 群集。 k8s 和 k3s Kubernetes 分发版都支持 GPU-PV。
在 AKS Edge Essentials 部署中启用 GPU-PV
步骤 1:单台计算机配置参数
可以生成创建单个计算机群集所需的参数,并使用以下命令添加必要的 GPU-PV 配置参数。
此脚本仅侧重于 GPU-PV 配置;还应根据自己的 AKS Edge Essentials 部署进行其他必要的常规更新:
$jsonObj = New-AksEdgeConfig -DeploymentType SingleMachineCluster
$jsonObj.User.AcceptGpuWarning = $true
$machine = $jsonObj.Machines[0]
$machine.LinuxNode.GpuPassthrough.Name = "NVIDIA GeForce GTX 1070"
$machine.LinuxNode.GpuPassthrough.Type = "ParaVirtualization"
$machine.LinuxNode.GpuPassthrough.Count = 1
启用 GPU-PV 的关键参数包括:
User.AcceptGpuWarning
:将此参数设置为true
在 AKS Edge Essentials 上启用 GPU-PV 时自动接受确认消息。LinuxNode.GpuPassthrough.Name
:介绍在此计算机中部署的 GPU 模型,并安装了适当的驱动程序。LinuxNode.GpuPassthrough.Type
:描述 GPU 直通类型。 目前仅支持ParaVirtualization
群集。LinuxNode.GpuPassthrough.Count
:描述此计算机上安装了多少个 GPU。
步骤 2:创建单个计算机群集
现在,可以运行
New-AksEdgeDeployment
cmdlet 来部署具有单个 Linux 控制平面节点的单台计算机 AKS Edge 群集。 可以使用步骤 1 中生成的 JSON 对象并将其作为字符串传递:New-AksEdgeDeployment -JsonConfigString (New-AksEdgeConfig | ConvertTo-Json -Depth 4)
成功部署后,通过运行以下方法
nvidia-smi
验证 GPU-PV 是否已启用:
步骤 3:部署 Nvidia runtimeclass
创建包含以下内容的名为 nvidia-runtimeclass.yaml 的 YAML 文件:
apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: nvidia handler: nvidia
runtimeclass
部署 :kubectl apply –f nvidia-runtimeclass.yaml
步骤 4:安装 Nvidia GPU 设备插件
从此 GitHub 位置下载 nvidia-deviceplugin.yaml。
将 nvidia-deviceplugin.yaml 文件中的容器映像位置更新为新值,如下所示:
containers: - image: registry.gitlab.com/nvidia/kubernetes/device-plugin/staging/k8s-device-plugin:6a31a868
安装 Nvidia GPU DevicePlugin:
kubectl apply –f nvidia-deviceplugin.yaml
使用和
kubectl get pods -A
命令检查 devicepluginkubectl logs $podname -n kube-system
日志,验证插件是否正在运行,并检测到 NVIDIA GPU:
示例工作负荷入门
准备名为 gpu-workload.yaml 的工作负荷 YAML 文件:
apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: restartPolicy: Never containers: - name: cuda-container image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2 resources: limits: nvidia.com/gpu: 1 # requesting 1 GPU tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule
运行示例工作负荷:
kubectl apply -f .\gpu-workload.yaml
验证工作负荷是否已成功运行: