Registro de una versión del modelo
Puede registrar un modelo de Amazon SageMaker AI mediante la creación de una versión del modelo que especifique el grupo de modelos al que pertenece. La versión del modelo debe incluir tanto los artefactos del modelo (los pesos entrenados de un modelo) como el código de inferencia del modelo.
Una canalización de inferencia es un modelo de SageMaker AI compuesto de una secuencia lineal de dos a quince contenedores que procesan solicitudes de inferencia. Para registrar una canalización de inferencia, especifique los contenedores y las variables de entorno asociadas. Para obtener más información sobre las canalizaciones de inferencia, consulte Canalizaciones de inferencia en Amazon SageMaker AI.
Para registrar un modelo con una canalización de inferencia, especifique los contenedores y las variables de entorno asociadas. Para crear una versión del modelo con una canalización de inferencia mediante el AWS SDK para Python (Boto3), la consola de Amazon SageMaker Studio o mediante la creación de un paso en una canalización de creación de modelos de SageMaker AI, siga estos pasos.
Temas
Registro de una versión del modelo (canalizaciones de SageMaker AI)
Para registrar una versión del modelo mediante una canalización de creación de modelos de SageMaker AI, cree un paso RegisterModel en la canalización. Para obtener más información sobre cómo crear un paso RegisterModel como parte de una canalización, consulte Paso 8: definición de un paso RegisterModel para crear un paquete de modelos.
Registrar una versión del modelo (Boto3)
Para registrar una versión de modelo mediante Boto3, llame a la operación de la API create_model_package.
En primer lugar, debe configurar el diccionario de parámetros para pasarlo a la operación de la API create_model_package.
# Specify the model source model_url = "s3://your-bucket-name/model.tar.gz" modelpackage_inference_specification = { "InferenceSpecification": { "Containers": [ { "Image":image_uri, "ModelDataUrl":model_url} ], "SupportedContentTypes": [ "text/csv" ], "SupportedResponseMIMETypes": [ "text/csv" ], } } # Alternatively, you can specify the model source like this: # modelpackage_inference_specification["InferenceSpecification"]["Containers"][0]["ModelDataUrl"]=model_url create_model_package_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageDescription" : "Model to detect 3 different types of irises (Setosa, Versicolour, and Virginica)", "ModelApprovalStatus" : "PendingManualApproval" } create_model_package_input_dict.update(modelpackage_inference_specification)
A continuación, llame a la operación de la API create_model_package y pase el diccionario de parámetros que acaba de configurar.
create_model_package_response = sm_client.create_model_package(**create_model_package_input_dict) model_package_arn = create_model_package_response["ModelPackageArn"] print('ModelPackage Version ARN : {}'.format(model_package_arn))
Registro de una versión del modelo (Studio o Studio Classic)
Para registrar una versión de modelo en la consola de Amazon SageMaker Studio, realice los pasos siguientes en función de si utiliza Studio o Studio Classic.
Registrar una versión del modelo desde una cuenta diferente
Para registrar versiones del modelo en un grupo de modelos creado por una cuenta de AWS diferente, debe agregar una política de recursos de AWS Identity and Access Management entre cuentas para habilitar esa cuenta. Por ejemplo, una cuenta de AWS de su organización es responsable del entrenamiento de los modelos y otra cuenta es responsable de administrar, implementar y actualizar los modelos. En este caso, debe crear políticas de recursos de IAM y aplicarlas al recurso de cuenta específico al que desea conceder acceso. Para obtener más información sobre las políticas de recursos entre cuentas en AWS, consulte Lógica de evaluación de políticas entre cuentas en la Guía del usuario de AWS Identity and Access Management.
Para habilitar la detección entre cuentas, que permite a otras cuentas ver los grupos de paquetes de modelos desde la cuenta del propietario del recurso, consulte Capacidad de detección entre cuentas.
nota
También debe usar una clave de KMS para cifrar la acción de configuración de los datos de salida durante el entrenamiento para la implementación de un modelo entre cuentas.
Para habilitar el registro de modelos entre cuentas en SageMaker AI, debe proporcionar una política de recursos entre cuentas para el grupo de modelos que contiene las versiones del modelo. A continuación se muestra un ejemplo en el que se crean políticas entre cuentas para el grupo de modelos y se aplican a ese recurso específico.
La siguiente configuración debe establecerse en la cuenta de origen que registra los modelos entre cuentas en un grupo de modelos. En este ejemplo, la cuenta de origen es la cuenta de entrenamiento del modelo que entrenará y, a continuación, registrará la cuenta cruzada del modelo en el registro de modelos de la cuenta del registro de modelos.
En el ejemplo se supone que ha definido previamente las siguientes variables:
-
sm_client: es un cliente SageMaker AI Boto3. -
model_package_group_name: el grupo de modelos al que desea conceder acceso. -
model_package_group_arn: el ARN del grupo de modelos al que desea conceder acceso entre cuentas. -
bucket: el bucket de Amazon S3 donde se almacenan los artefactos de entrenamiento del modelo.
Para poder implementar un modelo creado en una cuenta diferente, el usuario debe tener un rol que tenga acceso a las acciones de SageMaker AI, como un rol con la política administrada por AmazonSageMakerFullAccess. Para obtener más información sobre las políticas administradas por SageMaker AI, consulte Políticas administradas por AWS para Amazon SageMaker AI.
Políticas de recursos de IAM obligatorias
El siguiente diagrama muestra las políticas necesarias para permitir el registro de modelos entre cuentas. Como se muestra, estas políticas deben estar activas durante el entrenamiento del modelo para registrar correctamente el modelo en la cuenta del registro de modelos.
En los siguientes ejemplos de código se muestran políticas de Amazon ECR, Amazon S3 y AWS KMS.
Ejemplo de política de Amazon ECR
Ejemplo de política de Amazon S3
Ejemplo de política de AWS KMS
Aplicar políticas de recursos a las cuentas
La siguiente configuración de políticas aplica las políticas descritas en la sección anterior y debe incluirse en la cuenta de entrenamiento de modelos.
import json # The Model Registry account id of the Model Group model_registry_account = "111111111111" # The model training account id where training happens model_training_account = "222222222222" # 1. Create a policy for access to the ECR repository # in the model training account for the Model Registry account Model Group ecr_repository_policy = {"Version": "2012-10-17", "Statement": [{"Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": f"arn:aws:iam::{model_registry_account}:root" }, "Action": [ "ecr:BatchGetImage", "ecr:Describe*" ] }] } # 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 = model_training_account, repositoryName = "decision-trees-sample", policyText = ecr_repository_policy ) # 2. Create a policy in the model training account for access to the S3 bucket # where the model is present in the Model Registry account Model Group bucket_policy = {"Version": "2012-10-17", "Statement": [{"Sid": "AddPerm", "Effect": "Allow", "Principal": {"AWS": f"arn:aws:iam::{model_registry_account}:root" }, "Action": [ "s3:GetObject", "s3:GetBucketAcl", "s3:GetObjectAcl" ], "Resource": [ "arn:aws:s3:::{bucket}/*", "Resource: arn:aws:s3:::{bucket}" ] }] } # Convert the S3 policy from JSON dict to string bucket_policy = json.dumps(bucket_policy) # Set the new bucket policy s3 = boto3.client("s3") response = s3.put_bucket_policy( Bucket =bucket, Policy = bucket_policy) # 3. Create the KMS grant for the key used during training for encryption # in the model training account to the Model Registry account Model Group client = boto3.client("kms") response = client.create_grant( GranteePrincipal=model_registry_account, KeyId=kms_key_id Operations=[ "Decrypt", "GenerateDataKey", ], )
La siguiente configuración debe colocarse en la cuenta del registro de modelos donde se encuentra el grupo de modelos.
# The Model Registry account id of the Model Group model_registry_account = "111111111111" # 1. Create policy to allow the model training account to access the ModelPackageGroup model_package_group_policy = {"Version": "2012-10-17", "Statement": [ { "Sid": "AddPermModelPackageVersion", "Effect": "Allow", "Principal": {"AWS": f"arn:aws:iam::{model_training_account}:root"}, "Action": ["sagemaker:CreateModelPackage"], "Resource": f"arn:aws:sagemaker:{region}:{model_registry_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 new policy response = sm_client.put_model_package_group_policy( ModelPackageGroupName =model_package_group_name, ResourcePolicy = model_package_group_policy)
Por último, utilice la acción create_model_package de la cuenta de entrenamiento de modelos para registrar el paquete de modelos en la cuenta cruzada.
# Specify the model source model_url = "s3://{bucket}/model.tar.gz" #Set up the parameter dictionary to pass to the create_model_package API operation modelpackage_inference_specification = { "InferenceSpecification": { "Containers": [ { "Image": f"{model_training_account}.dkr.ecr.us-east-2.amazonaws.com/decision-trees-sample:latest", "ModelDataUrl": model_url } ], "SupportedContentTypes": [ "text/csv" ], "SupportedResponseMIMETypes": [ "text/csv" ], } } # Alternatively, you can specify the model source like this: # modelpackage_inference_specification["InferenceSpecification"]["Containers"][0]["ModelDataUrl"]=model_url create_model_package_input_dict = { "ModelPackageGroupName" :model_package_group_arn, "ModelPackageDescription" : "Model to detect 3 different types of irises (Setosa, Versicolour, and Virginica)", "ModelApprovalStatus" : "PendingManualApproval" } create_model_package_input_dict.update(modelpackage_inference_specification) # Create the model package in the Model Registry account create_model_package_response = sm_client.create_model_package(**create_model_package_input_dict) model_package_arn = create_model_package_response["ModelPackageArn"] print('ModelPackage Version ARN : {}'.format(model_package_arn))