本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
安装训练操作符
请参阅以下各部分,了解如何安装训练操作符。
先决条件
在使用 HyperPod 训练操作员之前,您必须满足以下先决条件:
-
在您的 HyperPod 集群上安装了最新的 AMI。有关更多信息,请参阅 SageMaker HyperPod 亚马逊 EKS 的 AMI 发布。
-
使用控制台设置 EKS 容器组身份代理。如果要使用Amazon CLI,请使用以下命令:
aws eks create-addon \ --cluster-namemy-eks-cluster\ --addon-name eks-pod-identity-agent \ --regionAmazon Web Services 区域 -
(可选)如果您在私有 VPC 中运行 HyperPod 集群节点,则必须为亚马逊 AI AP SageMaker I (
com.amazonaws.) 和亚马逊 EKS 身份验证服务 (com.amazonaws) 设置 PrivateLinks VPC 终端节点。aws-region.sagemaker.apiaws-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 执行角色。默认情况下,这些创建的角色只能访问要在其中安装操作符的当前集群。除非您编辑该角色的权限以包含其他集群,否则,如果您移除并重新安装操作符,则必须创建一个新角色。
如果您的 HyperPod 集群上已经安装了培训操作员,则可以将 EKS 插件更新到所需的版本。如果你想使用无检查点训练或弹性训练,请考虑以下几点:
-
无检查点训练和弹性训练都要求 EKS 插件必须在 1.2.0 或更高版本上。
-
Amazon SageMaker HyperPod 培训运营商保持对任何 EKS 附加版本的向后兼容性,因此您可以从任何附加版本升级到 1.2.0 或更高版本。
-
如果您从 1.2.0 或更高版本降级到较低版本,则必须在降级之前先删除现有作业,并在降级完成后重新提交作业。
训练操作符提供了大量带默认值的选项,这些选项可能适合您的使用案例。我们建议您在更改训练操作符之前,先尝试使用默认值运行训练操作符。下表描述了所有参数,以及您可能需要配置每个参数的场景示例。
| 参数 | 说明 | 默认 |
|---|---|---|
| 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'shyperpodrun 创建作业启动器。
注意
无检查点训练和弹性训练都要求您使用 HyperPod 弹性代理版本 1.1.0 或更高版本。
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-localqueue。例如,如果您使用的是 Kueue,则标签会变为以下内容:priority-class-name-priority
-
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-namelabels: 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 集群中。
-
按照 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