View a markdown version of this page

在亚马逊上设置 GPU 分区 SageMaker HyperPod - 亚马逊 SageMaker AI

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在亚马逊上设置 GPU 分区 SageMaker HyperPod

先决条件

  • HyperPod 支持的 GPU 实例的 Amazon EKS 集群

  • 已安装 NVIDIA GP

  • 用于集群管理的适当的 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 操作员

{$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 操作员舱是否正在运行:

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 容量。它应该显示: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 将保持运行状态:kube-systemcert-manager、、kubeflowhyperpod-inference-systemkube-publicmpi-operatorgpu-operator、、aws-hyperpodjupyter-k8s-systemhyperpod-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 --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-XXXXXnvidia-device-plugin-XXXXX替换为集群中的实际 pod NODE_NAME 名称以及节点的名称。

使用 SageMaker AI 控制台

使用 MIG 创建新集群

  1. 导航至 Amazon SageMaker AI > HyperPod 集群 > 集群管理 > 创建 HyperPod 集群

  2. 选择由 EKS 精心编排

  3. 选择 “自定义设置” 并确认默认情况下已启用 GPU 运算符

  4. 实例组部分下,点击添加组

  5. 配置实例组并导航到高级配置以启用 “使用 GPU 分区” 切换,然后从下拉列表中选择所需的 MIG 配置

  6. 点击添加实例组并完成其余的集群配置

  7. 单击 “提交” 创建集群

更新现有集群上的 MIG 配置

  1. 导航至 Amazon SageMaker AI > HyperPod 集群 > 集群管理

  2. 选择您的现有集群,然后在要修改的实例组上单击编辑

  3. 高级配置中,切换使用 GPU 分区(如果尚未启用),然后从下拉列表中选择不同的 MIG 配置

  4. 单击 “保存更改