

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

# 使用自訂 AMI 進行叢集管理
<a name="hyperpod-custom-ami-cluster-management"></a>

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

## 叢集操作所需的許可
<a name="hyperpod-custom-ami-permissions"></a>

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

請注意，AMI 和 AMI EBS 快照共用許可會透過 `ModifyImageAttribute` 和 `ModifySnapshotAttribute` 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 加密](smcluster-cmk.md)中所述的許可。此外，請確定自訂 AMI 的 KMS 金鑰也用來加密叢集的 Amazon EBS 根磁碟區。

## 建立 叢集
<a name="hyperpod-custom-ami-api-create"></a>

您可以在 `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>"]
}'
```

------

## 更新叢集軟體
<a name="hyperpod-custom-ami-api-update"></a>

如果您想要使用自訂 AMI 更新叢集上的現有執行個體群組，您可以使用 `UpdateClusterSoftware` 操作，並在 `ImageId` 欄位中指定自訂 AMI。請注意，除非您在請求中指定特定執行個體群組的名稱，否則新映像會套用至叢集中的所有執行個體群組。

下列範例展示如何使用自訂 AMI 更新叢集的平台軟體：

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

## 擴增執行個體群組
<a name="hyperpod-custom-ami-scale-up"></a>

下列範例示範如何使用自訂 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"
                }
            }
   ]
}]'
```

------

## 新增執行個體群組
<a name="hyperpod-custom-ami-add-instance-group"></a>

下列範例展示如何使用自訂 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>"
}'
```