使用自定义进行集群管理 AMIs - 亚马逊 SageMaker AI

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

使用自定义进行集群管理 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 密钥符合 客户托管的AWS KMS key加密 SageMaker HyperPod中描述的权限要求。此外,请确保自定义 AMI 的 KMS 密钥也用于加密集群的 Amazon EBS 根卷。

创建集群

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

以下示例说明如何使用自定义 AMI 创建集群,无论是否使用用于加密集群卷的AWS 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 创建集群,同时指定您自己的AWS KMS客户托管密钥来加密集群的 Amazon EBS 卷。可以为根卷和实例存储卷指定不同的客户托管密钥。如果您在InstanceStorageConfigs现场不使用客户托管的密钥,则使用AWS自有的 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 扩展集群的实例组,无论是否使用AWS 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 更新和扩展集群,同时指定您自己的AWS KMS客户托管密钥来加密集群的 Amazon EBS 卷。可以为根卷和实例存储卷指定不同的客户托管密钥。如果您在InstanceStorageConfigs现场不使用客户托管的密钥,则使用AWS自有的 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>" }'