安裝適用於 GPUs 的 Kubernetes 裝置外掛程式 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

安裝適用於 GPUs 的 Kubernetes 裝置外掛程式

Kubernetes 裝置外掛程式一直是將 GPUs、網路介面和網路轉接器等特殊基礎設施公告為 Kubernetes 工作負載的消耗性資源的主要機制。雖然動態資源分配 (DRA) 定位為 Kubernetes 中裝置管理的未來,但大多數專門的基礎設施供應商都在對 DRA 驅動程式的支援初期。Kubernetes 裝置外掛程式仍是目前在 Kubernetes 叢集中使用 GPUs 的廣泛可用方法。

考量事項

  • 搭配 NVIDIA GPUs 使用 EKS 最佳化 AL2023 AMIs 時,您必須安裝 NVIDIA Kubernetes 裝置外掛程式。您可以使用 Helm、您選擇的 Kubernetes 工具或 NVIDIA GPU 運算子來安裝和管理 NVIDIA Kubernetes 裝置外掛程式。

  • 搭配 NVIDIA GPUs 使用 EKS 最佳化 Bottlerocket AMIs 時,您不需要安裝 NVIDIA Kubernetes 裝置外掛程式,因為它已包含在 EKS 最佳化 Bottlerocket AMIs中。這包括當您搭配 EKS Auto 模式使用 GPU 執行個體時。

  • 搭配 AWS Inferentia 或 Trainium GPUs 使用 EKS 最佳化 AL2023 或 Bottlerocket AMIs 時,您必須安裝 Neuron Kubernetes 裝置外掛程式,並選擇性地安裝 Neuron Kubernetes 排程器延伸模組。如需詳細資訊,請參閱用於在 EKS 上執行的 Neuron 文件

安裝 NVIDIA Kubernetes 裝置外掛程式

下列程序說明如何安裝 NVIDIA Kubernetes 裝置外掛程式,並在 NVIDIA GPU 執行個體上執行範例測試。

先決條件

  • EKS 叢集已建立

  • 使用 EKS 最佳化 AL2023 NVIDIA AMI 在叢集中執行的 NVIDIA GPU 節點

  • 已在命令列環境中安裝 Helm,請參閱安裝 Helm 說明

程序

  1. 新增 nvdp Helm Chart 儲存庫。

    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. 使用以下命令確認您的節點具有可配置的 GPUs。

    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 的檔案。此資訊清單會啟動在節點nvidia-smi上執行的最小 AL2023 容器映像

    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 叢集已建立

  • 叢集中執行的 Neuron GPU 節點使用 EKS 最佳化 AL2023 Neuron AMI 或 Bottlerocket AMI

  • 已在命令列環境中安裝 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 | +--------+--------+--------+---------+