本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
安装训练操作员
请参阅以下章节,了解如何安装培训操作员。
先决条件
在使用 HyperPod 训练操作员之前,您必须满足以下先决条件:
-
在您的 HyperPod 集群上安装了最新的 AMI。有关更多信息,请参阅 SageMaker HyperPod 亚马逊 EKS 的 AMI 发布。
安装 HyperPod 培训操作员需要您首先安装其他组件。有关如何执行此操作,请参阅以下章节。
第 1 步:设置 Amazon EKS Pod 身份代理
-
确保您的 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" ] } ] }
-
将以下 IAM 策略附加到您新创建的角色。请务必指定您的 HyperPod 集群 ARN。
-
使用控制台设置 EKS Pod 身份代理。如果要使用 AWS CLI,请使用以下命令。
aws eks create-addon \ --cluster-name
my-eks-cluster
\ --addon-name eks-pod-identity-agent \ --regionAWS 区域
-
然后在您的 EKS 集群、您的 IAM 角色和新的 IAM 角色之间创建 pod 身份关联。
aws eks create-pod-identity-association \ --cluster-name
my-eks-cluster
\ --role-arnARN of your role
\ --namespace aws-hyperpod \ --service-account hp-training-operator-controller-manager \ --regionAWS 区域
-
完成该过程后,您可以使用 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'shyperpodrun
用于创建任务启动器。
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 集群中。
-
按照 Kueue 官方
文档中的安装指南进行操作。当您进入配置步骤时 controller_manager_config.yaml
,请添加以下配置:externalFrameworks: - "HyperPodPytorchJob.v1.sagemaker.amazonaws.com"
-
按照官方安装指南中的其余步骤进行操作。安装完 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