本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
部署注册表中的模型
注册模型版本并批准其进行部署后,请将其部署到 SageMaker 终端节点以进行实时推理。
当您创建 mLOPS 项目并选择包含模型部署的 mLOPS 项目模板时,模型注册表中的已批准的模型版本将自动部署到生产环境中。有关使用的信息 SageMaker mLOP 项目,请参阅使用实现自动化 mLOP SageMaker 项目.
您还可以启用Amazon账户来部署通过添加跨账户资源策略在其他账户中创建的模型版本。例如,组织中的一个团队可能负责培训模型,另一个团队负责部署和更新模型。
从注册表中部署模型(SageMaker SDK)
使用部署模型版本亚马逊 SageMaker Python 开发工具包
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)
使用部署模型版本Amazon SDK for Python (Boto3),请完成以下步骤:
-
通过调用create_model
方法。作为模型版本的 Amazon 资源名称 (ARN) 作为 Containers
对于模型对象。以下代码段假设您已经创建了 SageMaker Boto3 客户端
sm_client
,而且您已经创建了一个模型版本,其中包含已存储在名为的变量中的 ARNmodel_version_arn
.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'])
从其他账户部署模型版本
你可以允许Amazon账户来部署通过添加跨账户资源策略在其他账户中创建的模型版本。例如,组织中的一个团队可能负责培训模型,另一个团队负责部署和更新模型。创建这些资源策略时,您将该策略应用于要向其授予访问权限的特定资源。有关跨账户资源策略的更多信息,请参阅Amazon,请参阅跨账户策略评估逻辑中的Amazon Identity and Access Management用户指南.
您必须使用 KMS 密钥加密输出数据配置跨账户模型部署期间的操作。
要在 SageMaker 中启用跨账户模型部署,您必须为包含要部署的模型版本的模型组、模型组推理映像所在的 Amazon ECR 存储库以及模型版本所在的 Amazon S3 存储桶提供跨账户资源策略存储。
要能够部署在其他账户中创建的模型,您必须具有访问权限的角色 SageMaker 操作,例如具有AmazonSageMakerFullAccess
托管策略。有关 SageMaker 托管策略的信息,请参阅。AmazonAmazon SageMaker 的托管式策略.
以下示例为所有这三种资源创建跨账户策略,并将这些策略应用于资源。
该示例假定您之前定义了以下变量:
-
bucket
-存储模型版本的 Amazon S3 存储桶。 -
kms_key_id
-用于加密训练输出的 KMS 密钥。 -
sm_client
-A 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 package 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 package 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 package 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.")