

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

# 创建集 SageMaker HyperPod 群
<a name="sagemaker-hyperpod-eks-operate-cli-command-create-cluster"></a>

了解如何使用创建由 Amazon EKS 编排的 SageMaker HyperPod 集群。 AWS CLI

1. 在创建集 SageMaker HyperPod 群之前：

   1. 确保现有 Amazon EKS 集群已启动并运行。有关如何设置 Amazon EKS 集群的详细说明，请参阅 *Amazon EKS 用户指南*中的[创建 Amazon EKS 集群](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)。

   1. 按照 [使用 Helm 在 Amazon EKS 集群上安装软件包](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md) 中的说明安装 Helm 图表。如果您创建了 [Amazon Nova SageMaker HyperPod 集群](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-hp-cluster.html)，则需要一个单独的 Helm 图表。

1. 准备生命周期配置脚本然后上传到 Amazon S3 存储桶，如 `s3://amzn-s3-demo-bucket/Lifecycle-scripts/base-config/`。

   要快速入门，请[https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/7.sagemaker-hyperpod-eks/LifecycleScripts/base-config/on_create.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/1.architectures/7.sagemaker-hyperpod-eks/LifecycleScripts/base-config/on_create.sh)从 AWS ome 分布式训练 GitHub 存储库下载示例脚本，然后将其上传到 S3 存储桶。您还可以包括其他设置说明、一系列安装脚本或要在 HyperPod 集群配置阶段执行的命令。
**重要**  
如果您创建的 [的 IAM 角色适用于 SageMaker HyperPod](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) 只附加托管的 [https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-cluster.html](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-cluster.html)，则集群可访问具有特定前缀 `sagemaker-` 的 Amazon S3 存储桶。

   如果您创建受限实例组，则无需下载并运行生命周期脚本。相反，您需要运行 `install_rig_dependencies.sh`。

   运行 `install_rig_dependencies.sh` 脚本的先决条件包括：
   + AWS 节点 (CNI) 和 CoreDNS 都应启用。这些是标准的 EKS 附加组件，不由标准 SageMaker HyperPod Helm 管理，但可以在 EKS 控制台的 Add-ons 下轻松启用。
   +  在运行此脚本之前，应安装标准 SageMaker HyperPod Helm 图表。

   `install_rig_dependencies.sh` 脚本将执行以下操作。
   + `aws-node`（CNI）：已创建新的 `rig-aws-node` Daemonset；已修补现有 `aws-node` 以避开 RIG 节点。
   + `coredns`: 已转换为 Daemonset RIGs 以支持多装备使用并防止过载。
   + training-operators：已更新，添加了 RIG Worker 污点容忍度，并设置了 nodeAffinity 以优先选择非 RIG 实例。
   + Elastic Fabric Adapter（EFA）：已更新，添加了 RIG Worker 污点容忍度，并为每个区域使用正确的容器映像。

1. 准备一个 JSON 格式的 [CreateCluster](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCluster.html)API 请求文件。对于 `ExecutionRole`，请提供使用托管的 `AmazonSageMakerClusterInstanceRolePolicy` 从 [的 IAM 角色适用于 SageMaker HyperPod](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) 部分创建的 IAM 角色的 ARN。
**注意**  
确保您的 SageMaker HyperPod 集群与您的 Amazon EKS 集群部署在同一个虚拟私有云 (VPC) 中。 SageMaker HyperPod 集群配置中指定的子网和安全组必须允许与 Amazon EKS 集群的 API 服务器终端节点进行网络连接和通信。

   ```
   // create_cluster.json
   {
       "ClusterName": "string",
       "InstanceGroups": [{
           "InstanceGroupName": "string",
           "InstanceType": "string",
           "InstanceCount": number,
           "LifeCycleConfig": {
               "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/",
               "OnCreate": "on_create.sh"
           },
           "ExecutionRole": "string",
           "ThreadsPerCore": number,
           "OnStartDeepHealthChecks": [
               "InstanceStress", "InstanceConnectivity"
           ]
       }],
       "RestrictedInstanceGroups": [ 
         { 
            "EnvironmentConfig": { 
               "FSxLustreConfig": { 
                  "PerUnitStorageThroughput": number,
                  "SizeInGiB": number
               }
            },
            "ExecutionRole": "string",
            "InstanceCount": number,
            "InstanceGroupName": "string",
            "InstanceStorageConfigs": [ 
               { ... }
            ],
            "InstanceType": "string",
            "OnStartDeepHealthChecks": [ "string" ],
            "OverrideVpcConfig": { 
               "SecurityGroupIds": [ "string" ],
               "Subnets": [ "string" ]
            },
            "ScheduledUpdateConfig": { 
               "DeploymentConfig": { 
                  "AutoRollbackConfiguration": [ 
                     { 
                        "AlarmName": "string"
                     }
                  ],
                  "RollingUpdatePolicy": { 
                     "MaximumBatchSize": { 
                        "Type": "string",
                        "Value": number
                     },
                     "RollbackMaximumBatchSize": { 
                        "Type": "string",
                        "Value": number
                     }
                  },
                  "WaitIntervalInSeconds": number
               },
               "ScheduleExpression": "string"
            },
            "ThreadsPerCore": number,
            "TrainingPlanArn": "string"
         }
      ],
       "VpcConfig": {
           "SecurityGroupIds": ["string"],
           "Subnets": ["string"]
       },
       "Tags": [{
           "Key": "string",
           "Value": "string"
       }],
       "Orchestrator": {
           "Eks": {
               "ClusterArn": "string",
               "KubernetesConfig": {
                   "Labels": {
                       "nvidia.com/mig.config": "all-3g.40gb"
                   }
               }
           }
       },
       "NodeRecovery": "Automatic"
   }
   ```
**灵活的实例组**  
您可以使用`InstanceRequirements`参数为一个实例组指定多个实例类型，而不是指定单个`InstanceType`实例类型。注意以下几点：  
`InstanceType`并且`InstanceRequirements`是相互排斥的。必须指定其中一个，但不能同时指定两个。
`InstanceRequirements.InstanceTypes`是决定置备优先级的有序列表。 SageMaker HyperPod尝试配置列表中的第一个实例类型，如果容量不可用，则回退到后续类型。您最多可以指定 20 个实例类型，并且列表中不得包含重复的实例类型。
灵活的实例组需要持续的节点配置模式。
以下示例显示了使用以下内容的实例组`InstanceRequirements`：  

   ```
   {
       "InstanceGroupName": "flexible-ig",
       "InstanceRequirements": {
           "InstanceTypes": ["ml.p5.48xlarge", "ml.p4d.24xlarge", "ml.g6.48xlarge"]
       },
       "InstanceCount": 10,
       "LifeCycleConfig": {
           "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/",
           "OnCreate": "on_create.sh"
       },
       "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster"
   }
   ```

   配置为创建与 EKS SageMaker HyperPod 集群关联的新集群时，请注意以下几点。
   + 在 `InstanceGroups` 参数下最多可配置 20 个实例组。
   + 对于 `Orchestator.Eks.ClusterArn`，请指定要用作编排工具的 EKS 集群的 ARN。
   + 对于 `OnStartDeepHealthChecks`，添加 `InstanceStress` 和 `InstanceConnectivity`，以启用 [深度运行状况检查](sagemaker-hyperpod-eks-resiliency-deep-health-checks.md)。
   + 对于`NodeRecovery`，`Automatic`请指定启用自动节点恢复。 SageMaker HyperPod 当运行状况监控代理发现问题时，替换或重启实例（节点）。
   + 对于`Tags`参数，您可以添加用于将 SageMaker HyperPod 集群作为 AWS 资源进行管理的自定义标签。在其他支持标记的 AWS 服务中添加标签的方式与在集群中添加标签的方式相同。要了解有关标记 AWS 资源的更多信息，请参阅[《标记 AWS 资源用户指南》](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html)。
   + 对于 `VpcConfig` 参数，请指定 EKS 集群中使用的 VPC 的信息。子网必须是专用的。
   + 对于`Orchestrator.Eks.KubernetesConfig.Labels`，您可以选择指定要应用于节点的 Kubernetes 标签。要使用多实例 GPU (MIG) 启用 GPU 分区，请添加带有所需的 MIG 配置文件的`nvidia.com/mig.config`标签。例如，`"nvidia.com/mig.config": "all-3g.40gb"`使用 3g.40GB 分区配置文件 GPUs 进行所有配置。有关 GPU 分区和可用配置文件的更多信息，请参阅[在亚马逊中使用 GPU 分区 SageMaker HyperPod](sagemaker-hyperpod-eks-gpu-partitioning.md)。

1. 运行 [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-cluster.html) 命令如下。
**重要**  
在运行带 `--cli-input-json` 参数的 `create-cluster` 命令时，必须在 JSON 文件的完整路径前添加 `file://` 前缀。必须使用此前缀来确保将输入 AWS CLI 识别为文件路径。省略 `file://` 前缀会导致解析参数错误。

   ```
   aws sagemaker create-cluster \
       --cli-input-json file://complete/path/to/create_cluster.json
   ```

   这将返回新集群的 ARN。
**重要**  
您可以使用 [update-cluster](https://docs.aws.amazon.com//cli/latest/reference/ecs/update-cluster.html) 操作来移除受限实例组（RIG）。当 RIG 缩小到 0 时，for FSx Lustre 的文件系统不会被删除。要完全删除 f FSx or Lustre 文件系统，必须完全删除 RIG。  
移除 RIG 将不会删除存储在服务托管的 Amazon S3 存储桶中的任何构件。但是，在移除之前，您应确保 for FSx Lustre 文件系统中的所有项目都与 Amazon S3 完全同步。我们建议在任务完成后至少等待 30 分钟，以确保从 for Lustre 文件系统的所有项目完全同步到服务托管的 Amazon S3 存储桶。 FSx 
**重要**  
使用已载入的按需容量预留 (ODCR) 时，您必须通过在匹配的可用区 ID 中设置子网，将您的实例组映射到`OverrideVpcConfig`与 ODCR 相同的可用区 ID (AZ ID)。  
关键：在部署之前验证`OverrideVpcConfig`配置，以避免对 ODCR 和按需容量产生重复费用。