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) のサーバー側の暗号化キーを使用します。デフォルトの Amazon S3 サーバー側暗号化キーを別の AWS アカウントと共有したり、使用したりすることはできません。
  2. トレーニングジョブを作成します (作成していない場合)。Estimator クラスに、前のステップで作成した AWS KMS キーを追加します。次の例を参照してください:
    linear = sagemaker.estimator.Estimator(
        ...
        output_kms_key='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
        ...  
        )

アカウント B (デプロイアカウント)

  1. 次のような AWS Identity and Access Management (IAM) ポリシーを 2 つ作成します。これらはインラインポリシーであるため、IAM ID (ユーザー、グループ、またはロール) に埋め込まれます。

    **インラインポリシー 1:**これは、モデルアーティファクトを含むアカウント A の Amazon S3 リソースへのアクセスを IAM ロールに許可します。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 の 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 つのインラインポリシーを、ステップ 2 で作成したロールにアタッチします。ロールには以下の 3 つのポリシーがあります。 AmazonSageMakerFullAccess と 2 つのインラインポリシーがあります。

アカウント 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 を完成させます。
    [YourAcountID] で、アカウント 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公式更新しました 9ヶ月前