安装适用于 GPU 的 Kubernetes 设备插件 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

安装适用于 GPU 的 Kubernetes 设备插件

Kubernetes 设备插件一直是将专用基础设施(例如 GPU、网络接口和网络适配器)作为 Kubernetes 工作负载消耗性资源进行公开发布的主要机制。虽然动态资源分配(DRA)定位为 Kubernetes 设备管理的未来,但大多数专业基础设施提供商很早就支持 DRA 驱动程序。如今,Kubernetes 设备插件仍然是在 Kubernetes 集群中使用 GPU 的广泛可用的方法。

注意事项

  • 使用搭载 NVIDIA GPU 的 EKS 优化版 AL2023 AMI 时,必须安装 NVIDIA Kubernetes 设备插件。可以通过 Helm、所选的 Kubernetes 工具或 NVIDIA GPU 操作器来安装和管理 NVIDIA Kubernetes 设备插件。

  • 使用搭载 NVIDIA GPU 的 EKS 优化版 Bottlerocket AMI 时,无需安装 NVIDIA Kubernetes 设备插件,因为它已经包含在 EKS 优化版 Bottlerocket AMI 中。这包括在 EKS 自动模式下使用 GPU 实例的情况。

  • 使用搭载 Amazon Inferentia 或 Trainium GPU 的 EKS 优化版 AL2023 或 Bottlerocket AMI 时,必须安装 Neuron Kubernetes 设备插件,并可以选择安装 Neuron Kubernetes 调度器扩展程序。有关更多信息,请参阅适用于在 EKS 上运行的 Neuron 文档

安装 NVIDIA Kubernetes 设备插件

以下步骤介绍如何安装 NVIDIA Kubernetes 设备插件以及如何在 NVIDIA GPU 实例上运行示例测试。

先决条件

  • EKS 集群已创建

  • 使用 EKS 优化版 AL2023 NVIDIA AMI 在集群中运行的 NVIDIA GPU 节点

  • 在命令行环境中安装 Helm,请参阅安装 Helm 说明

过程

  1. 添加 nvdp Helm 图表存储库。

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
  2. 更新本地 Helm 存储库,确保拥有最新的图表。

    helm repo update
  3. 获取最新版本的 NVIDIA Kubernetes 设备插件

    helm search repo nvdp --devel
    NAME CHART VERSION APP VERSION DESCRIPTION nvdp/gpu-feature-discovery 0.17.4 0.17.4 ... nvdp/nvidia-device-plugin 0.17.4 0.17.4 ...
  4. 在集群上安装 NVIDIA Kubernetes 设备插件,并将 0.17.4 替换为以上命令中的最新版本。

    helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --version 0.17.4 \ --set gfd.enabled=true
  5. 验证 NVIDIA Kubernetes 设备插件是否在您的集群中运行。下面的输出显示了集群中有两个节点的输出。

    kubectl get ds -n nvidia nvdp-nvidia-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvdp-nvidia-device-plugin 2 2 2 2 2 <none> 11m
  6. 使用以下命令验证节点是否具有可分配的 GPU。

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
    NAME GPU ip-192-168-11-225.us-west-2.compute.internal 1 ip-192-168-24-96.us-west-2.compute.internal 1
  7. 使用以下内容创建名为 nvidia-smi.yaml 的文件。此清单会启动最小 AL2023 容器映像,该映像可在节点上运行 nvidia-smi

    apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: restartPolicy: OnFailure containers: - name: gpu-demo image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal command: ['/bin/sh', '-c'] args: ['nvidia-smi && tail -f /dev/null'] resources: limits: nvidia.com/gpu: 1 tolerations: - key: 'nvidia.com/gpu' operator: 'Equal' value: 'true' effect: 'NoSchedule'
  8. 使用下面的命令应用清单。

    kubectl apply -f nvidia-smi.yaml
  9. 容器组(pod)运行完成后,使用下面的命令查看其日志。

    kubectl logs nvidia-smi

    示例输出如下。

    +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI XXX.XXX.XX Driver Version: XXX.XXX.XX CUDA Version: XX.X | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA L4 On | 00000000:31:00.0 Off | 0 | | N/A 27C P8 11W / 72W | 0MiB / 23034MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+

安装 Neuron Kubernetes 设备插件

以下步骤介绍如何安装 Neuron Kubernetes 设备插件以及如何在 Inferentia 实例上运行示例测试。

先决条件

  • EKS 集群已创建

  • 使用 EKS 优化版 AL2023 Neuron AMI 或 Bottlerocket AMI 在集群中运行的 Neuron GPU 节点

  • 在命令行环境中安装 Helm,请参阅安装 Helm 说明

过程

  1. 在集群上安装 Neuron Kubernetes 设备插件。

    helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --set "npd.enabled=false"
  2. 验证 Neuron Kubernetes 设备插件是否在您的集群中运行。下面的输出显示了集群中有一个 Neuron 节点的输出。

    kubectl get ds -n kube-system neuron-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-device-plugin 1 1 1 1 1 <none> 72s
  3. 使用以下命令验证节点是否具有可分配的 NueronCores。

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronCore:.status.allocatable.aws\.amazon\.com/neuroncore"
    NAME NeuronCore ip-192-168-47-173.us-west-2.compute.internal 2
  4. 使用以下命令验证节点是否具有可分配的 NueronDevices。

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronDevice:.status.allocatable.aws\.amazon\.com/neuron"
    NAME NeuronDevice ip-192-168-47-173.us-west-2.compute.internal 1
  5. 使用以下内容创建名为 neuron-ls.yaml 的文件。此清单会启动安装了 neuron-ls 工具的 Neuron Monitor 容器。

    apiVersion: v1 kind: Pod metadata: name: neuron-ls spec: restartPolicy: Never containers: - name: neuron-container image: public.ecr.aws/g4h4h0b5/neuron-monitor:1.0.0 command: ["/bin/sh"] args: ["-c", "neuron-ls"] resources: limits: aws.amazon.com/neuron: 1 tolerations: - key: "aws.amazon.com/neuron" operator: "Exists" effect: "NoSchedule"
  6. 使用下面的命令应用清单。

    kubectl apply -f neuron-ls.yaml
  7. 容器组(pod)运行完成后,使用下面的命令查看其日志。

    kubectl logs neuron-ls

    输出示例如下。

    instance-type: inf2.xlarge instance-id: ... +--------+--------+--------+---------+ | NEURON | NEURON | NEURON | PCI | | DEVICE | CORES | MEMORY | BDF | +--------+--------+--------+---------+ | 0 | 2 | 32 GB | 00:1f.0 | +--------+--------+--------+---------+