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

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

安装训练操作员

安装 HyperPod 培训操作员需要您首先安装其他组件。有关如何执行此操作,请参阅以下章节。

Amazon EKS 容器组身份代理

  1. 确保您的 HyperPod 集群的 IAM 执行角色具有 eks-auth: 权限。AssumeRoleForPodIdentity

  2. 设置 EKS Pod 身份代理

  3. 将以下 IAM 策略附加到您新创建的角色。

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:DescribeClusterNode" ], "Resource": "arn:aws:sagemaker:$region:$account_id:cluster/$cluster_name" } ] }
  4. 然后在您的 EKS 集群、您的 IAM 角色和新的 IAM 角色之间创建 pod 身份关联。完成该过程后,您可以使用该 ListPodIdentityAssociations 操作来查看您创建的关联。以下是它可能是什么样子的示例响应。

    aws eks list-pod-identity-associations --cluster-name my-eks-cluster { "associations": [{ "clusterName": "my-hyperpod-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" }] }

HyperPod 培训操作员

现在,您可以通过 Amazon EKS 控制台或 CreateAddOnAPI 操作安装 HyperPod 培训操作员。如果您使用的是控制台,请搜索名为 Amazon SageMaker HyperPod 培训运营商的附加组件。

以下是如何使用 API 和 CLI 安装操作员的示例。--addon-version 参数是可选的。如果您不提供最新版本,则默认为最新版本。要获取可能的版本,请使用 DescribeAddonVersions操作。

注意

如果您还使用 HyperPod 任务管理,则必须安装 v.1.1.0-eksbuild.2

aws eks create-addon \ --cluster-name my-eks-cluster \ --addon-name HyperPod-training-operator \ --addon-version v1.X.X-eksbuild.1 \ --service-account-role-arn arn:aws:iam::123456789012:role/eks-addon-role \ --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管理员.nodeSelector 控制器 Pod 的节点选择器 默认行为是选择带有标签的节点 sagemaker.amazonaws.com/compute-type: "HyperPod"

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

HyperPod 弹性剂

HyperPod 弹性剂是 PyTorch's 的延伸 ElasticAgent。它协调每个容器上培训工作人员的生命周期,并与培训操作员进行沟通。 HyperPod 要使用 HyperPod 训练操作员,必须先将 HyperPod 弹性代理安装到训练图像中,然后才能使用操作员提交和运行作业。以下是一个 docker 文件,用于安装 Elastic 代理并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 ... # 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 代理的更多信息,请参阅其官方文档

参数 描述 默认值
--关机信号 发送给工作人员进行停工的信号(SIGTERM 或 SIGKILL) “SIGKILL”
--关机超时 SIGTERM 和 SIGKILL 信号之间的超时时间(秒 30
--服务器主机 代理服务器地址 “0.0.0.0"
--服务器端口 代理服务器端口 8080
--server-log-level 代理服务器日志级别 “信息”
--server-shutdown-timeout 服务器关闭超时时间(以秒为单位) 300
--pre-train-script 预训练脚本的路径
--pre-train-args 预训练脚本的参数
--post-train-script 训练后脚本的路径
--post-train-args 训练后脚本的参数