使用自訂 AMI 進行叢集管理 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用自訂 AMI 進行叢集管理

在建置了自訂 AMI 之後,您可以將其用於建立或更新 Amazon SageMaker HyperPod 叢集。您也可以擴增或新增使用新 AMI 的執行個體群組。

叢集操作所需的許可

將下列許可新增至操作和設定 SageMaker HyperPod 叢集的叢集管理員使用者。下列政策範例包含叢集管理員執行 SageMaker HyperPod 核心 API,以及使用自訂 AMI 管理 SageMaker HyperPod 叢集的最低許可集。

請注意,AMI 和 AMI EBS 快照共用許可會透過 ModifyImageAttributeModifySnapshotAttribute API 許可包含為下列政策的一部分。若要縮減共用許可,您可以採取下列步驟:

  • 將控制 AMI 共用許可的標籤新增至 AMI 和 AMI 快照。例如,您可以將具有 AllowSharing 的 AMI 標記為 true

  • 在政策中新增內容金鑰,只允許使用特定標籤標記的 AMI 共用 AMI。

下列政策是縮減的政策,以確保只允許使用 AllowSharing 標記為 true 的 AMI。

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 金鑰符合SageMaker HyperPod 的客戶受管AWS KMS key加密中所述的許可。此外,請確定自訂 AMI 的 KMS 金鑰也用來加密叢集的 Amazon EBS 根磁碟區。

建立 叢集

您可以在 CreateCluster 操作的 ImageId 欄位中指定自訂 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>" }'