協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
部署加速工作負載
本教學課程示範 Amazon EKS Auto Mode 如何簡化啟動加速工作負載。Amazon EKS Auto Mode 透過自動化關鍵基礎設施元件,立即提供運算、聯網、負載平衡、儲存以及身分存取和管理功能,簡化叢集本身以外的操作。
Amazon EKS Auto Mode 包含特定執行個體類型所需的驅動程式和裝置外掛程式,例如 NVIDIA 和 AWS Neuron 驅動程式。您不需要安裝或更新這些元件。
EKS Auto Mode 會自動管理這些加速器的驅動程式:
注意
EKS Auto Mode 包含適用於 Kubernetes 的 NVIDIA 裝置外掛程式。此外掛程式會自動執行,不會在您的叢集中顯示為協助程式集。
其他聯網支援:
Amazon EKS Auto Mode 可消除加速器驅動程式和裝置外掛程式管理。
您也可以透過將叢集擴展到零來節省成本。您可以設定 EKS Auto 模式,在沒有工作負載執行時終止執行個體。這適用於批次型推論工作負載。
以下提供如何使用 Amazon EKS Auto Mode 啟動加速工作負載的範例。
先決條件
-
已設定 Amazon EKS Auto 模式的 Kubernetes 叢集。
-
啟用
defaultgeneral-purpose或system受管節點集區時建立的 EKS 節點類別。
步驟 1:部署 GPU 工作負載
在此範例中,您將為需要 45GB GPU 記憶體的 NVIDIA 工作負載建立 NodePool。使用 EKS Auto 模式時,您可以使用 Kubernetes 排程限制來定義執行個體需求。
若要部署 Amazon EKS Auto Mode NodePool和範例 workload,請檢閱下列 NodePool 和 Pod 定義,並儲存為 nodepool-gpu.yaml和 pod.yaml:
nodepool-gpu.yaml
apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: gpu spec: disruption: budgets: - nodes: 10% consolidateAfter: 1h consolidationPolicy: WhenEmpty template: metadata: {} spec: nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: default requirements: - key: "karpenter.sh/capacity-type" operator: In values: ["on-demand"] - key: "kubernetes.io/arch" operator: In values: ["amd64"] - key: "eks.amazonaws.com/instance-family" operator: In values: - g6e - g6 taints: - key: nvidia.com/gpu effect: NoSchedule terminationGracePeriod: 24h0m0s
pod.yaml
apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: nodeSelector: eks.amazonaws.com/compute-type: auto restartPolicy: OnFailure containers: - name: nvidia-smi image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal args: - "nvidia-smi" resources: requests: memory: "30Gi" cpu: "3500m" nvidia.com/gpu: 1 limits: memory: "30Gi" nvidia.com/gpu: 1 tolerations: - key: nvidia.com/gpu effect: NoSchedule operator: Exists
請注意,eks.amazonaws.com/compute-type: auto選擇器需要在 Amazon EKS Auto Mode 節點上部署工作負載。NodePool 也會設定一個污點,僅允許排程具有 Nvidia GPUs 容錯能力的 Pod。
將 NodePool 和工作負載套用至您的叢集。
kubectl apply -f nodepool-gpu.yaml kubectl apply -f pod.yaml
您應該會看到下列輸出:
nodepool.karpenter.sh/gpu configured created pod/nvidia-smi created
等待幾秒鐘,然後檢查叢集中的節點。您現在應該會在 Amazon EKS Auto Mode 叢集中看到佈建的新節點:
> kubectl get nodes NAME TYPE CAPACITY ZONE NODE READY AGE gpu-dnknr g6e.2xlarge on-demand us-west-2b i-02315c7d7643cdee6 True 76s
步驟 2:驗證
根據下列 Kubernetes 排程限制,您可以看到 Amazon EKS Auto Mode 啟動了 g6e.2xlarge,而不是 GPU,g6.2xlarge因為工作負載需要具有 l40s 的執行個體:
... nodeSelector: eks.amazonaws.com/instance-gpu-name: l40s ... requests: memory: "30Gi" cpu: "3500m" nvidia.com/gpu: 1 limits: memory: "30Gi" nvidia.com/gpu: 1
現在,執行下列命令來查看容器日誌:
kubectl logs nvidia-smi
輸出範例:
+---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.230.02 Driver Version: 535.230.02 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | 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 L40S On | 00000000:30:00.0 Off | 0 | | N/A 27C P8 23W / 350W | 0MiB / 46068MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | No running processes found | +---------------------------------------------------------------------------------------+
您可以看到容器偵測到它正在具有 NVIDIA GPU 的執行個體上執行,而且您不需要安裝任何裝置驅動程式,因為這是由 Amazon EKS Auto Mode 管理。
步驟 3:清除
若要移除所有建立的物件,請使用 kubectl 刪除範例部署和 NodePool,讓節點終止:
kubectl delete -f nodepool-gpu.yaml kubectl delete -f pod.yaml
NodePools 參考範例
建立 NVIDIA NodePool
下列 NodePool 定義:
-
僅啟動
g6e和g6系列的執行個體 -
閒置 1 小時時合併節點
-
的 1 小時值
consolodateAfter支援尖峰工作負載並減少節點流失。您可以consolidateAfter根據您的工作負載需求進行調整。
-
具有 GPU 執行個體系列和整合的範例 NodePool
apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: gpu spec: disruption: budgets: - nodes: 10% consolidateAfter: 1h consolidationPolicy: WhenEmpty template: metadata: {} spec: nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: default requirements: - key: "karpenter.sh/capacity-type" operator: In values: ["on-demand"] - key: "kubernetes.io/arch" operator: In values: ["amd64"] - key: "eks.amazonaws.com/instance-family" operator: In values: - g6e - g6 terminationGracePeriod: 24h0m0s
而不是設定eks.amazonaws.com/instance-gpu-name您eks.amazonaws.com/instance-family可用來指定執行個體系列的 。如需影響排程檢閱的其他已知標籤,請參閱 EKS 自動模式支援的標籤。
如果您有特定的儲存需求iops,您可以透過建立自己的 NodeClass 以在 NodePool 中參考throughput來調整節點暫時性儲存 size和 。進一步了解可設定的 NodeClass 選項。
NodeClass 的範例儲存組態
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: gpu spec: ephemeralStorage: iops: 3000 size: 80Gi throughput: 125
定義 AWS Trainium 和 AWS Inferentia NodePool
下列 NodePool 具有 eks.amazonaws.com/instance-category集合,其中僅啟動 Inferentia 和 Trainium 系列的執行個體:
- key: "eks.amazonaws.com/instance-category"
operator: In
values:
- inf
- trn