協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon EKS 上使用 NVIDIA DRA 驅動程式或裝置外掛程式
Amazon EKS 支援兩種在 EKS 叢集中管理 NVIDIA GPU 裝置的機制:GPUs 的 NVIDIA DRA 驅動程式和 NVIDIA Kubernetes 裝置外掛程式。
在 Karpenter、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 模型、記憶體、驅動程式版本和拓撲等 |
|
|
GPU 共用 |
(Alpha) 動態 MIG、MPS、時間分割 |
(GA) 靜態 MIG、MPS、時間分割 |
|
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。
先決條件
-
執行 Kubernetes 1.34 版或更新版本的 Amazon EKS 叢集,具有由 Karpenter、EKS 受管節點群組或自我管理節點群組佈建的靜態容量。
-
具有 NVIDIA GPU 執行個體類型的節點 (例如
P或G執行個體)。 -
針對 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
-
直接從 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 \ --version0.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。 -
(選用) 若要透過 DRA 驅動程式使用時間分割,請在上一個步驟中將
TimeSlicingSettings功能閘道新增至helm install命令。這是預設停用的 Alpha 功能。如需詳細資訊,請參閱搭配 NVIDIA DRA 驅動程式使用 GPU 時間分割。--set featureGates.TimeSlicingSettings=true -
(選用) 若要透過 DRA 驅動程式使用動態 MIG,請在上一個步驟中將
DynamicMIG功能閘道新增至helm install命令。這是預設停用的 Alpha 功能。您無法將DynamicMIG功能閘道與PassthroughSupport、NVMLDeviceHealthCheck或MPSSupport功能閘道結合。如需詳細資訊,請參閱搭配 NVIDIA DRA 驅動程式使用 MIG。--set featureGates.DynamicMIG=true -
確認 DRA 驅動程式 Pod 正在執行。
kubectl get pods -n nvidia -
確認
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: 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 執行個體類型的節點 (例如
P或G執行個體)。 -
使用 EKS 最佳化 AL2023 NVIDIA AMI 搭配 NVIDIA GPU 執行個體類型的節點。EKS 最佳化 Bottlerocket AMIs包含 NVIDIA 裝置外掛程式。您不需要單獨安裝。
-
針對 NVIDIA GPUs 安裝主機層級元件的節點。使用 EKS 最佳化 AL2023 或 Bottlerocket NVIDIA AMIs 時,會預先安裝主機層級 NVIDIA 驅動程式、CUDA 使用者模式驅動程式和容器工具組。
-
已在命令列環境中安裝 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 \ --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.product、nvidia.com/gpu.memory、nvidia.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-pluginv0.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 軟體元件。 -
驗證 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 | +-----------------------------------------------------------------------------------------+