在 Amazon SageMaker HyperPod 上設定 GPU 分割區 - Amazon SageMaker AI

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

在 Amazon SageMaker HyperPod 上設定 GPU 分割區

先決條件

  • 具有支援 GPU 執行個體的 HyperPod Amazon EKS 叢集

  • 已安裝 NVIDIA GPU Operator

  • 叢集管理的適當 IAM 許可

使用 MIG 組態建立叢集

使用AWS CLI

aws sagemaker create-cluster \ --cluster-name my-mig-cluster \ --orchestrator 'Eks={ClusterArn=arn:aws:eks:region:account:cluster/cluster-name}' \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://my-bucket", "OnCreate": "on_create_script.sh" }, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-1g.5gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role", "ThreadsPerCore": 1 }' \ --vpc-config '{ "SecurityGroupIds": ["sg-12345"], "Subnets": ["subnet-12345"] }' \ --node-provisioning-mode Continuous

使用CloudFormation

{ "ClusterName": "my-mig-cluster", "InstanceGroups": [ { "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-2g.10gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" } ], "Orchestrator": { "Eks": { "ClusterArn": "arn:aws:eks:region:account:cluster/cluster-name" } }, "NodeProvisioningMode": "Continuous" }

將 GPU 運算子新增至現有叢集

安裝 GPU Operator

將 取代{$AWS_REGION}為您的叢集區域 (例如 us-east-1、us-west-2)。

helm install gpuo helm_chart/HyperPodHelmChart/charts/gpu-operator \ -f helm_chart/HyperPodHelmChart/charts/gpu-operator/regional-values/values-{$AWS_REGION}.yaml \ -n kube-system

驗證安裝 (等待 2-3 分鐘)

檢查所有 GPU 運算子 Pod 正在執行:

kubectl get pods -n kube-system | grep -E "(gpu-operator|nvidia-)"

預期的 Pod:

  • gpu-operator-* - 1 個執行個體 (叢集控制器)

  • nvidia-device-plugin-daemonset-* - 每個 GPU 節點 1 個 (所有 GPU 執行個體)

  • nvidia-mig-manager-* - 每個具備 MIG 功能的節點 1 個 (A100/H100)

移除舊的裝置外掛程式

停用現有的 nvidia-device-plugin:

helm upgrade dependencies helm_chart/HyperPodHelmChart \ --set nvidia-device-plugin.devicePlugin.enabled=false \ -n kube-system

驗證 GPU 資源

確認節點顯示 GPU 容量。它應該顯示:https://nvidia.com/gpu:8 (或實際的 GPU 計數)。

kubectl describe nodes | grep "nvidia.com/gpu"

更新 MIG 組態

在 MIG 更新之前準備節點

更新執行個體群組上的 MIG 組態之前,您必須準備節點,以防止工作負載中斷。請依照下列步驟,安全地從要重新設定的節點耗盡工作負載。

步驟 1:識別執行個體群組中的節點

首先,識別屬於您要更新之執行個體群組的所有節點:

# List all nodes in the instance group kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME # Example: kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=p4d-group

此命令會傳回指定執行個體群組中所有節點的清單。請記下下列步驟的每個節點名稱。

步驟 2:封鎖和耗盡每個節點

針對步驟 1 中識別的每個節點,執行下列動作:

編寫節點

繫結可防止在節點上排程新的 Pod:

# Cordon a single node kubectl cordon NODE_NAME # Example: kubectl cordon hyperpod-i-014a41a7001adca60

從節點耗盡工作負載 Pod

耗盡節點以移出所有工作負載 Pod,同時保留系統 Pod:

# Drain the node (ignore DaemonSets and evict pods) kubectl drain NODE_NAME \ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300 # Example: kubectl drain hyperpod-i-014a41a7001adca60 \ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300

命令選項說明:

  • --ignore-daemonsets - 允許即使 DaemonSet Pod 存在,也會繼續耗盡操作

  • --delete-emptydir-data - 使用 emptyDir 磁碟區刪除 Pod (成功耗盡需要)

  • --force - 強制刪除非由控制器管理的 Pod (請謹慎使用)

  • --grace-period=300 - 給予 Pod 5 分鐘的時間來正常終止

重要
  • 耗盡操作可能需要幾分鐘的時間,取決於 Pod 數量及其終止寬限期

  • 下列命名空間中的系統 Pod 將繼續執行:kube-systemcert-managerkubeflowhyperpod-inference-systemkube-publicmpi-operatorgpu-operatoraws-hyperpodjupyter-k8s-systemhyperpod-observability、、 kueue-systemkeda

  • DaemonSet Pod 將保留在節點上 (它們會被設計忽略)

步驟 3:確認沒有工作負載 Pod 正在執行

耗盡後,請確認節點上沒有剩餘的工作負載 Pod (系統命名空間除外):

# Check for any remaining pods outside system namespaces kubectl get pods --all-namespaces --field-selector spec.nodeName=NODE_NAME \ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda" # Example: kubectl get pods --all-namespaces --field-selector spec.nodeName=hyperpod-i-014a41a7001adca60 \ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda"

預期輸出:如果節點已正確耗盡,此命令應該不會傳回任何結果 (或僅顯示標頭列)。如果有任何 Pod 仍在執行中,請調查他們為何未被移出,並視需要手動刪除。

步驟 4:驗證節點就緒狀態

繼續 MIG 更新之前,請確認所有節點都已封鎖:

# Check node status - should show "SchedulingDisabled" kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME

節點應該SchedulingDisabled會顯示在 STATUS 欄中,表示它們已封鎖並準備好進行 MIG 更新。

更新現有叢集上的 MIG 設定檔

您可以在現有叢集上變更 MIG 設定檔:

aws sagemaker update-cluster \ --cluster-name my-mig-cluster \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-3g.20gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" }'
注意

如果任務已在節點上執行,則 MIG 分割將會失敗。使用者會收到錯誤訊息,以便在重新嘗試 MIG 分割之前耗盡節點。

驗證 MIG 組態

建立或更新叢集之後,請驗證 MIG 組態:

# Update kubeconfig aws eks update-kubeconfig --name your-eks-cluster --region us-east-2 # Check MIG labels kubectl get node NODE_NAME -o=jsonpath='{.metadata.labels}' | grep mig # Check available MIG resources kubectl describe node NODE_NAME | grep -A 10 "Allocatable:"

偵錯 MIG 組態的常見命令

使用下列命令來疑難排解和驗證叢集中的 MIG 組態:

# Check GPU Operator status kubectl get pods -n gpu-operator-resources # View MIG configuration kubectl exec -n gpu-operator-resources nvidia-driver-XXXXX -- nvidia-smi mig -lgi # Check device plugin configuration kubectl logs -n gpu-operator-resources nvidia-device-plugin-XXXXX # Monitor node events kubectl get events --field-selector involvedObject.name=NODE_NAME
注意

nvidia-driver-XXXXX和 取代nvidia-device-plugin-XXXXX為您的叢集的實際 Pod 名稱,並將 NODE_NAME取代為您的節點名稱。

使用 SageMaker AI 主控台

使用 MIG 建立新的叢集

  1. 導覽至 Amazon SageMaker AI > HyperPod 叢集 > 叢集管理 > 建立 HyperPod 叢集

  2. 選取由 EKS 協調

  3. 選擇自訂設定並確認 GPU Operator 預設已啟用

  4. 執行個體群組區段下,按一下新增群組

  5. 設定執行個體群組並導覽至進階組態,以啟用使用 GPU 分割區切換並從下拉式清單中選擇所需的 MIG 組態

  6. 按一下新增執行個體群組並完成剩餘的叢集組態

  7. 按一下提交以建立叢集

更新現有叢集上的 MIG 組態

  1. 導覽至 Amazon SageMaker AI > HyperPod 叢集 > 叢集管理

  2. 選取現有的叢集,然後按一下您要修改的執行個體群組上的編輯

  3. 進階組態中,如果尚未啟用,請切換使用 GPU 分割區,然後從下拉式清單中選取不同的 MIG 組態

  4. 按一下儲存變更