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 projet MLOps incluant le déploiement du modèle, les versions de 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 projets SageMaker MLOps, consultez. Automatisez les MLOP avec des projets SageMaker

Vous pouvez également activer un compte AWS pour déployer des versions de modèles qui ont été 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 du SDK Amazon SageMaker Python, 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 de 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 dont l'ARN est stocké 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 d'API create_model. 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'instances Amazon EC2 à 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 compte AWS à déployer des versions de modèles qui ont été 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 de plus amples informations sur les politiques de ressources inter-compte dans AWS, veuillez consulter Cross-account policy evaluation logic (Logique d'évaluation de politiques inter-compte) dans le Guide de l'utilisateur AWS Identity and Access Management.

Note

Vous devez 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 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 référentiel Amazon ECR 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 stratégies gérées SageMaker, consultez AWSPolitiques 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 clé KMS utilisée pour chiffrer la sortie d'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— L'ARN du groupe 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.")