Registro de una versión del modelo - Amazon SageMaker AI

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.

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.

Studio
  1. Siga las instrucciones de Inicialización de Amazon SageMaker Studio para abrir la consola de SageMaker Studio.

  2. En el panel de navegación izquierdo, elija Modelos en el menú.

  3. Seleccione la pestaña Modelos registrados, si aún no la ha seleccionado.

  4. Justo debajo de la etiqueta de la pestaña Modelos registrados, elija Grupos de modelos y Mis modelos, si aún no lo ha seleccionado.

  5. Elija Registro. Esto abrirá la página Registro del modelo.

  6. Siga las instrucciones proporcionadas en la página Registro del modelo.

  7. Una vez revisadas las opciones elegidas, seleccione Registrarse. Una vez completado, accederá a la página Información general de la versión del modelo.

Studio Classic
  1. Inicie sesión en Amazon SageMaker Studio Classic. Para obtener más información, consulte Iniciar Amazon SageMaker Studio Classic.

  2. En el panel de navegación izquierdo, elija el icono de Inicio ( Black square icon representing a placeholder or empty image. ).

  3. Elija Modelos y, a continuación, Registro de modelos.

  4. Abra el formulario Registrar versión. Puede hacerlo de una de las dos formas siguientes:

    • Elija Acciones y, a continuación, elija Crear versión del modelo.

    • Seleccione el nombre del grupo de modelos para el que desea crear una versión del modelo y, a continuación, elija Crear versión del modelo.

  5. En el formulario Registrar la versión del modelo, ingrese la siguiente información:

    • En el menú desplegable Nombre del grupo de paquetes de modelos, seleccione el nombre del grupo de modelos.

    • Escriba una descripción para la versión del modelo (opcional).

    • En el menú desplegable Estado de aprobación del modelo, seleccione el estado de aprobación de la versión.

    • (Opcional) En el campo Metadatos personalizados, añada etiquetas personalizadas como pares clave-valor.

  6. Elija Siguiente.

  7. En el formulario de Especificación de inferencia, ingrese la siguiente información:

    • Ingrese la ubicación de la imagen de inferencia.

    • Ingrese la ubicación de los artefactos de los datos del modelo.

    • (Opcional) Introduzca la información sobre las imágenes que se van a usar para los trabajos de transformación e inferencia en tiempo real, y los tipos MIME de entrada y salida admitidos.

  8. Elija Siguiente.

  9. Proporcione detalles para facilitar las recomendaciones de puntos de conexión (opcional).

  10. Elija Siguiente.

  11. Elija las métricas del modelo que desee incluir (opcional).

  12. Elija Siguiente.

  13. Asegúrese de que la configuración mostrada sea correcta y elija Registrar la versión del modelo. Si posteriormente ve una ventana modal con un mensaje de error, seleccione Ver (junto al mensaje) para ver el origen del error.

  14. Confirme que la nueva versión del modelo aparezca en la página del grupo de modelos principal.

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.

Las políticas necesarias para registrar los modelos en todas las cuentas.

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

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "ecr:BatchGetImage", "ecr:Describe*" ] } ] }

Ejemplo de política de Amazon S3

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "s3:GetObject", "s3:GetBucketAcl", "s3:GetObjectAcl" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

Ejemplo de política de AWS KMS

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*" } ] }

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))