翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
モデルバージョンを登録してデプロイを承認したら、リアルタイム推論のために SageMaker AI エンドポイントにデプロイします。SageMaker AI SDK または を使用してモデルをデプロイできます AWS SDK for Python (Boto3)。
機械学習オペレーション (MLOps) プロジェクトを作成して、モデルのデプロイを含む MLOps プロジェクトテンプレートを選択すると、Model Registry 内の承認済みのモデルバージョンが自動的に本番環境にデプロイされます。SageMaker AI MLOps プロジェクトの使用については、「」を参照してくださいSageMaker プロジェクトを使用した MLOps の自動化。
クロス AWS アカウントリソースポリシーを追加することで、別のアカウントで作成されたモデルバージョンをデプロイするようにアカウントを有効にすることもできます。例えば、組織のあるチームがモデルのトレーニングを担当し、別のチームがモデルのデプロイと更新を担当する場合があります。
レジストリからモデルをデプロイする (SageMaker AI 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)、次の手順を実行します。
-
次のコードスニペットは、SageMaker AI 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"]))
-
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'}])
-
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 AI でクロスアカウントモデルデプロイを有効にするには、デプロイするモデルバージョン、モデルグループの推論イメージが存在する Amazon ECR リポジトリ、モデルバージョンが保存されている Amazon S3 バケットを含むモデルグループのクロスアカウントリソースポリシーを指定する必要があります。
別のアカウントで作成されたモデルをデプロイするには、 AmazonSageMakerFullAccess
管理ポリシーを持つロールなど、SageMaker AI アクションにアクセスできるロールが必要です。SageMaker AI 管理ポリシーの詳細については、「」を参照してくださいAWS Amazon SageMaker AI の マネージドポリシー。
次の例では、これらの 3 つのリソースすべてに対してクロスアカウントポリシーを作成し、そのポリシーをリソースに適用します。この例では、次の変数が既に定義済みであることも前提としています。
-
bucket
– モデルバージョンが保存される Amazon S3 バケット -
kms_key_id
– トレーニング出力の暗号化に使用される KMS キー -
sm_client
– SageMaker AI 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.")