本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在亚马逊上设置 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 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 将保持运行状态:
kube-system、cert-manager、、kubeflow、hyperpod-inference-system、kube-public、mpi-operator、gpu-operator、、aws-hyperpod、jupyter-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 --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 运算符
-
在 “实例组” 部分下,单击 “添加组”
-
配置实例组并导航到高级配置以启用 “使用 GPU 分区” 切换,然后从下拉列表中选择所需的 MIG 配置
-
单击 “添加实例组” 并完成剩余的集群配置
-
单击 “提交” 创建集群
更新现有集群上的 MIG 配置
-
导航至 Amazon SageMaker AI > HyperPod 集群 > 集群管理
-
选择您的现有集群,然后在要修改的实例组上单击编辑
-
在高级配置中,切换使用 GPU 分区(如果尚未启用),然后从下拉列表中选择不同的 MIG 配置
-
点击保存更改