協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 模型、記憶體、驅動程式版本和拓撲等 |
|
|
GPU 共用 |
相同 Pod 中的多個容器可以透過共用 |
不支援。每個 GPU 只會配置給一個容器。 |
|
ComputeDomains |
透過 |
不支援 |
|
以屬性為基礎的選擇 |
使用 CEL 表達式,依模型、記憶體或其他屬性篩選 GPUs |
不支援 |
|
拓撲感知 EFA 配置 |
DRA 原生拓撲感知 |
自動拓撲感知 (僅限 EKS 最佳化 AL2023 AMIs) |
安裝 NVIDIA DRA 驅動程式
適用於 GPUs 的 NVIDIA DRA 驅動程式可管理兩種類型的資源:GPUs 和 ComputeDomains。它執行兩個 DRA kubelet 外掛程式: gpu-kubelet-plugin和 compute-domain-kubelet-plugin。每個 都可以在安裝期間分別啟用或停用。本指南著重於 GPU 配置。如需使用 ComputeDomains 的詳細資訊,請參閱 搭配 Amazon EKS 使用 P6e-GB200 UltraServers。
先決條件
-
使用 EKS 受管節點群組或自我管理節點群組執行 Kubernetes 1.34 版或更新版本的 Amazon EKS 叢集。
-
具有 NVIDIA GPU 執行個體類型的節點 (例如
P或G執行個體)。 -
針對 NVIDIA GPUs 安裝主機層級元件的節點。使用 EKS 最佳化 AL2023 或 Bottlerocket NVIDIA AMIs 時,會預先安裝主機層級 NVIDIA 驅動程式、CUDA 使用者模式驅動程式和容器工具組。
-
已在命令列環境中安裝 Helm,如需詳細資訊,請參閱安裝 Helm 說明。
-
kubectl設定為與您的叢集通訊,安裝或更新 kubectl如需詳細資訊,請參閱 。
程序
重要
使用 NVIDIA DRA 驅動程式進行 GPU 裝置管理時,無法與相同節點上的 NVIDIA 裝置外掛程式一起部署。如需更新,請參閱上游 Kubernetes KEP-5004
重要
目前不支援搭配 Bottlerocket 使用 NVIDIA DRA 驅動程式。
-
新增 NVIDIA DRA 驅動程式 Helm Chart 儲存庫。
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia -
更新本機 Helm 儲存庫。
helm repo update -
取得最新版本的 NVIDIA DRA 驅動程式。
helm search repo nvidia/nvidia-dra -
安裝 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
。 -
確認 DRA 驅動程式 Pod 正在執行。
kubectl get pods -n nvidia-dra-driver-gpu -
確認
DeviceClass物件已建立。kubectl get deviceclassNAME AGE gpu.nvidia.com 60s -
確認已為您的 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如需詳細資訊,請參閱 。
程序
-
新增 NVIDIA 裝置外掛程式 Helm Chart 儲存庫。
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin -
更新本機 Helm 儲存庫。
helm repo update -
安裝 NVIDIA Kubernetes 裝置外掛程式。
helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=true在具有 EFA 裝置的節點上停用 MOFED
從
k8s-device-pluginv0.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 軟體元件。 -
驗證 NVIDIA 裝置外掛程式 DaemonSet 正在執行。
kubectl get ds -n nvidia nvdp-nvidia-device-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvdp-nvidia-device-plugin 2 2 2 2 2 <none> 60s -
確認您的節點具有可配置的 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 | +-----------------------------------------------------------------------------------------+