사용자 지정 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 공유 권한을 제어합니다. 예를 들어 AllowSharingtrue로 설정하여 AMI에 태그를 지정할 수 있습니다.

  • 정책에 컨텍스트 키를 추가하여 특정 태그로 태그가 지정된 AMI에 대한 AMI 공유만 허용합니다.

다음 정책은 AllowSharingtrue로 태그가 지정된 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를 지정할 수 있습니다.

다음 예제에서는 클러스터 볼륨을 암호화하기 위한 AWS KMS고객 관리형 키를 사용하거나 사용하지 않고 사용자 지정 AMI를 사용하여 클러스터를 생성하는 방법을 보여줍니다.

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

다음 예제에서는 클러스터의 Amazon EBS 볼륨을 암호화하기 위한 자체 AWS KMS고객 관리형 키를 지정하면서 사용자 지정 AMI를 사용하여 클러스터를 생성하는 방법을 보여줍니다. 루트 볼륨과 인스턴스 스토리지 볼륨에 대해 서로 다른 고객 관리형 키를 지정할 수 있습니다. 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>

인스턴스 그룹 스케일 업

다음 예제에서는 암호화에 AWS KMS고객 관리형 키를 사용하거나 사용하지 않고 사용자 지정 AMI를 사용하여 클러스터의 인스턴스 그룹을 확장하는 방법을 보여줍니다.

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

다음 예제에서는 클러스터의 Amazon EBS 볼륨을 암호화하기 위해 자체 AWS KMS고객 관리형 키를 지정하면서 사용자 지정 AMI로 클러스터를 업데이트하고 확장하는 방법을 보여줍니다. 루트 볼륨과 인스턴스 스토리지 볼륨에 대해 서로 다른 고객 관리형 키를 지정할 수 있습니다. 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>" }'