Déploiement d'un modèle dans le registre - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déploiement d'un modèle dans le registre

Après avoir enregistré une version du modèle et approuvé son déploiement, déployez-la sur un point de SageMaker terminaison pour une inférence en temps réel. Vous pouvez déployer votre modèle à l'aide du SageMaker SDK ou du AWS SDK for Python (Boto3) (Boto3).

Lorsque vous créez un projet d'opérations d'apprentissage automatique (MLOps) et que vous choisissez un modèle de MLOps projet incluant le déploiement du modèle, les versions du modèle approuvées dans le registre des modèles sont automatiquement déployées en production. Pour plus d'informations sur l'utilisation de SageMaker MLOps projets, consultezMLOpsAutomatisation avec des SageMaker projets.

Vous pouvez également permettre à un AWS compte de déployer des versions de modèles créées dans un autre compte en ajoutant une politique de ressources entre comptes. Par exemple, une équipe de votre organisation peut être responsable des modèles d'entraînement et une équipe différente est responsable du déploiement et de la mise à jour des modèles.

Déployer un modèle à partir du registre (SageMaker SDK)

Pour déployer une version de modèle à l'aide d'Amazon SageMaker Python, SDK utilisez l'extrait de code suivant :

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

Déploiement d'un modèle à partir du registre (Boto3)

Pour déployer une version de modèle à l'aide du AWS SDK for Python (Boto3), procédez comme suit :

  1. L'extrait de code suivant suppose que vous avez déjà créé le client SageMaker Boto3 sm_client et une version du modèle ARN stockée dans la variable. model_version_arn

    Créez un objet de modèle à partir de la version du modèle en appelant l'opération create_modelAPI. Transmettez le nom de ressource Amazon (ARN) de la version du modèle dans le cadre Containers de l'objet du modèle :

    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"]))
  2. Créez une configuration de point de terminaison en appelant create_endpoint_config. La configuration du point de terminaison spécifie le nombre et le type d'EC2instances Amazon à utiliser pour le point de terminaison.

    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'}])
  3. Créez le point de terminaison en appelant 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'])

Déploiement d'une version de modèle à partir d'un compte différent

Vous pouvez autoriser un AWS compte à déployer des versions de modèles créées dans un autre compte en ajoutant une politique de ressources entre comptes. Par exemple, une équipe de votre organisation peut être responsable des modèles d'entraînement et une équipe différente est responsable du déploiement et de la mise à jour des modèles. Lorsque vous créez ces politiques de ressources, vous appliquez la politique à la ressource spécifique à laquelle vous voulez accorder l'accès. Pour plus d'informations sur les politiques de ressources entre comptes dans AWS, voir Logique d'évaluation des politiques entre comptes dans le Guide de l'AWS Identity and Access Management utilisateur.

Note

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

Pour activer le déploiement de modèles entre comptes dans SageMaker, vous devez fournir une politique de ressources entre comptes pour le groupe de modèles contenant les versions de modèles que vous souhaitez déployer, le ECR référentiel Amazon où réside l'image d'inférence du groupe de modèles et le compartiment Amazon S3 dans lequel les versions du modèle sont stockées.

Pour pouvoir déployer un modèle créé dans un autre compte, vous devez disposer d'un rôle ayant accès aux SageMaker actions, tel qu'un rôle associé à la politique AmazonSageMakerFullAccess gérée. Pour plus d'informations sur les politiques SageMaker gérées, consultezAWS Politiques gérées pour Amazon SageMaker.

L'exemple suivant crée des politiques inter-compte pour ces trois ressources et les applique aux ressources. L'exemple suppose également que vous avez précédemment défini les variables suivantes :

  • bucket— Le compartiment Amazon S3 dans lequel sont stockées les versions des modèles.

  • kms_key_id— La KMS clé utilisée pour chiffrer le résultat de l'entraînement.

  • sm_client— Un client SageMaker Boto3.

  • model_package_group_name— Le groupe de modèles auquel vous souhaitez accorder un accès entre comptes.

  • model_package_group_arn— Le groupe ARN de modèles auquel vous souhaitez accorder un accès entre comptes.

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