使用自定义进行集群管理 AMIs - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用自定义进行集群管理 AMIs

构建自定义 AMI 后,您可以使用它来创建或更新 Amazon SageMaker HyperPod 集群。也可以纵向扩展或添加使用新 AMI 的实例组。

集群操作所需的权限

向操作和配置 SageMaker HyperPod 集群的集群管理员用户添加以下权限。以下策略示例包括集群管理员运行 SageMaker HyperPod核心 APIs 并使用自定义 AMI 管理 SageMaker HyperPod 集群的最低权限集。

请注意,AMI 和 AMI EBS 快照共享权限通过 ModifyImageAttributeModifySnapshotAttribute API 权限包含在以下策略中。要缩小共享权限的范围,可执行以下步骤:

  • 添加标签以控制对 AMI 和 AMI 快照的 AMI 共享权限。例如,您可以为 AMI 添加标签,将 AllowSharing 设置为 true

  • 在策略中添加上下文密钥,仅允许使用特定标签进行 AMIs标记的 AMI 共享。

以下策略是限定范围的策略,以确保只允许 AMIs标trueAllowSharing as。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::111122223333:role/your-execution-role-name" }, { "Effect": "Allow", "Action": [ "sagemaker:CreateCluster", "sagemaker:DeleteCluster", "sagemaker:DescribeCluster", "sagemaker:DescribeClusterNode", "sagemaker:ListClusterNodes", "sagemaker:ListClusters", "sagemaker:UpdateCluster", "sagemaker:UpdateClusterSoftware", "sagemaker:BatchDeleteClusterNodes", "eks:DescribeCluster", "eks:CreateAccessEntry", "eks:DescribeAccessEntry", "eks:DeleteAccessEntry", "eks:AssociateAccessPolicy", "iam:CreateServiceLinkedRole", "ec2:DescribeImages", "ec2:DescribeSnapshots" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:ModifyImageAttribute", "ec2:ModifySnapshotAttribute" ], "Resource": "*", "Condition": { "StringEquals": { "ec2:ResourceTag/AllowSharing": "true" } } } ] }
重要

如果您计划使用已加密的自定义 AMI,请确保 KMS 密钥符合 客户托管的Amazon KMS key加密 SageMaker HyperPod中描述的权限要求。此外,请确保自定义 AMI 的 KMS 密钥也用于加密集群的 Amazon EBS 根卷。

创建集群

您可以在 ImageId 字段中指定用于 CreateCluster 操作的自定义 AMI。

以下示例说明如何使用自定义 AMI 创建集群,无论是否使用用于加密集群卷的Amazon KMS客户托管密钥。

Standard example

以下示例说明如何使用自定义 AMI 创建集群。

aws sagemaker create-cluster \ --cluster-name <exampleClusterName> \ --orchestrator 'Eks={ClusterArn='<eks_cluster_arn>'}' \ --node-provisioning-mode Continuous \ --instance-groups '{ "InstanceGroupName": "<exampleGroupName>", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "LifeCycleConfig": { "SourceS3Uri": "<s3://amzn-s3-demo-bucket>", "OnCreate": "on_create_noop.sh" }, "ImageId": "<your_custom_ami>", "ExecutionRole": "<arn:aws:iam::444455556666:role/Admin>", "ThreadsPerCore": 1, "InstanceStorageConfigs": [ { "EbsVolumeConfig": { "VolumeSizeInGB": 200 } } ] }' --vpc-config '{ "SecurityGroupIds": ["<security_group>"], "Subnets": ["<subnet>"] }'
Customer managed key example

以下示例说明如何使用自定义 AMI 创建集群,同时指定您自己的Amazon KMS客户托管密钥来加密集群的 Amazon EBS 卷。可以为根卷和实例存储卷指定不同的客户托管密钥。如果您在InstanceStorageConfigs现场不使用客户托管的密钥,则使用Amazon自有的 KMS 密钥对卷进行加密。如果您对根卷和辅助实例存储卷使用不同的密钥,请对两个密钥设置所需的 KMS 密钥策略。

aws sagemaker create-cluster \ --cluster-name <exampleClusterName> \ --orchestrator 'Eks={ClusterArn='<eks_cluster_arn>'}' \ --node-provisioning-mode Continuous \ --instance-groups '{ "InstanceGroupName": "<exampleGroupName>", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "LifeCycleConfig": { "SourceS3Uri": "<s3://amzn-s3-demo-bucket>", "OnCreate": "on_create_noop.sh" }, "ImageId": "<your_custom_ami>", "ExecutionRole": "<arn:aws:iam:us-east-1:444455556666:role/Admin>", "ThreadsPerCore": 1, "InstanceStorageConfigs": [ # Root volume configuration { "EbsVolumeConfig": { "RootVolume": True, "VolumeKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/key-id" } }, # Instance storage volume configuration { "EbsVolumeConfig": { "VolumeSizeInGB": 100, "VolumeKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/key-id" } } ] }' --vpc-config '{ "SecurityGroupIds": ["<security_group>"], "Subnets": ["<subnet>"] }'

更新集群软件

如果要使用自定义 AMI 更新集群上的现有实例组,可以使用 UpdateClusterSoftware 操作并在 ImageId 字段中指定您的自定义 AMI。请注意,除非您在请求中指定特定实例组的名称,否则新映像将应用于集群中的所有实例组。

以下示例说明如何使用自定义 AMI 更新集群的平台软件:

aws sagemaker update-cluster-software \ --cluster-name <exampleClusterName> \ --instance-groups <instanceGroupToUpdate> \ --image-id <customAmiId>

纵向扩展实例组

以下示例展示了如何使用自定义 AMI 扩展集群的实例组,无论是否使用Amazon KMS客户托管密钥进行加密。

Standard example

以下示例说明如何使用自定义 AMI 纵向扩展实例组。

aws sagemaker update-cluster \ --cluster-name <exampleClusterName> --instance-groups '[{ "InstanceGroupName": "<exampleGroupName>", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "LifeCycleConfig": { "SourceS3Uri": "<s3://amzn-s3-demo-bucket>", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "<arn:aws:iam::444455556666:role/Admin>", "ThreadsPerCore": 1, "ImageId": "<your_custom_ami>" }]'
Customer managed key example

以下示例说明如何使用自定义 AMI 更新和扩展集群,同时指定您自己的Amazon KMS客户托管密钥来加密集群的 Amazon EBS 卷。可以为根卷和实例存储卷指定不同的客户托管密钥。如果您在InstanceStorageConfigs现场不使用客户托管的密钥,则使用Amazon自有的 KMS 密钥对卷进行加密。如果您对根卷和辅助实例存储卷使用不同的密钥,请对两个密钥设置所需的 KMS 密钥策略。

aws sagemaker update-cluster \ --cluster-name <exampleClusterName> --instance-groups '[{ "InstanceGroupName": "<exampleGroupName>", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "LifeCycleConfig": { "SourceS3Uri": "<s3://amzn-s3-demo-bucket>", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "<arn:aws:iam::444455556666:role/Admin>", "ThreadsPerCore": 1, "ImageId": "<your_custom_ami>", "InstanceStorageConfigs": [ # Root volume configuration { "EbsVolumeConfig": { "RootVolume": True, "VolumeKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/key-id" } }, # Instance storage volume configuration { "EbsVolumeConfig": { "VolumeSizeInGB": 100, "VolumeKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/key-id" } } ] }]'

添加实例组

以下示例说明如何使用自定义 AMI 向集群添加实例组:

aws sagemaker update-cluster \ --cluster-name "<exampleClusterName>" \ --instance-groups '{ "InstanceGroupName": "<exampleGroupName>", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "LifeCycleConfig": { "SourceS3Uri": "<s3://amzn-s3-demo-bucket>", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "<arn:aws:iam::444455556666:role/Admin>", "ThreadsPerCore": 1, "ImageId": "<your_custom_ami>" }' '{ "InstanceGroupName": "<exampleGroupName2>", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "<s3://amzn-s3-demo-bucket>", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "<arn:aws:iam::444455556666:role/Admin>", "ThreadsPerCore": 1, "ImageId": "<your_custom_ami>" }'