Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Implementar un modelo desde el registro
Después de registrar una versión del modelo y aprobarla para su implementación, impleméntela en un SageMaker punto final para realizar inferencias en tiempo real. Puede implementar su modelo utilizando el SageMaker SDK o el AWS SDK for Python (Boto3) (Boto3).
Al crear un proyecto de operaciones de aprendizaje automático (MLOps) y elegir una plantilla de MLOps proyecto que incluya el despliegue del modelo, las versiones del modelo aprobadas en el registro de modelos se implementan automáticamente en la producción. Para obtener información sobre el uso de SageMaker MLOps proyectos, consulteMLOpsAutomatización con SageMaker proyectos.
También puede habilitar una AWS cuenta para implementar versiones de modelos que se crearon en otra cuenta añadiendo una política de recursos multicuenta. Por ejemplo, un equipo de su organización puede ser responsable del entrenamiento de los modelos y otro equipo se encarga de implementar y actualizar los modelos.
Temas
Implemente un modelo desde el registro () SageMaker SDK
Para implementar una versión de modelo mediante Amazon 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
')
Implementar un modelo desde el registro (Boto3)
Para implementar una versión de modelo mediante el AWS SDK for Python (Boto3), complete los siguientes pasos:
-
El siguiente fragmento de código supone que ya ha creado el cliente SageMaker Boto3
sm_client
y una versión del modelo que ARN está almacenada en la variable.model_version_arn
Cree un objeto de modelo a partir de la versión del modelo mediante una llamada a la operación create_model.
API Pase el nombre del recurso de Amazon (ARN) de la versión del modelo como parte del objeto del modelo: 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"]))
-
Cree una configuración de punto de conexión llamando a
create_endpoint_config
. La configuración del punto de conexión especifica el número y el tipo de EC2 instancias de Amazon que se van a utilizar para el punto de conexión.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'}])
-
Cree el punto de conexión llamando a
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'])
Implementar una versión del modelo desde una cuenta diferente
Puede permitir que una AWS cuenta implemente versiones de modelos que se crearon en una cuenta diferente añadiendo una política de recursos multicuenta. Por ejemplo, un equipo de su organización puede ser responsable del entrenamiento de los modelos y otro equipo se encarga de implementar y actualizar los modelos. Al crear estas políticas de recursos, se aplica la política al recurso concreto al que se quiere conceder acceso. Para obtener más información sobre las políticas de recursos multicuentas AWS, consulte la Lógica de evaluación de políticas multicuentas en la Guía del AWS Identity and Access Management usuario.
nota
Debe utilizar una KMS clave para cifrar la acción de configuración de los datos de salida durante el entrenamiento para implementar un modelo multicuenta.
Para habilitar el despliegue del modelo multicuenta SageMaker, debe proporcionar una política de recursos multicuenta para el grupo de modelos que contenga las versiones del modelo que desea implementar, el ECR repositorio de Amazon donde reside la imagen de inferencia del grupo de modelos y el depósito de Amazon S3 donde se almacenan las versiones del modelo.
Para poder implementar un modelo que se creó en una cuenta diferente, debe tener un rol que tenga acceso a SageMaker las acciones, como un rol con la AmazonSageMakerFullAccess
política administrada. Para obtener información sobre las políticas SageMaker administradas, consulteAWS Políticas gestionadas para Amazon SageMaker.
El siguiente ejemplo crea políticas entre cuentas para estos tres recursos y aplica las políticas a los recursos. En el ejemplo también se supone que ha definido previamente las siguientes variables:
-
bucket
— El depósito de Amazon S3 donde se almacenan las versiones de los modelos. -
kms_key_id
— La KMS clave utilizada para cifrar el resultado del entrenamiento. -
sm_client
— Un cliente de SageMaker Boto3. -
model_package_group_name
— El grupo modelo al que desea conceder acceso entre cuentas. -
model_package_group_arn
— El grupo modelo ARN al que desea conceder acceso a varias cuentas.
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.")