View a markdown version of this page

在 Amazon EKS 上使用 NVIDIA DRA 驅動程式或裝置外掛程式 - Amazon EKS

協助改進此頁面

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

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

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

在 Amazon EKS 上使用 NVIDIA DRA 驅動程式或裝置外掛程式

Amazon EKS 支援兩種在 EKS 叢集中管理 NVIDIA GPU 裝置的機制:GPUs 的 NVIDIA DRA 驅動程式NVIDIA Kubernetes 裝置外掛程式

在 Karpenter、EKS 受管節點群組或自我管理節點中使用靜態容量佈建時,建議使用 NVIDIA DRA 驅動程式搭配 Kubernetes 1.34 版及更新版本進行新部署。EKS Auto Mode 目前不支援 NVIDIA DRA 驅動程式。使用動態容量佈建時,搭配 EKS Auto 模式或 Karpenter 使用 NVIDIA 裝置外掛程式。NVIDIA 裝置外掛程式仍然支援 EKS 受管節點群組和自我管理節點。

如果您使用多執行個體 GPUs (MIG) 或時間分割等 GPU 共用功能,建議您搭配 DRA 驅動程式使用靜態組態,或使用 NVIDIA 裝置外掛程式。動態 MIG 和時間分割在 NVIDIA DRA 驅動程式中處於 Alpha 狀態。如需最新更新,請參閱 GitHub 上的 NVIDIA DRA 驅動程式版本

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

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

最低 Kubernetes 版本

1.34

所有 EKS 支援的 Kubernetes 版本

EKS 運算

Karpenter (僅限靜態容量)、受管節點群組、自我管理節點

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

EKS 最佳化 AMIs

AL2023 (NVIDIA)、 Bottlerocket

AL2023 (NVIDIA)、 Bottlerocket

裝置廣告

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

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

GPU 共用

(Alpha) 動態 MIG、MPS、時間分割

(GA) 靜態 MIG、MPS、時間分割

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

先決條件

  • 執行 Kubernetes 1.34 版或更新版本的 Amazon EKS 叢集,具有由 Karpenter、EKS 受管節點群組或自我管理節點群組佈建的靜態容量。

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

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

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

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

程序

重要

使用 NVIDIA DRA 驅動程式進行 GPU 裝置管理時,請勿將其與 NVIDIA 裝置外掛程式一起部署在同一個節點上。這樣做可能會導致基礎裝置的靜音過度訂閱到相同節點上的多個 Pod。

在 Bottlerocket 上停用內建 NVIDIA 裝置外掛程式

EKS 最佳化 Bottlerocket NVIDIA 變體包含 NVIDIA 裝置外掛程式,並預設啟用它。DRA 驅動程式無法與相同節點上的裝置外掛程式一起執行。使用 DRA 驅動程式之前,請先停用 Bottlerocket GPU 節點上的內建裝置外掛程式。Bottlerocket 節點使用者資料false中的 settings.kubelet-device-plugins.nvidia.enabled設定為 。

[settings.kubelet-device-plugins.nvidia] enabled = false

settings.kubelet-device-plugins.nvidia.enabled設定可在 Bottlerocket 1.63.0 版及更新版本中使用。在舊版上,無法停用內建 NVIDIA 裝置外掛程式。如需詳細資訊,請參閱 GitHub 上的 bottlerocket-os/bottlerocket pull request #4856

  1. 直接從 Kubernetes SIG OCI 登錄檔安裝 NVIDIA DRA 驅動程式。若要尋找可用的版本,請參閱 GitHub 上的 NVIDIA DRA 驅動程式版本

    helm install dra-driver-nvidia-gpu \ oci://registry.k8s.io/dra-driver-nvidia/charts/dra-driver-nvidia-gpu \ --version 0.4.1 \ --create-namespace \ --namespace nvidia \ --set resources.computeDomains.enabled=false \ --set gpuResourcesEnabledOverride=true

    如需進階組態選項,請參閱 Kubernetes SIG 網站上的 NVIDIA DRA 驅動程式 Helm Chart 值。若要查看特定圖表版本的可用值,請執行 helm show values oci://registry.k8s.io/dra-driver-nvidia/charts/dra-driver-nvidia-gpu --version 0.4.1

  2. (選用) 若要透過 DRA 驅動程式使用時間分割,請在上一個步驟中將TimeSlicingSettings功能閘道新增至helm install命令。這是預設停用的 Alpha 功能。如需詳細資訊,請參閱搭配 NVIDIA DRA 驅動程式使用 GPU 時間分割

    --set featureGates.TimeSlicingSettings=true
  3. (選用) 若要透過 DRA 驅動程式使用動態 MIG,請在上一個步驟中將DynamicMIG功能閘道新增至helm install命令。這是預設停用的 Alpha 功能。您無法將DynamicMIG功能閘道與 PassthroughSupportNVMLDeviceHealthCheckMPSSupport功能閘道結合。如需詳細資訊,請參閱搭配 NVIDIA DRA 驅動程式使用 MIG

    --set featureGates.DynamicMIG=true
  4. 確認 DRA 驅動程式 Pod 正在執行。

    kubectl get pods -n nvidia
  5. 確認DeviceClass物件已建立。

    kubectl get deviceclass
    NAME AGE gpu.nvidia.com 60s
  6. 確認已為您的 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: gpu-demo image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal command: ["/bin/sh", "-c"] args: ["nvidia-smi && tail -f /dev/null"] 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 叢集。

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

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

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

  • 已在命令列環境中安裝 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 \ --create-namespace \ --namespace nvidia
    選用:啟用 GPU 功能探索 (GFD)

    裝置外掛程式會公告nvidia.com/gpu擴充的資源,並自行排程 GPU Pod。在 EKS 最佳化 AL2023 NVIDIA AMI 上,nvidia.com/gpu.present=true節點標籤已由 於開機時套用nodeadm,因此基本 GPU 排程不需要 GPU 功能探索 (GFD)。

    --set gfd.enabled=true 如果您想要以詳細 GPU 屬性標記節點,例如 nvidia.com/gpu.productnvidia.com/gpu.memorynvidia.com/gpu.count、MIG 設定檔標籤和驅動程式/CUDA 版本,請使用 啟用 GFD。透過這些標籤,您可以以具有 nodeSelector或 節點親和性的特定 GPU 類型為目標 (例如,僅將工作負載排程到 A10G GPUs 或特定 MIG 設定檔)。時間分割和 MIG 等 GPU 共用組態也會使用這些標籤。如果您不需要屬性型節點選擇或 GPU 共用,則可以省略 旗標。

    helm install nvdp nvdp/nvidia-device-plugin \ --create-namespace \ --namespace nvidia \ --set gfd.enabled=true
    如果您的工作負載使用 GDRCopy

    k8s-device-plugin v0.19.0 到 v0.19.2 預設啟用 GDRCopy 和 MOFED 功能。此預設啟用已在 v0k8s-device-plugin.19.3 中還原。由於還原,無法再使用 Pod 規格中的NVIDIA_GDRCOPY=enabled環境變數為每個容器啟用 GDRCopy (gdrdrv),現在會忽略該變數。

    如果您的工作負載使用 GDRCopy (GPUDirect RDMA 複本),您必須在安裝時透過設定 ,在裝置外掛程式上啟用它gdrcopyEnabled=true

    helm upgrade --install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gdrcopyEnabled=true

    (如果您也想要 GPU 功能探索標籤,--set gfd.enabled=true也請新增 ,如前所述。)

    如果您透過 GitHub 上的 NVIDIA GPU Operator 管理 NVIDIA 裝置外掛程式,該運算子會在gdrdrv核心模組載入節點GDRCOPY_ENABLED=true時動態設定。

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

    注意

    您也可以使用 GitHub 上的 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 | +-----------------------------------------------------------------------------------------+