View a markdown version of this page

在 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 驅動程式,搭配 EKS 受管節點群組或自我管理節點群組進行新部署。NVIDIA DRA 驅動程式可在容器之間啟用靈活的 GPU 配置和 GPU 共用。

Karpenter 或 EKS Auto Mode 不支援 NVIDIA DRA 驅動程式。使用 NVIDIA 裝置外掛程式搭配 Karpenter 和 EKS Auto 模式。NVIDIA 裝置外掛程式仍然支援 EKS 受管節點群組和自我管理節點。

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

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

最低 Kubernetes 版本

1.34

所有 EKS 支援的 Kubernetes 版本

EKS 運算

受管節點群組、自我管理節點

EKS Auto Mode、Karpenter、受管節點群組、自我管理節點

EKS 最佳化 AMIs

AL2023 (NVIDIA)

AL2023 (NVIDIA)、 Bottlerocket

裝置廣告

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

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

GPU 共用

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

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

ComputeDomains

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

不支援

以屬性為基礎的選擇

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

不支援

拓撲感知 EFA 配置

DRA 原生拓撲感知

自動拓撲感知 (僅限 EKS 最佳化 AL2023 AMIs)

安裝 NVIDIA DRA 驅動程式

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

先決條件

  • 使用 EKS 受管節點群組或自我管理節點群組執行 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

重要

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

  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

    若要使用 DRA 驅動程式請求 NVIDIA GPUs,請建立參考 ResourceClaimTemplate的 ,gpu.nvidia.comDeviceClass並在 Pod 規格中參考它。下列範例會請求單一 GPU。拓撲感知 EFA 和 GPU/Neuron 裝置配置 如需使用拓撲對齊 EFA 介面配置 NVIDIA GPUs 的步驟,請參閱 。

    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
    在具有 EFA 裝置的節點上停用 MOFED

    k8s-device-plugin v0.19.0 開始, --mofed-enabled旗標預設為 true。這會導致 NVIDIA 裝置外掛程式將所有/dev/infiniband/uverbs*裝置掛載到請求 GPUs 的容器 (nvidia.com/gpu)。這與 AWS EFA 裝置外掛程式衝突,它會管理uverbs裝置的掛載。節點上請求少於所有 EFA 裝置的工作負載會受到影響,因為 NVIDIA 裝置外掛程式預設會宣告所有uverbs裝置。

    如果您的節點有 EFA 裝置,請在安裝 NVIDIA 裝置外掛程式時明確停用 MOFED:

    helm upgrade --install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=true \ --set mofedEnabled=false

    如果您透過 NVIDIA GPU Operator 管理 NVIDIA 裝置外掛程式,請使用 devicePlugin.env 欄位停用 MOFED:

    helm upgrade --install gpu-operator nvidia/gpu-operator \ --namespace gpu-operator \ --set 'devicePlugin.env[0].name=MOFED_ENABLED' \ --set 'devicePlugin.env[0].value=false'

    如需詳細資訊,請參閱 NVIDIA k8s-device-plugin 問題 #1692

    注意

    您也可以使用 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 requests: 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 | +-----------------------------------------------------------------------------------------+