本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
安装训练操作员
安装 HyperPod 培训操作员需要您首先安装其他组件。有关如何执行此操作,请参阅以下章节。
Amazon EKS 容器组身份代理
-
确保您的 HyperPod 集群的 IAM 执行角色具有 eks-auth: 权限。AssumeRoleForPodIdentity
-
将以下 IAM 策略附加到您新创建的角色。
-
然后在您的 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 集群中。
-
按照 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
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 | 训练后脚本的参数 | 无 |