本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 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 cordonNODE_NAME# Example: kubectl cordon hyperpod-i-014a41a7001adca60
從節點耗盡工作負載 Pod
耗盡節點以移出所有工作負載 Pod,同時保留系統 Pod:
# Drain the node (ignore DaemonSets and evict pods) kubectl drainNODE_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-system、cert-manager、kubeflow、hyperpod-inference-system、kube-public、mpi-operator、gpu-operatoraws-hyperpod、jupyter-k8s-system、hyperpod-observability、、kueue-system和keda -
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 --nameyour-eks-cluster--regionus-east-2# Check MIG labels kubectl get nodeNODE_NAME-o=jsonpath='{.metadata.labels}' | grep mig # Check available MIG resources kubectl describe nodeNODE_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 建立新的叢集
-
導覽至 Amazon SageMaker AI > HyperPod 叢集 > 叢集管理 > 建立 HyperPod 叢集
-
選取由 EKS 協調
-
選擇自訂設定並確認 GPU Operator 預設已啟用
-
在執行個體群組區段下,按一下新增群組
-
設定執行個體群組並導覽至進階組態,以啟用使用 GPU 分割區切換並從下拉式清單中選擇所需的 MIG 組態
-
按一下新增執行個體群組並完成剩餘的叢集組態
-
按一下提交以建立叢集
更新現有叢集上的 MIG 組態
-
導覽至 Amazon SageMaker AI > HyperPod 叢集 > 叢集管理
-
選取現有的叢集,然後按一下您要修改的執行個體群組上的編輯
-
在進階組態中,如果尚未啟用,請切換使用 GPU 分割區,然後從下拉式清單中選取不同的 MIG 組態
-
按一下儲存變更