如何将 Amazon SageMaker 模型部署到不同的 AWS 账户?

上次更新时间:2020 年 7 月 14 日

我正在培训 AWS 账户中的 Amazon SageMaker 模型。如何将此模型部署到其他 AWS 账户中的终端节点?

解决方法

账户 A(沙盒账户)

1. 创建 AWS Key Management Service (AWS KMS) AWS KMS 密钥(KMS 密钥)。在 Define key usage permissions(定义密钥使用权限)页面的 Other AWS accounts(其他 AWS 账户)部分中,选择 Add another AWS account(添加其他 AWS 账户)。然后,输入账户 B 的 AWS 账号(您想要部署模型的账户)。

您将使用此 KMS 密钥进行 Amazon SageMaker 训练作业。如果您没有为训练作业指定 KMS 密钥,那么 Amazon SageMaker 的原定设置将使用 Amazon Simple Storage Service (Amazon S3) 服务器端加密密钥。原定设置的 Amazon S3 服务器端加密密钥无法与其他 AWS 账户共享或由其他 AWS 账户使用。

2. 如果没有训练作业,请先创建训练作业。在 Estimator 类中,添加您在上一步中创建的 KMS 密钥。例如:

linear = sagemaker.estimator.Estimator(
    …
    output_kms_key='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    … 
    )

账户 B(部署账户)

1. 创建两个 AWS Identity and Access Management (IAM) 策略,类似于以下内容。这两种策略为内联策略,这意味着它们会嵌入到 IAM 身份(用户、组或角色)中。

内联策略 1:允许角色访问账户 A(含有模型构件)中的 Amazon S3 资源。将 awsdoc-example-bucket 替换为存储训练作业输出的 S3 存储桶的名称。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::awsdoc-example-bucket/sagemaker/linear-learner/output/model.tar.gz"
        }
    ]
}

内联策略 2:允许您稍后将会创建的角色使用账户 A 中的 KMS。对于 Resource(资源),指定账户 A 的账户 ID 和 KMS 密钥 ID。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowUseOfTheKey",
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:AccountA:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
            ]
        }
    ]
}

2. 为 Amazon SageMaker 创建 IAM 角色 该角色附加了 AmazonSageMakerFullAccess 策略。

3. 将您在步骤 1 中创建的两个内联策略附加到在步骤 2 中创建的角色。该角色应具有三个策略:AmazonSageMakerFullAccess,以及两个内联策略。

账户 A(沙盒账户)

为存储培训作业输出的存储桶创建 S3 存储桶策略。此存储桶策略允许您在上一部分中创建的角色访问模型构件。替换下例中的如下值:

AccountB:部署账户的 AWS 账户 ID AmazonsageMaker:您在部署账户中创建的角色的名称 awsdoc-example-bucket:存储培训作业输出的 S3 存储桶

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountB:root"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::awsdoc-example-bucket/sagemaker/linear-learner/output/model.tar.gz",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalArn": "arn:aws:iam::AccountB:role/AmazonSageMaker"
                }
            }
        }
    ]
}

账户 B(部署账户)

创建部署模型:

1.打开 Amazon SageMaker 控制台

2.在导航窗格中,选择推理下的模型

3.选择创建模型,然后输入以下内容:IAM 角色:选择自定义 IAM 角色 ARN。对于 YourAccountID,输入账户 B 的 ID。对于 YourRole,输入您在账户 B 中创建的 IAM 角色的名称。推理代码图像的位置提供推理代码图像存储在 Amazon Elastic Container Registry (Amazon ECR) 中的注册表路径。模型构件的位置:提供模型构件存储在 Amazon S3 中的 URL。

4.在页面的底部,选择创建模型。有关创建模型的更多信息,请参阅创建管道模型

创建终端节点配置:

1.打开 Amazon SageMaker 控制台

2.在导航窗格中,选择推理下的终端节点配置

3.选择创建终端节点配置。然后,在生产变体下,添加您在上一部分中创建的模型。

4.选择创建终端节点配置

创建终端节点:

1.打开 Amazon SageMaker 控制台

2.在导航窗格中,选择推理下的终端节点

3.选择创建终端节点,然后选择您在上一部分中创建的终端节点配置。

4.选择创建终端节点

现在,您可以从账户 A 部署模型到账户 B。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?