安装训练操作员 - 亚马逊 SageMaker AI

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

安装训练操作员

请参阅以下章节,了解如何安装培训操作员。

先决条件

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

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

第 1 步:设置 Amazon EKS Pod 身份代理

  1. 确保您的 HyperPod 集群的 IAM 执行角色具有 eks-auth: AssumeRoleForPodIdentity 权限,或者创建一个具有以下权限的新 IAM 角色供培训操作员使用。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
  2. 将以下 IAM 策略附加到您新创建的角色。请务必指定您的 HyperPod 集群 ARN。

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:DescribeClusterNode" ], "Resource": "arn:aws:sagemaker:us-east-1:111122223333:cluster/cluster_name" } ] }
  3. 使用控制台设置 EKS Pod 身份代理。如果要使用 AWS CLI,请使用以下命令。

    aws eks create-addon \ --cluster-name my-eks-cluster \ --addon-name eks-pod-identity-agent \ --region AWS 区域
  4. 然后在您的 EKS 集群、您的 IAM 角色和新的 IAM 角色之间创建 pod 身份关联

    aws eks create-pod-identity-association \ --cluster-name my-eks-cluster \ --role-arn ARN of your role \ --namespace aws-hyperpod \ --service-account hp-training-operator-controller-manager \ --region AWS 区域
  5. 完成该过程后,您可以使用 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" }] }

第 2 步:安装 HyperPod 训练操作员

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

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

注意

培训操作员不支持 Amazon SageMaker HyperPod 任务管理。

aws eks create-addon \ --cluster-name my-eks-cluster \ --addon-name amazon-sagemaker-hyperpod-training-operator \ --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"

步骤 3:安装 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 训练后脚本的参数

队列(可选)

虽然您可以直接运行作业,但您的组织也可以将培训操作员与 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