協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 模型、記憶體、驅動程式版本和拓撲等 |
|
|
GPU 共用 |
相同 Pod 中的多個容器可以透過共用 |
不支援。每個 GPU 只會配置給一個容器。 |
|
ComputeDomains |
透過 |
不支援 |
|
以屬性為基礎的選擇 |
使用 CEL 表達式,依模型、記憶體或其他屬性篩選 GPUs |
不支援 |
安裝 NVIDIA DRA 驅動程式
適用於 GPUs 的 NVIDIA DRA 驅動程式可管理兩種類型的資源:GPUs 和 ComputeDomains。它執行兩個 DRA kubelet 外掛程式: gpu-kubelet-plugin和 compute-domain-kubelet-plugin。每個 都可以在安裝期間分別啟用或停用。本指南著重於 GPU 配置。如需使用 ComputeDomains 的詳細資訊,請參閱 搭配 Amazon EKS 使用 P6e-GB200 UltraServers。
目前不支援搭配 Bottlerocket 使用 NVIDIA DRA 驅動程式。
先決條件
-
執行 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
-
新增 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
在 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如需詳細資訊,請參閱 。
程序
-
新增 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注意
您也可以使用 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 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 | +-----------------------------------------------------------------------------------------+