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

2 分钟阅读
0

我正在使用一个 AWS 账户训练 Amazon SageMaker 模型。我想将此模型部署到其他 AWS 账户中的端点。

解决方法

账户 A(沙盒账户)

  1. 创建 AWS Key Management Service(AWS KMS)密钥。在定义密钥使用权限页面的其他 AWS 账户部分,选择添加另一个 AWS 账户。然后,输入账户 B(您要在其中部署模型的账户)的 AWS 账号。使用此密钥完成 Amazon SageMaker 训练作业。如果您未指定 AWS KMS 密钥,则 Amazon SageMaker 会默认使用 Amazon Simple Storage Service (Amazon S3)服务器端加密密钥。您不能与其他 AWS 账户共享或使用默认的 Amazon S3 服务器端加密密钥。
  2. 如果您没有创建训练作业,请创建一个训练作业。在估算器类中,添加您在上一步中创建的 AWS KMS 密钥。请参见以下示例:
    linear = sagemaker.estimator.Estimator(
        ...
        output_kms_key='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
        ...  
        )

账户 B(部署账户)

  1. 创建两个 AWS Identity and Access Management(IAM)策略,类似于以下策略。由于这些是内联策略,因此它们嵌入在 IAM 身份(用户、群组或角色)中。

    **内联策略 1:**这允许 IAM 角色访问账户 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:这允许将来的 IAM 角色在账户 A 中使用 AWS KMS 密钥。对于资源,请指定账户 A 的账户 ID 和密钥 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 桶策略以存储训练任务输出。此桶策略允许您在上一节中创建的角色访问模型构件:

{
  "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"
        }
      }
    }
  ]
}

**注意:**在此示例中,将 AccountB 替换为部署账户的 AWS 账户 ID。将 AmazonSageMaker 替换为您在部署账户中创建的角色的名称。将 awsdoc-example-bucket 替换为存储训练任务输出的 S3 桶。

创建部署模型

  1. 打开 Amazon SageMaker 控制台
  2. 在导航窗格的推理下,选择模型
  3. 选择创建模型,然后输入模型的名称。
  4. 对于 IAM 角色,请选择输入自定义 IAM 角色 ARN。然后,使用以下内容填写您的自定义 ARN:
    对于 YourAccountID,输入账户 B 的 ID。
    对于 YourRole,输入您在账户 B 中创建的 IAM 角色的名称。
  5. 对于推理代码图像的位置,请提供存储推理代码图像的注册表路径。推理图像存储在 Amazon Elastic Container Registry(Amazon ECR)或私有 Docker 注册表中。
  6. 对于模型构件的位置,提供模型构件存储在 Amazon S3 中的 URL。
  7. 在页面底部,选择创建模型。有关创建模型的更多信息,请参见创建管道模型

创建端点配置

  1. 打开 Amazon SageMaker 控制台
  2. 在导航窗格的推理下,选择端点配置
  3. 选择创建端点配置。然后,在生产变体下,添加您在上一节中创建的模型。
  4. 选择创建端点配置

创建端点

  1. 打开 Amazon SageMaker 控制台
  2. 在导航窗格的推理下,选择端点
  3. 选择创建端点,然后选择您在上一节中创建的端点配置。
  4. 选择创建端点

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

**注意:**如果您不想重新训练您的 Amazon SageMaker 模型进行加密,则可以将对象加密作为后处理步骤。要加密现有对象,请在使用 SSE-KMS 加密对象后,使用客户自主管理型密钥将该对象复制回其本身

AWS 官方
AWS 官方已更新 8 个月前