Enregistrement d’une version de modèle - Amazon SageMaker AI

Enregistrement d’une version de modèle

Vous pouvez enregistrer un modèle Amazon SageMaker AI en créant une version de modèle qui spécifie le groupe de modèles auquel il appartient. Une version de modèle doit inclure les artefacts du modèle (les poids entraînés d’un modèle) et éventuellement le code d’inférence du modèle.

Un pipeline d’inférence est un modèle SageMaker AI composé d’une séquence linéaire de deux à quinze conteneurs qui traitent les demandes d’inférence. Vous enregistrez un pipeline d’inférence en spécifiant les conteneurs et les variables d’environnement associées. Pour plus d’informations sur les pipelines d’inférence, consultez Pipelines d’inférence dans Amazon SageMaker AI.

Vous pouvez enregistrer un modèle avec un pipeline d’inférence en spécifiant les conteneurs et les variables d’environnement associées. Pour créer une version de modèle avec un pipeline d’inférence en utilisant le kit AWS SDK pour Python (Boto3), la console Amazon SageMaker Studio ou en créant une étape dans un pipeline de génération de modèle SageMaker AI, procédez comme suit.

Enregistrement d’une version de modèle (SageMaker AI Pipelines)

Pour enregistrer une version de modèle à l’aide d’un pipeline de génération de modèle SageMaker AI, créez une étape RegisterModel dans votre pipeline. Pour obtenir des informations sur la création d’une étape RegisterModel dans le cadre d’un pipeline, consultez Étape 8 : Définition d’une étape RegisterModel pour créer un package de modèle.

Enregistrement d’une version de modèle (Boto3)

Pour enregistrer une version de modèle à l’aide de Boto3, appelez l’opération d’API create_model_package.

Tout d’abord, configurez le dictionnaire de paramètres à transmettre à l’opération d’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)

Ensuite, appelez l’opération d’API create_model_package en transmettant le dictionnaire de paramètres que vous venez de configurer.

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

Enregistrement d’une version de modèle (Studio ou Studio Classic)

Pour enregistrer un groupe de modèles dans la console Amazon SageMaker Studio, effectuez les étapes suivantes selon que vous utilisez Studio ou Studio Classic.

Studio
  1. Ouvrez la console SageMaker Studio en suivant les instructions fournies dans Lancement d’Amazon SageMaker Studio.

  2. Dans le panneau de navigation de gauche, choisissez Modèles dans le menu.

  3. Choisissez l’onglet Modèles enregistrés, s’il n’est pas déjà sélectionné.

  4. Juste en dessous du libellé de l’onglet Modèles enregistrés, choisissez Groupes de modèles et Mes modèles, si ce n’est pas déjà fait.

  5. Choisissez S’inscrire. Cela ouvrira la page Enregistrer un modèle.

  6. Suivez les instructions indiquées dans la page Enregistrer un modèle.

  7. Une fois que vous avez passé en revue vos choix, choisissez Inscrire. Une fois terminé, vous serez redirigé vers la page Aperçu de la version du modèle.

Studio Classic
  1. Connectez-vous à Amazon SageMaker Studio Classic. Pour plus d’informations, consultez Lancement d’Amazon SageMaker Studio Classic.

  2. Dans le volet de navigation de gauche, choisissez l’icône Accueil ( Black square icon representing a placeholder or empty image. ).

  3. Choisissez Modèles, puis Registre des modèles.

  4. Ouvrez le formulaire Enregistrer la version. Vous pouvez effectuer cette opération de deux manières :

    • Choisissez Actions, puis Créer une version de modèle.

    • Sélectionnez le nom du groupe de modèles pour lequel vous souhaitez créer une version de modèle, puis choisissez Créer une version de modèle.

  5. Dans le formulaire Enregistrer une version de modèle, entrez les informations suivantes :

    • Dans la liste déroulante Nom du groupe de packages de modèles, sélectionnez le nom du groupe de modèles.

    • (Facultatif) Entrez une description pour votre version de modèle.

    • Dans la liste déroulante Statut d’approbation du modèle, sélectionnez le statut d’approbation de version.

    • (Facultatif) Dans le champ Métadonnées personnalisées, ajoutez des balises personnalisées sous la forme de paires clé-valeur.

  6. Choisissez Suivant.

  7. Dans le formulaire Spécification d'inférence, entrez les informations suivantes :

    • Entrez l'emplacement de votre image d'inférence.

    • Entrez l’emplacement de vos artefacts de données de modèle.

    • (Facultatif) Entrez des informations sur les images pour les tâches de transformation et d’inférence en temps réel, ainsi que sur les types MIME d’entrée et de sortie pris en charge.

  8. Choisissez Suivant.

  9. (Facultatif) Fournissez des détails pour faciliter les recommandations relatives aux points de terminaison.

  10. Choisissez Suivant.

  11. (Facultatif) Choisissez les métriques de modèle que vous souhaitez inclure.

  12. Choisissez Suivant.

  13. Assurez-vous que les paramètres affichés sont corrects, puis choisissez Enregistrer une version de modèle. Si vous voyez ensuite une fenêtre modale contenant un message d'erreur, choisissez Afficher (à côté du message) pour afficher la source de l'erreur.

  14. Confirmez que votre nouvelle version de modèle apparaît sur la page du groupe de modèles parent.

Enregistrer une version de modèle à partir d’un autre compte

Pour enregistrer des versions de modèle avec un groupe de modèles créé par un autre compte AWS, vous devez ajouter une politique de ressources Gestion des identités et des accès AWS entre comptes pour activer ce compte. Par exemple, un compte AWS de votre organisation est responsable de l’entraînement des modèles et un autre compte est responsable de la gestion, du déploiement et de la mise à jour des modèles. Vous créez des politiques de ressources IAM et appliquez les politiques à la ressource de compte spécifique à laquelle vous souhaitez accorder l'accès pour ce cas. Pour plus d’informations sur les politiques de ressources inter-compte dans AWS, consultez Logique d’évaluation de politiques inter-compte dans le Guide de l’utilisateur Gestion des identités et des accès AWS.

Pour activer la découvrabilité entre comptes, qui permet à d’autres comptes de visualiser les groupes de packages de modèle à partir du compte propriétaire des ressources, consultez Découvrabilité entre comptes.

Note

Vous devez également utiliser une clé KMS pour chiffrer l’action de configuration des données de sortie pendant l’entraînement pour le déploiement de modèle entre comptes.

Pour activer le registre de modèles entre comptes dans SageMaker AI, vous devez fournir une politique de ressources entre comptes pour le groupe de modèles qui contient les versions de modèle. L’exemple suivant crée des politiques entre comptes pour le groupe de modèles et applique ces politiques à cette ressource spécifique.

La configuration suivante doit être définie dans le compte source qui enregistre les modèles entre comptes dans un groupe de modèles. Dans cet exemple, le compte source est le compte d'entraînement du modèle qui va entraîner puis enregistrer le modèle entre comptes dans le registre des modèles du compte de registre des modèles.

L’exemple suppose que vous avez préalablement défini les variables suivantes :

  • sm_client : un client SageMaker AI Boto3.

  • model_package_group_name : le groupe de modèles auquel vous voulez accorder l’accès.

  • model_package_group_arn : l’ARN du groupe de modèles auquel vous voulez accorder l’accès intercompte.

  • bucket : le compartiment Amazon S3 où sont stockés les artefacts d’entraînement des modèles.

Pour pouvoir déployer un modèle créé dans un autre compte, l’utilisateur doit disposer d’un rôle ayant accès aux actions SageMaker AI, tel qu’un rôle avec la politique gérée AmazonSageMakerFullAccess. Pour en savoir plus sur les politiques gérées SageMaker AI, consultez Politiques gérées par AWS pour Amazon SageMaker AI.

Politiques de ressources IAM requises

Le diagramme suivant illustre les politiques requises pour permettre l'enregistrement de modèles entre comptes. Comme indiqué, ces politiques doivent être actives pendant l’entraînement du modèle afin d’enregistrer correctement le modèle dans le compte du registre de modèles.

Les politiques requises pour enregistrer des modèles sur plusieurs comptes.

Les politiques Amazon ECR, Amazon S3 et AWS KMS sont présentées dans les exemples de code suivants.

Exemple de politique Amazon ECR

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

Exemple de politique 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/*" } ] }

Exemple de politique 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": "*" } ] }

Appliquer les politiques de ressources aux comptes

La configuration de politique suivante applique les politiques abordées dans la section précédente et doit être placée dans le compte d’entraînement des modèles.

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 configuration suivante doit être placée dans le compte de registre des modèles où se situe le groupe de modèles.

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

Enfin, utilisez l’action create_model_package du compte d’entraînement des modèles pour enregistrer le package du modèle dans le compte croisé.

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