View a markdown version of this page

开始 SageMaker HyperPod 使用 AWS CLI - 亚马逊 SageMaker AI

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

开始 SageMaker HyperPod 使用 AWS CLI

以下教程演示了如何通过的AWS CLI 命令使用 Slurm 创建新 SageMaker HyperPod 集群。 SageMaker HyperPod在本教程结束时,您将拥有一个正在运行的 Slurm 集群,其中包含控制器节点、登录节点和计算工作组,可以调度和运行 ML 工作负载。本教程介绍了 Slurm 拓扑设置、节点生命周期配置选项、可选的 FSx 共享存储以及如何连接到集群。

在开始之前,请确保您已完成使用的先决条件 SageMaker HyperPod(VPC、配额、FSx)和AWS Identity and Access Management 对于 SageMaker HyperPod(IAM 角色、执行角色)。AmazonSageMakerClusterInstanceRolePolicy

重要概念

本节介绍创建 SageMaker HyperPod Slurm 集群的核心配置概念。了解这些概念将有助于您在配置集群时做出明智的选择,但是如果您想立即开始,则可以根据需要直接跳转到创建集群此处进行参考。

创建 Slurm-orchestrated 集群时,您可以做出两个独立的配置选择:

  1. Slurm 拓扑配置 — Slurm 集群拓扑(节点角色、分区)是如何定义的?

  2. 节点生命周期配置 — 如何配置和自定义节点?

对于 Slurm 拓扑,本教程使用 API-driven 配置方法,即在CreateCluster请求中使用SlurmConfig每个实例组和集群Orchestrator.Slurm级别直接定义节点角色和分区。这是新集群的推荐方法。它提供单一事实来源、内置验证和分区配置偏差检测,无需管理其他文件。或者,您可以使用存储在 Amazon S3 中的旧provisioning_parameters.json文件来向后兼容现有集群。有关传统方法的详细信息,请参阅SageMaker HyperPod Slurm 配置

对于节点生命周期配置, SageMaker HyperPod 支持三个选项。在最简单的情况下,你可以LifeCycleConfig完全省略节点,使用 AMI-based 配置、设置 Slurm 和运行机器学习工作负载的基本软件包(例如 Docker、Enroot 和 Pyxis) HyperPod自动配置节点,无需脚本或 Amazon S3 存储桶。如果您需要在 AMI-based 配置之上进行自定义,则可以通过提供扩展脚本OnInitComplete,该脚本将在配置完成后运行。为了完全控制整个配置顺序,该OnCreate路径允许您的脚本拥有所有内容,包括 Slurm 何时启动。

对于 ML 工作负载,您通常还需要一个共享的高性能文件系统来存储训练数据、检查点和共享库。 SageMaker HyperPod 支持 Amazon for Lustre 的 Amazon FSx 和 OpenZFS 的 fsX,通过按实例组进行配置。InstanceStorageConfigsFSx 配置对于集群创建是可选的,但建议用于生产工作负载。

通过 API 配置 Slurm 拓扑

本教程中的所有示例都使用 API-driven Slurm 拓扑配置,在这种配置中,您可以直接在 CreateCluster API 请求中定义 Slurm 集群结构,而不是通过单独的配置文件定义。

Slurm 集群至少需要一个控制器节点(运行slurmctld守护程序并协调作业调度)和一个或多个计算节点(执行作业)。或者,您可以添加登录节点,为用户提供用于提交和管理作业的专用访问点,而无需直接登录控制器。在 API 请求中,您可以使用为每个实例组分配其 Slurm 角色SlurmConfig,指定该组是用作控制器、登录还是计算节点。计算组还映射到一个或多个 Slurm 分区,这些分区充当逻辑队列,用于组织在不同节点集间调度作业的方式。

在群集级别,Orchestrator.Slurm控制如何 HyperPod 管理中的分区配置slurm.conf。您可以选择一种策略,以确定分区拓扑 HyperPod 是否为单一事实来源,它是否覆盖手动更改,或者是否将 API-defined 配置与您所做的任何手动编辑合并。以下是所用字段的参考资料。

SlurmConfig(每个实例组):

"SlurmConfig": { "NodeType": "Controller | Login | Compute", "PartitionNames": ["partition-name"] }
字段 说明
NodeType 必需。此实例组的 Slurm 角色。有效值:ControllerLoginCompute。必须恰好有一个实例组Controller
PartitionNames 这是有条件的。Slurm 分区名称。Compute节点类型为必填项;不允许用于ControllerLogin

Orchestrator.Slurm(集群级别):

"Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed | Overwrite | Merge" } }

SlurmConfigStrategy决定如何 HyperPod 管理控制器节点slurm.conf上的分区到节点映射。创建或更新集群时,slurm.conf根据您在每个实例组上定义的分区配置 HyperPod 写入到,将计算实例组映射到其分配的分区,并使用相应的 Slurm 角色注册控制器和登录节点。SlurmConfig

您选择的策略控制在 API 之外修改中的slurm.conf分区配置时会发生什么,例如,管理员直接在控制器节点上编辑文件。使用Managed, HyperPod 将 API 视为单一事实来源,如果磁盘slurm.conf上有漂移,则会检测和阻止更新。使用Overwrite, HyperPod 强制在控制器上进行 API-defined 配置,放弃对控制器的任何手动编辑。slurm.conf这对于从意外更改中恢复非常有用。使用Merge, HyperPod 保留对 API 配置的手动编辑并将其与 API 配置合并,从而使高级用户可以灵活地在分区旁边 API-managed 维护自定义slurm.conf设置。slurm.conf

Strategy 分区漂移检测 手动更改 使用案例
Managed(默认值) 已启用;如果发现偏差,则阻止更新 不支持 单一真相来源
Overwrite 已禁用 更新时被覆盖 从漂移中恢复
Merge 已禁用 保留并合并 定制slurm.conf需求
重要

偏差检测仅适用于中的 Slurm 分区配置slurm.conf(通过 API 定义的分区到节点的映射)。对其他slurm.conf设置(例如计划参数、资源限制或记账配置)的更改不受监控,也不会被检测或报告 HyperPod。

注意

如果您更喜欢使用provisioning_parameters.json文件而不是 API 来定义 Slurm 拓扑,请在实例组和Orchestrator.Slurm集群请求SlurmConfig中省略,然后将文件与节点生命周期脚本一起上传到 Amazon S3。有关更多信息,请参阅 SageMaker HyperPod Slurm 配置

节点生命周期配置选项

创建 SageMaker HyperPod Slurm 集群时,您可以通过配置请求中的LifeCycleConfig区块来选择如何配置每个实例组的节点。CreateCluster SageMaker HyperPod 支持三个节点生命周期配置选项,每个选项都提供对配置过程的不同级别的控制。

如果仅使用AMI-based 配置,则可以LifeCycleConfig完全省略。 HyperPod 使用 AMI-based 配置、设置 Slurm、安装基本软件包和启动所有必需的服务自动配置节点。这是最简单的路径,不需要 Amazon S3 存储桶或脚本。

使用 “扩展” 选项,您可以OnInitCompleteLifeCycleConfig Amazon S3 中指定并SourceS3Uri指向您的扩展脚本。 HyperPod 首先运行完整 AMI-based 配置,然后执行您的脚本。这使您可以添加自定义设置,例如监控代理、LDAP 集成或其他存储装载,而无需管理基准配置。

使用 “自定义” 选项,您可以在OnCreate中指定,LifeCycleConfig同时SourceS3Uri指向 Amazon S3 中的完整生命周期脚本集。 HyperPod 不运行 AMI-based 配置,也不会启动 Slurm。您的脚本拥有整个配置序列。这使您可以完全控制安装了哪些软件、如何配置以及何时启动 Slurm。

节点生命周期选项 需要亚马逊 S3 存储桶吗? 要上传的脚本? LifeCycleConfig 在 API 中?
AMI-based 仅限@@ 配置(最简单) 完全省略
扩展 (OnInitComplete) 只有你的扩展脚本 OnInitComplete + SourceS3Uri
自定义 (OnCreate) 完整生命周期脚本集 OnCreate + SourceS3Uri
注意

只有 Slurm-orchestrated 集群支持可选的节点生命周期配置。 EKS-orchestrated 使用连续的集群和 Slurm 集群NodeProvisioningMode仍然需要LifeCycleConfigSourceS3Uri在每个实例组上使用。OnCreate

注意

OnCreate并且OnInitComplete是相互排斥的。在同一个实例组上同时指定两者会导致验证错误。

FSx 和 VPC 配置

对于 ML 工作负载,共享的高性能文件系统对于跨群集节点存储训练数据、模型检查点和共享库至关重要。 SageMaker HyperPod 支持 Amazon for Lustre 的 Amazon FSx 和 OpenZFS 的 fsX,通过按实例组进行配置。InstanceStorageConfigsFSx 文件系统位于您的 VPC 中,因此在使用 FSx 时需要自定义 VPC 配置 (VpcConfig)。

FSx 配置适用于所有三个节点生命周期配置选项。使用 AMI-based 配置或时OnInitComplete,会自动 HyperPod 处理 FSx 的挂载。使用时OnCreate,您的生命周期脚本负责装载。

FSx for Lustre:

"InstanceStorageConfigs": [ { "FsxLustreConfig": { "DnsName": "fs-0abc123def456789.fsx.us-west-2.amazonaws.com", "MountPath": "/fsx", "MountName": "abcdefgh" } } ]
字段 说明
DnsName 必需。FSx for Lustre 文件系统的 DNS 名称。
MountPath 可选。实例上的本地挂载路径。默认值:/fsx
MountName 必需。FSx for Lustre 文件系统的挂载名称。在 FSx for Lustre 主机中找到这个或者通过。aws fsx describe-file-systems

适用于 OpenZFS 的 FSX:

"InstanceStorageConfigs": [ { "FsxOpenZfsConfig": { "DnsName": "fs-0xyz789abc123456.fsx.us-west-2.amazonaws.com", "MountPath": "/shared" } } ]
字段 说明
DnsName 必需。适用于 OpenZFS 文件系统的 FSX 的 DNS 名称。
MountPath 可选。实例上的本地挂载路径。默认值:/home
注意

每个实例组最多可以有一个用于 Lustre 的 FSX 和一个用于 OpenZFS 配置的 FSX。不同的实例组可以挂载不同的文件系统。

VPC 配置(FSx 需要配置):

VpcConfig在您的CreateCluster请求中在集群级别添加:

"VpcConfig": { "SecurityGroupIds": ["sg-0abc123def456789a"], "Subnets": ["subnet-0abc123def456789a"] }

有关设置 VPC 的更多信息,请参阅使用的先决条件 SageMaker HyperPod。有关 FSx 设置的更多信息,请参阅。使用的先决条件 SageMaker HyperPod

创建集群

本节将引导您使用中描述的三个节点生命周期配置选项中的每一个来创建集群节点生命周期配置选项。对于大多数用户,我们建议从选项 A 开始,仅限 AMI-based 配置。它不需要脚本或 Amazon S3 存储桶,开箱即用即可提供功能齐全的集群。如果您需要在配置之上添加自定义项,请选择选项 B;如果您需要完全控制 AMI-based 配置过程,请选择选项 C。

ExecutionRole在所有示例中,请提供您在中使用托管AmazonSageMakerClusterInstanceRolePolicy创建的 IAM 角色的 ARN。使用的先决条件 SageMaker HyperPod

选项 A:仅限 AMI-based 配置(不包括生命周期配置)

这是最简单的路径。不需要 Amazon S3 存储桶、脚本或配置文件。 SageMaker HyperPod 使用 AMI-based配置、安装基本软件和应用配置自动配置节点,这样集群就可以开箱即用地运行机器学习工作负载。所有软件包都嵌入在 AMI 中,因此在配置期间无需访问互联网。

下表列出了 AMI-based配置中包含的功能:

能力 说明
Slurm 守护程序控制器和计算守护程序自动启动
Docker用于构建和运行 ML 容器的容器运行时
Enroot适用于 Slurm 工作负载的无根容器执行
Pyxis用于容器集成的 Slurm 插件
Slurm 会计配置 Slurm 作业记账以跟踪作业历史记录和资源消耗
MariaDB在控制器节点上部署 MariaDB 作为 Slurm 记账的后备数据库
生成 SSH 密钥为默认 ubuntu 用户生成的密钥对
SSH 传播多节点作业的用户凭证跨计算节点传播
Slurm 日志轮换防止日志膨胀和磁盘已满问题
主目录设置挂载到共享文件系统的 Ubuntu 用户主目录
  1. 将以下内容另存为create_cluster.json

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "EbsVolumeConfig": { "VolumeSizeInGB": 500 } } ] }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Login" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "FsxLustreConfig": { "DnsName": "fs-0abc123def456789.fsx.us-west-2.amazonaws.com", "MountPath": "/fsx", "MountName": "abcdefgh" } } ] } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } }, "VpcConfig": { "SecurityGroupIds": ["sg-0abc123def456789a"], "Subnets": ["subnet-0abc123def456789a"] } }

    请注意,在任何实例组上都没有LifeCycleConfig指定。

    Slurm 拓扑是通过SlurmConfig在每个实例组上定义my-controller-group的:被分配Controller角色(运行slurmctld),my-login-group充当用户访问的Login节点,以及worker-group-1分配给partition-1任务调度的Compute节点。在集群级别,SlurmConfigStrategy: "Managed"确保 HyperPod 是分区配置的唯一真实来源。工作器组包括一个用于共享存储的 FSx for Lustre 文件系统 /fsxVpcConfig,并根据 FSx 的要求在群集级别上指定。

    提示

    如果您在没有 FSx 的情况下进行测试,则可以FsxLustreConfig从请求中省略InstanceStorageConfigs和删除VpcConfig。创建集群时不需要 FSx,但建议用于生产 ML 工作负载。

  2. 创建集群:

    aws sagemaker create-cluster \ --cli-input-json file://create_cluster.json
  3. 检查状态:

    aws sagemaker describe-cluster --cluster-name my-hyperpod-cluster

    仅在 AMI-based 配置的情况下,响应中的实例组不包含LifeCycleConfig块。以下是显示控制器实例组的截断示例:

    { "ClusterName": "my-hyperpod-cluster", "ClusterStatus": "InService", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "SlurmConfig": { "NodeType": "Controller" } } ] }

    状态变为后InService,继续执行Connect 连接到您的集群

选项 B:使用扩展 AMI-based 配置 OnInitComplete

当您需要在 AMI-based配置之上进行自定义(例如监视代理、 LDAP/SSSD 集成或其他存储装载)时,请使用此选项。 SageMaker HyperPod 首先运行 AMI-based 配置,然后执行您的扩展脚本。

  1. 编写您的扩展脚本。例如,extend-defaults.sh

    #!/bin/bash set -e echo "Running post-initialization customizations..." # Example: Install a monitoring agent # apt-get install -y my-monitoring-agent # Example: Configure LDAP integration # /opt/custom/setup-ldap.sh # Example: Mount an additional S3 bucket # mount-s3 my-data-bucket /mnt/s3-data echo "Custom extensions complete."
    使用 Awsome 分布式训练库中的扩展脚本

    Awsome Distributed Training 存储库中的 Extensions 文件夹为添加用户和启用可观察性等常见任务提供了即用型扩展脚本。每项功能都独立包含在自己的目录中,有自己的入口点脚本,可以直接作为OnInitComplete脚本提供。

    对于需要多种功能的集群,我们建议使用 Ex run_extensions.sh tensions 文件夹顶层提供的脚本。该脚本编排了所有可用的扩展脚本,并提供了简单的布尔值切换来启用或禁用每种功能。要使用它,请将整个 Extensions 文件夹上传到您的 Amazon S3 存储桶,并指定run_extensions.shOnInitComplete脚本:

    s3://<bucket>/<prefix>/ |-- run_extensions.sh (OnInitComplete target) |-- detect-node/ (node type detection utility) |-- add-users/ (user management scripts + config) |-- observability/ (observability scripts + config)

    在内部run_extensions.sh,通过设置相应的标志来启用或禁用每项功能:

    ENABLE_ADD_USERS="true" ENABLE_OBSERVABILITY="true"

    在上传到 Amazon S3 之前,必须先填充每项已启用功能的配置文件。有关配置的详细信息,请参阅每项功能目录中的自述文件。

  2. 上传到 Amazon S3(存储桶路径必须以开头s3://sagemaker-):

    aws s3 cp extend-defaults.sh \ s3://sagemaker-amzn-s3-demo-bucket/scripts/
  3. 将以下内容另存为create_cluster.json

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "OnInitComplete": "extend-defaults.sh", "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/scripts/" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "EbsVolumeConfig": { "VolumeSizeInGB": 500 } } ] }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Login" }, "LifeCycleConfig": { "OnInitComplete": "extend-defaults.sh", "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/scripts/" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "LifeCycleConfig": { "OnInitComplete": "extend-defaults.sh", "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/scripts/" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } } }
    重要

    如果指定,OnInitCompleteSourceS3Uri则为必填项。 OnCreateOnInitComplete不能在同一个实例组上一起使用。

    提示

    您可以在集群中混合选项。例如,仅在控制器和工作器OnInitComplete上使用 AMI-based配置。

    Slurm 拓扑与选项 A 中的拓扑结构相同。每个实例组都有其SlurmConfig定义的节点角色和分区分配,并在SlurmConfigStrategy: "Managed"集群级别进行设置。唯一的区别是添加了 w LifeCycleConfig it OnInitComplete h,它告诉 HyperPod 你在每个节点上完成 AMI-based配置后运行扩展脚本。要添加 FSx,请在相关实例组FsxOpenZfsConfigInstanceStorageConfigs加入FsxLustreConfig或包括在内,然后在集群VpcConfig级别添加,如中所述。FSx 和 VPC 配置

  4. 创建集群:

    aws sagemaker create-cluster \ --cli-input-json file://create_cluster.json
  5. 检查状态:

    aws sagemaker describe-cluster --cluster-name my-hyperpod-cluster

    使用OnInitComplete,响应显示OnInitCompleteLifeCycleConfig。以下是显示控制器实例组的截断示例:

    { "ClusterName": "my-hyperpod-cluster", "ClusterStatus": "InService", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/scripts/", "OnInitComplete": "extend-defaults.sh" } } ] }

    状态变为后InService,继续执行Connect 连接到您的集群

选项 C:使用 OnCreate (高级)实现完全自定义控件

当您需要完全控制配置(包括安装软件、更改基础架构以及决定何时启动 Slurm)时,请使用此选项。使用OnCreate, SageMaker HyperPod 运行 AMI-based 配置,也不会自动启动 Slurm。

注意

如果您不熟悉 SageMaker HyperPod 并且没有特定的自定义要求,我们建议您从选项 A 或选项 B 开始。您以后可以随时迁移到自定义模式。

  1. 准备生命周期脚本并将其上传到 Amazon S3。如果从头开始,请使用 Awsome 分布式训练 GitHub 存储库中的示例脚本:

    git clone https://github.com/aws-samples/awsome-distributed-training/ cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config

    上传到 Amazon S3(存储桶路径必须以开头s3://sagemaker-):

    aws s3 sync . \ s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src

    要了解有关生命周期脚本的更多信息,请参阅使用生命周期脚本自定义 SageMaker HyperPod 集群

  2. 将以下内容另存为create_cluster.json

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "EbsVolumeConfig": { "VolumeSizeInGB": 500 } } ] }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Login" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } } }

    Slurm 拓扑遵循与其他SlurmConfig选项相同的模式。关键区别在LifeCycleConfigOnCreate. 这告诉你 HyperPod 要完全跳过 AMI-based 配置,改为运行你的on_create.sh脚本。您的脚本负责完整的配置顺序,包括安装软件、配置 Slurm 和启动 Slurm 守护程序。要添加 FSx,请在相关实例组FsxOpenZfsConfigInstanceStorageConfigs加入FsxLustreConfig或包括在内,然后在集群VpcConfig级别添加,如中所述。FSx 和 VPC 配置

  3. 创建集群:

    aws sagemaker create-cluster \ --cli-input-json file://create_cluster.json
  4. 检查状态:

    aws sagemaker describe-cluster --cluster-name my-hyperpod-cluster

    使用OnCreate,响应显示OnCreateLifeCycleConfig。以下是显示控制器实例组的截断示例:

    { "ClusterName": "my-hyperpod-cluster", "ClusterStatus": "InService", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src", "OnCreate": "on_create.sh" } } ] }

    状态变为后InService,继续执行Connect 连接到您的集群

常见的验证错误

错误 解决方案
“集群必须只有一个控制 InstanceGroup 器节点类型” 确保只有一个实例组具有SlurmConfig.NodeType"Controller"
“只能将分区分配给计算节点类型” PartitionNamesControllerLogin实例组中移除
“只有自定义 VPC 支持 FSx 配置” 使用 FSx 时VpcConfig添加到您的请求中
“实例组LifeCycleConfig 为必填项...” EKS 集群或 Slurm Continue。NodeProvisioningMode不支持可选的节点生命周期配置。
“OnCreate 和 OnInitComplete in LifeCycleConfig 是相互排斥的...” 移除OnCreateOnInitComplete。不能同时指定两者。
“LifeCycleConfig 例如,群组不完整...” 如果指定了OnCreate或,OnInitComplete则还SourceS3Uri必须提供。
“LifeCycleConfig 是可选的,但需要兼容的 AMI...” 运行UpdateClusterSoftware以更新到支持可选节点生命周期配置的 AMI。
“LifeCycleConfig 例如,提供了组但不包含任何配置...” SourceS3Uri使用OnCreate或指定OnInitComplete,或者LifeCycleConfig完全省略。

Connect 连接到您的集群

集群状态变为InService(通常为 10 到 15 分钟)后,进行连接并进行验证。

  1. 列出集群节点以获取实例 ID:

    aws sagemaker list-cluster-nodes --cluster-name my-hyperpod-cluster
  2. 使用 AWS Systems Manager 会话管理器连接:

    aws ssm start-session \ --target sagemaker-cluster:my-hyperpod-cluster_my-login-group-i-0abc123def456789b \ --region us-west-2
  3. 验证 Slurm 的配置是否正确:

    # Check Slurm nodes sinfo # Check Slurm partitions sinfo -p partition-1 # Submit a test job srun -p partition-1 --nodes=1 hostname

有关运行 ML 工作负载的更多信息,请参阅SageMaker HyperPod 集群上的作业

删除集群并清理资源

测试完成后,删除集群以避免继续收费:

aws sagemaker delete-cluster --cluster-name my-hyperpod-cluster

如果您使用节点生命周期脚本(选项 B 或选项 C),请清理 Amazon S3 存储桶:

aws s3 rm s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src --recursive

如果您仅使用 AMI-based 配置(选项 A),则无需对节点生命周期脚本进行 Amazon S3 清理。

如果您运行训练工作负载,还要检查 Amazon S3、Amazon FSx for Lustre 或 Amazon Elastic File System 中是否有数据或项目,然后将其删除以免产生费用。