レジストリからモデルをデプロイする - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

レジストリからモデルをデプロイする

モデルバージョンを登録してデプロイを承認したら、リアルタイム推論のためにそれをエンドポイントに SageMakerデプロイします。または を使用して SageMaker SDKモデルをデプロイできます。 AWS SDK for Python (Boto3) (Boto3)。

機械学習オペレーション (MLOps) プロジェクトを作成し、モデルのデプロイを含むMLOpsプロジェクトテンプレートを選択すると、Model Registry の承認済みモデルバージョンが自動的に本番環境にデプロイされます。プロジェクトの使用 SageMaker MLOpsについては、「」を参照してください SageMaker プロジェクトMLOpsによる自動化

を有効にすることもできます。 AWS クロスアカウントリソースポリシーを追加して、別のアカウントで作成されたモデルバージョンをデプロイする アカウント。例えば、組織のあるチームがモデルのトレーニングを担当し、別のチームがモデルのデプロイと更新を担当する場合があります。

レジストリからモデルをデプロイする (SageMaker SDK)

Amazon SageMaker Python SDKを使用してモデルバージョンをデプロイするには、次のコードスニペットを使用します。

from sagemaker import ModelPackage from time import gmtime, strftime model_package_arn = 'arn:aws:sagemaker:us-east-2:12345678901:model-package/modeltest/1' model = ModelPackage(role=role, model_package_arn=model_package_arn, sagemaker_session=sagemaker_session) model.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge')

レジストリからモデルをデプロイする (Boto3)

を使用してモデルバージョンをデプロイするには AWS SDK for Python (Boto3)、次のステップを実行します。

  1. 次のコードスニペットは、 SageMaker Boto3 クライアントsm_clientと、 ARNが変数 に保存されているモデルバージョンを既に作成していることを前提としていますmodel_version_arn

    create_model APIオペレーションを呼び出して、モデルバージョンからモデルオブジェクトを作成します。モデルオブジェクトの の一部として、モデルバージョンの Amazon リソースネーム (ARN) Containers を渡します。

    model_name = 'DEMO-modelregistry-model-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("Model name : {}".format(model_name)) container_list = [{'ModelPackageName': model_version_arn}] create_model_response = sm_client.create_model( ModelName = model_name, ExecutionRoleArn = role, Containers = container_list ) print("Model arn : {}".format(create_model_response["ModelArn"]))
  2. create_endpoint_config を呼び出して、エンドポイント設定を作成します。エンドポイント設定は、エンドポイントに使用する Amazon EC2インスタンスの数とタイプを指定します。

    endpoint_config_name = 'DEMO-modelregistry-EndpointConfig-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print(endpoint_config_name) create_endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName = endpoint_config_name, ProductionVariants=[{ 'InstanceType':'ml.m4.xlarge', 'InitialVariantWeight':1, 'InitialInstanceCount':1, 'ModelName':model_name, 'VariantName':'AllTraffic'}])
  3. create_endpoint を呼び出してエンドポイントを作成します。

    endpoint_name = 'DEMO-modelregistry-endpoint-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("EndpointName={}".format(endpoint_name)) create_endpoint_response = sm_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name) print(create_endpoint_response['EndpointArn'])

別のアカウントからモデルバージョンをデプロイする

を許可できます。 AWS クロスアカウントリソースポリシーを追加して、別のアカウントで作成されたモデルバージョンをデプロイする アカウント。例えば、組織のあるチームがモデルのトレーニングを担当し、別のチームがモデルのデプロイと更新を担当する場合があります。このようなリソースポリシーを作成するときは、アクセスを許可する特定のリソースにポリシーを適用します。のクロスアカウントリソースポリシーの詳細については、「」を参照してください。 AWS、「」の「クロスアカウントポリシーの評価ロジック」を参照してください。 AWS Identity and Access Management ユーザーガイド

注記

クロスアカウントモデルデプロイのトレーニング中に出力データ設定アクションを暗号化するには、 KMSキーを使用する必要があります。

でクロスアカウントモデルデプロイを有効にするには SageMaker、デプロイするモデルバージョン、モデルグループの推論イメージが存在する Amazon ECRリポジトリ、およびモデルバージョンが保存されている Amazon S3 バケットを含むモデルグループのクロスアカウントリソースポリシーを指定する必要があります。

別のアカウントで作成されたモデルをデプロイできるようにするには、 AmazonSageMakerFullAccess管理ポリシーを持つロールなどの SageMaker アクションにアクセスできるロールが必要です。管理ポリシーの詳細については SageMaker、「」を参照してくださいAWS Amazon の マネージドポリシー SageMaker

次の例では、これらの 3 つのリソースすべてに対してクロスアカウントポリシーを作成し、そのポリシーをリソースに適用します。この例では、以前に次の変数を定義したことも前提としています。

  • bucket – モデルバージョンが保存されている Amazon S3 バケット。

  • kms_key_id – トレーニング出力の暗号化に使用されるKMSキー。

  • sm_client – SageMaker Boto3 クライアント。

  • model_package_group_name – クロスアカウントアクセスを許可するモデルグループ。

  • model_package_group_arn – クロスアカウントアクセスARNを許可するモデルグループ。

import json # The cross-account id to grant access to cross_account_id = "123456789012" # Create the policy for access to the ECR repository ecr_repository_policy = { 'Version': '2012-10-17', 'Statement': [{ 'Sid': 'AddPerm', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': ['ecr:*'] }] } # Convert the ECR policy from JSON dict to string ecr_repository_policy = json.dumps(ecr_repository_policy) # Set the new ECR policy ecr = boto3.client('ecr') response = ecr.set_repository_policy( registryId = account, repositoryName = 'decision-trees-sample', policyText = ecr_repository_policy ) # Create a policy for accessing the S3 bucket bucket_policy = { 'Version': '2012-10-17', 'Statement': [{ 'Sid': 'AddPerm', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': 's3:*', 'Resource': f'arn:aws:s3:::{bucket}/*' }] } # Convert the policy from JSON dict to string bucket_policy = json.dumps(bucket_policy) # Set the new policy s3 = boto3.client('s3') response = s3.put_bucket_policy( Bucket = bucket, Policy = bucket_policy) # Create the KMS grant for encryption in the source account to the # Model Registry account Model Group client = boto3.client('kms') response = client.create_grant( GranteePrincipal=cross_account_id, KeyId=kms_key_id Operations=[ 'Decrypt', 'GenerateDataKey', ], ) # 3. Create a policy for access to the Model Group. model_package_group_policy = { 'Version': '2012-10-17', 'Statement': [{ 'Sid': 'AddPermModelPackageGroup', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': ['sagemaker:DescribeModelPackageGroup'], 'Resource': f'arn:aws:sagemaker:{region}:{account}:model-package-group/{model_package_group_name}' },{ 'Sid': 'AddPermModelPackageVersion', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': ["sagemaker:DescribeModelPackage", "sagemaker:ListModelPackages", "sagemaker:UpdateModelPackage", "sagemaker:CreateModel"], 'Resource': f'arn:aws:sagemaker:{region}:{account}:model-package/{model_package_group_name}/*' }] } # Convert the policy from JSON dict to string model_package_group_policy = json.dumps(model_package_group_policy) # Set the policy to the Model Group response = sm_client.put_model_package_group_policy( ModelPackageGroupName = model_package_group_name, ResourcePolicy = model_package_group_policy) print('ModelPackageGroupArn : {}'.format(create_model_package_group_response['ModelPackageGroupArn'])) print("First Versioned ModelPackageArn: " + model_package_arn) print("Second Versioned ModelPackageArn: " + model_package_arn2) print("Success! You are all set to proceed for cross-account deployment.")