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

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

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

解决方法 账户 A(沙盒账户)

1.创建 AWS Key Management Service (AWS KMS) 客户主密钥 (CMK)。在定义密钥使用权限页面的其他 AWS 账户部分中,选择添加其他 AWS 账户。然后,输入账户 B 的 AWS 账号(您想要将部模型部署至其中的账户)。

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

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

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": 
}

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

{
    "Version": "2012-10-17",
    "Statement": ,
            "Resource": 
        }
    ]
}

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

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

账户 A(沙盒账户)

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

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

{
    "Version": "2012-10-17",
    "Statement": 
}
账户 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。