安装训练操作符 - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

安装训练操作符

请参阅以下各部分,了解如何安装训练操作符。

先决条件

在使用 HyperPod 训练操作员之前,您必须满足以下先决条件:

  • 使用 Amazon EKS 编排创建了一个 HyperPod 集群

  • 在您的 HyperPod 集群上安装了最新的 AMI。有关更多信息,请参阅 SageMaker HyperPod 亚马逊 EKS 的 AMI 发布

  • 已安装 cert-manager

  • 使用控制台设置 EKS 容器组身份代理。如果要使用Amazon CLI,请使用以下命令:

    aws eks create-addon \ --cluster-name my-eks-cluster \ --addon-name eks-pod-identity-agent \ --region Amazon Web Services 区域
  • (可选)如果您在私有 VPC 中运行 HyperPod 集群节点,则必须为亚马逊 AI AP SageMaker I (com.amazonaws.aws-region.sagemaker.api) 和亚马逊 EKS 身份验证服务 (com.amazonaws) 设置 PrivateLinks VPC 终端节点。 aws-region.eks-auth)。您还必须确保您的集群节点运行的子网位于安全组中,该安全组允许流量通过 VPC 终端节点进行路由,以便与 SageMaker AI 和 Amazon EKS 通信。如果这些设置不正确,插件安装可能会失败。要了解有关设置 VPC 终端节点的更多信息,请参阅创建 VPC 终端节点

安装训练操作符

现在,您可以通过 SageMaker AI 控制台、Amazon EKS 控制台或使用控制台方法安装 HyperPod 培训操作员,这些方法提供了可帮助您安装操作员的简化体验。Amazon CLIAmazon CLI提供了一种编程方法,可让您自定义更多安装内容。

在这两种控制台体验之间, SageMaker AI 提供一键安装,创建 IAM 执行角色,创建 pod 身份关联并安装操作员。Amazon EKS 控制台安装与此类似,但此方法不会自动创建 IAM 执行角色。在此过程中,您可以选择利用控制台预填充的信息创建新的 IAM 执行角色。默认情况下,这些创建的角色只能访问要在其中安装操作符的当前集群。除非您编辑该角色的权限以包含其他集群,否则,如果您移除并重新安装操作符,则必须创建一个新角色。

SageMaker AI console (recommended)
  1. 打开 Amazon A SageMaker I 控制台,网址为https://console.aws.amazon.com/sagemaker/

  2. 转到集群的详细信息页面。

  3. 在 “控制面板” 选项卡上,找到名为 Amazon SageMaker HyperPod 培训操作员的插件,然后选择安装。在安装过程中,A SageMaker I 会创建一个 IAM 执行角色,其权限与 AmazonSageMakerHyperPodTrainingOperatorAccess托管策略类似,并在您的 Amazon EKS 集群和新的执行角色之间创建 Pod 身份关联。

Amazon EKS console
注意

如果您通过 Amazon EKS 集群安装附加组件,请首先确保已使用键值对标记您的 HyperPod 集群。SageMaker:true否则,安装将失败。

  1. https://console.aws.amazon.com/eks/home#/ clusters 中打开 Amazon EKS 控制台。

  2. 转至您的 EKS 集群,选择附加组件,然后选择获取更多插件

  3. 选择 Amazon SageMaker HyperPod 培训运营商,然后选择下一步

  4. 版本下,控制台默认显示最新版本,建议您使用该版本。

  5. 插件访问权限下,选择要与训练操作符附加组件结合使用的容器组身份 IAM 角色。如果您还没有角色,请选择创建推荐的角色以创建一个角色。

  6. 在此角色创建过程中,IAM 控制台会预先填充所有必要的信息,例如用例、 AmazonSageMakerHyperPodTrainingOperatorAccess托管策略和其他所需权限、角色名称和描述。在完成这些步骤时,请查看信息,然后选择创建角色

  7. 在 EKS 控制台中,查看附加组件的设置,然后选择创建

CLI
  1. 确保 HyperPod 集群的 IAM 执行角色具有信任关系,允许 EKS Pod Identity 使用以下信任策略代入角色或创建新的 IAM 角色。或者,您可以使用 Amazon EKS 控制台安装该附加组件,从而创建推荐的角色。

    JSON
    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession", "eks-auth:AssumeRoleForPodIdentity" ] } ] }
  2. AmazonSageMakerHyperPodTrainingOperatorAccess 托管策略附加到您创建的角色。

  3. 随后,在您的 EKS 集群、IAM 角色和新 IAM 角色之间创建容器组身份关联

    aws eks create-pod-identity-association \ --cluster-name my-eks-cluster \ --role-arn ARN of your execution role \ --namespace aws-hyperpod \ --service-account hp-training-operator-controller-manager \ --region Amazon Web Services 区域
  4. 完成该过程后,您可以使用 ListPodIdentityAssociations 操作来查看您创建的关联。以下是其内容的示例响应。

    aws eks list-pod-identity-associations --cluster-name my-eks-cluster { "associations": [{ "clusterName": "my-eks-cluster", "namespace": "aws-hyperpod", "serviceAccount": "hp-training-operator-controller-manager", "associationArn": "arn:aws:eks:us-east-2:123456789012:podidentityassociation/my-hyperpod-cluster/a-1a2b3c4d5e6f7g8h9", "associationId": "a-1a2b3c4d5e6f7g8h9" }] }
  5. 要安装训练操作符,请使用 create-addon 操作。--addon-version 参数是可选的。如果您不提供版本,则默认为最新版本。要获取可能的版本,请使用 DescribeAddonVersions操作。

    aws eks create-addon \ --cluster-name my-eks-cluster \ --addon-name amazon-sagemaker-hyperpod-training-operator \ --resolve-conflicts OVERWRITE

如果您的 HyperPod 集群上已经安装了培训操作员,则可以将 EKS 插件更新到所需的版本。如果你想使用无检查点训练或弹性训练,请考虑以下几点:

  • 无检查点训练和弹性训练都要求 EKS 插件必须在 1.2.0 或更高版本上。

  • Amazon SageMaker HyperPod 培训运营商保持对任何 EKS 附加版本的向后兼容性,因此您可以从任何附加版本升级到 1.2.0 或更高版本。

  • 如果您从 1.2.0 或更高版本降级到较低版本,则必须在降级之前先删除现有作业,并在降级完成后重新提交作业。

Amazon EKS Console
  1. https://console.aws.amazon.com/eks/home#/ clusters 中打开 Amazon EKS 控制台。

  2. 前往您的 EKS 集群,然后选择附加组件。然后,选择 Amazon SageMaker HyperPod 培训操作员附加组件,然后选择编辑

  3. 在 “版本” 菜单中,选择所需的插件版本,然后选择 “保存更改”。

CLI
  1. 首先获取您的集群支持的插件版本列表。

    aws eks describe-addon-versions \ --kubernetes-version $(aws eks describe-cluster --name my-eks-cluster --query 'cluster.version' --output text) \ --addon-name amazon-sagemaker-hyperpod-training-operator \ --query 'addons[0].addonVersions[].addonVersion' \ --output table
  2. 然后将插件更新到你想要的版本。

    aws eks update-addon \ --cluster-name my-eks-cluster \ --addon-name amazon-sagemaker-hyperpod-training-operator \ --addon-version target-version --resolve-conflicts OVERWRITE

训练操作符提供了大量带默认值的选项,这些选项可能适合您的使用案例。我们建议您在更改训练操作符之前,先尝试使用默认值运行训练操作符。下表描述了所有参数,以及您可能需要配置每个参数的场景示例。

参数 说明 默认
hpTrainingControllermanager.manager.resources.reques 要为控制器分配的处理器数 1
hpTrainingControllermanager.manager.resources.reques 要为控制器分配的内存量 2Gi
hpTrainingControllermanager.manager.resources.limits 控制器的 CPU 限制 2
hpTrainingControllermanager.manager.resources.Limits 控制器的内存限制 4Gi
hpTrainingController管理器节点选择器 控制器容器组(pod)的节点选择器 默认行为是选择带标签 sagemaker.amazonaws.com/compute-type: "HyperPod" 的节点

HyperPod 弹性剂

HyperPod 弹性剂是 PyTorch's 的延伸 ElasticAgent。它协调每个容器上培训工作人员的生命周期,并与培训操作员进行沟通。 HyperPod 要使用 HyperPod 训练操作员,必须先将 HyperPod 弹性代理安装到训练图像中,然后才能使用操作员提交和运行作业。以下是一个 docker 文件,用于安装弹性代理并使用 hyperpodrun 创建作业启动器。

RUN pip install hyperpod-elastic-agent ENTRYPOINT ["entrypoint.sh"] # entrypoint.sh ... hyperpodrun --nnodes=node_count --nproc-per-node=proc_count \ --rdzv-backend hyperpod \ # Optional --inprocess-restart \ # Optional (in-process fault recovery with checkpointless training) ... # Other torchrun args # pre-traing arg_group --pre-train-script pre.sh --pre-train-args "pre_1 pre_2 pre_3" \ # post-train arg_group --post-train-script post.sh --post-train-args "post_1 post_2 post_3" \ training.py --script-args

现在,您可以使用 kubectl 提交作业。

HyperPod 弹性剂论点

HyperPod 弹性代理支持所有原始参数,并添加了一些其他参数。以下是 HyperPod 弹性代理中可用的所有参数。有关 PyTorch的 Elastic 代理的更多信息,请参阅其官方文档

参数 说明 默认值
--shutdown-signal 发送给工作线程以执行关闭操作的信号(SIGTERM 或 SIGKILL) “SIGKILL”
--shutdown-timeout 关机信号和 SIGKILL 信号之间的超时时间(以秒为单位) 15
--server-host 代理服务器地址 “0.0.0.0”
--server-port 代理服务器端口 8080
--server-log-level 代理服务器日志级别 “info”
--server-shutdown-timeout 服务器关闭超时时间(以秒为单位) 300
--pre-train-script 预训练脚本的路径
--pre-train-args 预训练脚本的参数
--post-train-script 训练后脚本的路径
--post-train-args 训练后脚本的参数
--进程中重启 指定是否使用 inprocess_restart 功能的标志 FALSE
--处理中超时 代理在触发进程级重启之前等待工作人员到达同步屏障的时间(以秒为单位)。

任务治理(可选)

培训操作员与 HyperPod 任务管理集成,任务管理是一个强大的管理系统,旨在简化资源分配,并确保在 Amazon EKS 集群中跨团队和项目高效利用计算资源。要设置 HyperPod 任务管理,请参阅 SageMaker HyperPod 任务管理设置

注意

安装 HyperPod 任务管理插件时,必须使用 v1.3.0-eksbuild.1 或更高版本。

提交作业时,请务必包含队列名称与优先级类标签 hyperpod-ns-team-name-localqueuepriority-class-name-priority。例如,如果您使用的是 Kueue,则标签会变为以下内容:

  • kueue.x-k8s.io/queue-name:hypod-ns-localqueue team-name

  • kuee.x-k8s.io/priority-class:-name-priority priority-class

配置文件可能类似于如下示例:

apiVersion: sagemaker.amazonaws.com/v1 kind: HyperPodPytorchJob metadata: name: hp-task-governance-sample namespace: hyperpod-ns-team-name labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue kueue.x-k8s.io/priority-class: priority-class-priority spec: nprocPerNode: "1" runPolicy: cleanPodPolicy: "None" replicaSpecs: - name: pods replicas: 4 spares: 2 template: spec: containers: - name: ptjob image: XXXX imagePullPolicy: Always ports: - containerPort: 8080 resources: requests: cpu: "2"

然后使用以下 kubectl 命令来应用 YAML 文件。

kubectl apply -f task-governance-job.yaml

Kueue(可选)

您可以直接运行作业,您的组织也可以将训练操作符与 Kueue 集成来分配资源和调度作业。按照以下步骤将 Kueue 安装到您的 HyperPod 集群中。

  1. 按照 Kueue 官方文档中的安装指南进行操作。当您进行到配置 controller_manager_config.yaml 的步骤时,请添加以下配置:

    externalFrameworks: - "HyperPodPytorchJob.v1.sagemaker.amazonaws.com"
  2. 按照官方安装指南中的其余步骤操作。安装完 Kueue 后,您可以使用 kubectl apply -f sample-queues.yaml 命令创建一些示例队列。使用以下 YAML 文件。

    apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: cluster-queue spec: namespaceSelector: {} preemption: withinClusterQueue: LowerPriority resourceGroups: - coveredResources: - cpu - nvidia.com/gpu - pods flavors: - name: default-flavor resources: - name: cpu nominalQuota: 16 - name: nvidia.com/gpu nominalQuota: 16 - name: pods nominalQuota: 16 --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: name: user-queue namespace: default spec: clusterQueue: cluster-queue --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: default-flavor --- apiVersion: kueue.x-k8s.io/v1beta1 description: High priority kind: WorkloadPriorityClass metadata: name: high-priority-class value: 1000 --- apiVersion: kueue.x-k8s.io/v1beta1 description: Low Priority kind: WorkloadPriorityClass metadata: name: low-priority-class value: 500