在 Amazon EKS 上管理 NVIDIA GPU 裝置 - Amazon EKS

協助改進此頁面

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

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

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

在 Amazon EKS 上管理 NVIDIA GPU 裝置

NVIDIA GPUs 廣泛用於機器學習訓練、推論和高效能運算工作負載。Amazon EKS 支援兩種在 EKS 叢集中管理 NVIDIA GPU 裝置的機制:GPUs 的 NVIDIA DRA 驅動程式NVIDIA Kubernetes 裝置外掛程式

建議在執行 Kubernetes 1.34 版或更新版本的叢集上使用 NVIDIA DRA 驅動程式進行新部署。NVIDIA DRA 驅動程式可在容器之間啟用靈活的 GPU 配置和 GPU 共用。NVIDIA 裝置外掛程式仍受支援。

NVIDIA DRA 驅動程式與 NVIDIA 裝置外掛程式

功能 NVIDIA DRA 驅動程式 NVIDIA 裝置外掛程式

最低 Kubernetes 版本

1.34

所有 EKS 支援的 Kubernetes 版本

Karpenter 和 EKS 自動模式

不支援

支援

EKS 最佳化 AMIs

AL2023

AL2023, Bottlerocket

裝置廣告

透過 GPU 模型、記憶體、驅動程式版本和拓撲等ResourceSlice物件的豐富屬性

nvidia.com/gpu 延伸資源的整數計數

GPU 共用

相同 Pod 中的多個容器可以透過共用ResourceClaim參考共用 GPU

不支援。每個 GPU 只會配置給一個容器。

ComputeDomains

透過 ComputeDomain 資源管理多節點 NVLink (MNNVL),以進行安全的多節點 GPU 通訊

不支援

以屬性為基礎的選擇

使用 CEL 表達式,依模型、記憶體或其他屬性篩選 GPUs

不支援

安裝 NVIDIA DRA 驅動程式

適用於 GPUs 的 NVIDIA DRA 驅動程式可管理兩種類型的資源:GPUs 和 ComputeDomains。它執行兩個 DRA kubelet 外掛程式: gpu-kubelet-plugincompute-domain-kubelet-plugin。每個 都可以在安裝期間分別啟用或停用。本指南著重於 GPU 配置。如需使用 ComputeDomains 的詳細資訊,請參閱 搭配 Amazon EKS 使用 P6e-GB200 UltraServers

目前不支援搭配 Bottlerocket 使用 NVIDIA DRA 驅動程式。

先決條件

  • 執行 Kubernetes 1.34 版或更新版本的 Amazon EKS 叢集。

  • 具有 NVIDIA GPU 執行個體類型的節點 (例如 PG執行個體)。

  • 針對 NVIDIA GPUs 安裝主機層級元件的節點。使用 EKS 最佳化 AL2023 或 Bottlerocket NVIDIA AMIs 時,會預先安裝主機層級 NVIDIA 驅動程式、CUDA 使用者模式驅動程式和容器工具組。

  • 已在命令列環境中安裝 Helm,如需詳細資訊,請參閱安裝 Helm 說明

  • kubectl 設定為與您的叢集通訊,安裝或更新 kubectl如需詳細資訊,請參閱 。

程序

重要

使用 NVIDIA DRA 驅動程式進行 GPU 裝置管理時,無法與相同節點上的 NVIDIA 裝置外掛程式一起部署。如需更新,請參閱上游 Kubernetes KEP-5004

  1. 新增 NVIDIA DRA 驅動程式 Helm Chart 儲存庫。

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
  2. 更新本機 Helm 儲存庫。

    helm repo update
  3. 取得最新版本的 NVIDIA DRA 驅動程式。

    helm search repo nvidia/nvidia-dra
  4. 安裝 NVIDIA DRA 驅動程式。

    helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --create-namespace \ --namespace nvidia-dra-driver-gpu \ --set resources.computeDomains.enabled=false \ --set 'gpuResourcesEnabledOverride=true'

    如需進階組態選項,請參閱 NVIDIA DRA 驅動程式 Helm Chart

  5. 確認 DRA 驅動程式 Pod 正在執行。

    kubectl get pods -n nvidia-dra-driver-gpu
  6. 確認DeviceClass物件已建立。

    kubectl get deviceclass
    NAME AGE gpu.nvidia.com 60s
  7. 確認已為您的 GPU 節點發佈ResourceSlice物件。

    kubectl get resourceslice

在 Pod 中請求 NVIDIA GPUs

若要使用 DRA 驅動程式請求 NVIDIA GPUs,請建立參考 ResourceClaimTemplate的 ,gpu.nvidia.comDeviceClass並在 Pod 規格中參考它。

下列範例會請求單一 GPU:

apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: single-gpu spec: spec: devices: requests: - name: gpu exactly: deviceClassName: gpu.nvidia.com count: 1 --- apiVersion: v1 kind: Pod metadata: name: gpu-workload spec: containers: - name: app ... resources: claims: - name: gpu resourceClaims: - name: gpu resourceClaimTemplateName: single-gpu tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule"

安裝 NVIDIA Kubernetes 裝置外掛程式

NVIDIA Kubernetes 裝置外掛程式會將 NVIDIA GPUs 公告為nvidia.com/gpu延伸資源。您可以在容器資源請求和限制中請求 GPUs。

先決條件

  • Amazon EKS 叢集。

  • 使用 EKS 最佳化 AL2023 NVIDIA AMI 搭配 NVIDIA GPU 執行個體類型的節點。EKS 最佳化 Bottlerocket AMIs 包含 NVIDIA 裝置外掛程式,不需要個別安裝。

  • 已在命令列環境中安裝 Helm,如需詳細資訊,請參閱安裝 Helm 說明

  • kubectl 設定為與您的叢集通訊,安裝或更新 kubectl如需詳細資訊,請參閱 。

程序

  1. 新增 NVIDIA 裝置外掛程式 Helm Chart 儲存庫。

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
  2. 更新本機 Helm 儲存庫。

    helm repo update
  3. 安裝 NVIDIA Kubernetes 裝置外掛程式。

    helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=true
    注意

    您也可以使用 NVIDIA GPU Operator 安裝和管理 NVIDIA Kubernetes 裝置外掛程式,這會自動管理佈建 GPUs 所需的所有 NVIDIA 軟體元件。

  4. 驗證 NVIDIA 裝置外掛程式 DaemonSet 正在執行。

    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> 60s
  5. 確認您的節點具有可配置的 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

在 Pod 中請求 NVIDIA GPUs

若要使用裝置外掛程式請求 NVIDIA GPUs,請在容器nvidia.com/gpu資源限制中指定資源。

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"

若要執行此測試,請套用資訊清單並檢視日誌:

kubectl apply -f nvidia-smi.yaml 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 | +-----------------------------------------------------------------------------------------+