Déployez des modèles pour une inférence en temps réel - 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éployez des modèles pour une inférence en temps réel

L'inférence en temps réel est idéale pour les charges de travail d'inférence où vous avez des exigences en temps réel, interactives et à faible latence. Cette section montre comment vous pouvez utiliser l'inférence en temps réel pour obtenir des prévisions interactives à partir de votre modèle.

Plusieurs options s'offrent à vous pour déployer le modèle qui a produit la meilleure métrique de validation dans une expérience Autopilot. Par exemple, lorsque vous utilisez le pilote automatique dans SageMaker Studio Classic, vous pouvez déployer le modèle automatiquement ou manuellement. Vous pouvez également l'utiliser SageMaker APIs pour déployer manuellement un modèle de pilote automatique.

Les onglets suivants présentent trois options pour déployer votre modèle. Ces instructions supposent que vous avez déjà créé un modèle dans Autopilot. Si vous ne disposez pas de modèle, veuillez consulter Créez des tâches de régression ou de classification pour des données tabulaires à l'aide de l'AutoML API. Pour voir des exemples de chaque option, ouvrez chaque onglet.

L'interface utilisateur d'Autopilot contient des menus déroulants utiles, des boutons, des infobulles et bien plus encore, pour vous aider à parcours le déploiement du modèle. Vous pouvez déployer à l'aide de l'une des procédures suivantes : automatique ou manuelle.

  • Déploiement automatique : pour déployer automatiquement le meilleur modèle, d'une expérience Autopilot vers un point de terminaison

    1. Créez un test dans SageMaker Studio Classic.

    2. Basculez la valeur Auto deploy (Déploiement automatique) sur Yes (Oui).

      Note

      Le déploiement automatique échoue si le quota de ressources par défaut ou votre quota client pour les instances de point de terminaison dans une région est trop limité. En mode d'optimisation des hyperparamètres (HPO), vous devez disposer d'au moins deux instances ml.m5.2xlarge. En mode d'assemblage, vous devez avoir au moins une instance ml.m5.12xlarge. Si vous rencontrez un échec lié aux quotas, vous pouvez demander une augmentation de la limite de service pour les instances de point de SageMaker terminaison.

  • Déploiement manuel : pour déployer manuellement le meilleur modèle, d'une expérience Autopilot vers un point de terminaison

    1. Créez un test dans SageMaker Studio Classic.

    2. Basculez la valeur Auto deploy (Déploiement automatique) sur No (Non).

    3. Sélectionnez le modèle que vous voulez déployer sous Model name (Nom du modèle).

    4. Sélectionnez le bouton orange Deployment and advanced settings (Déploiement et paramètres avancés) situé à droite du classement. Un nouvel onglet s'ouvre.

    5. Configurez le nom du point de terminaison, le type d'instance et d'autres informations facultatives.

    6. Sélectionnez le bouton orange Deploy model (Déployer le modèle) pour déployer vers un point de terminaison.

    7. Vérifiez la progression du processus de création du point de terminaison en https://console.aws.amazon.com/sagemaker/accédant à la section Points de terminaison. Cette section se trouve dans le menu déroulant Inference (Inférence) du panneau de navigation.

    8. Une fois que le statut du point de terminaison est passé de Creating à InService, comme indiqué ci-dessous, revenez à Studio Classic et appelez le point de terminaison.

      SageMaker console : page Endpoints pour créer un point de terminaison ou vérifier l'état du point de terminaison.

Vous pouvez également obtenir des inférences en temps réel en déployant votre modèle à l'aide d'APIappels. Cette section présente les cinq étapes de ce processus à l'aide d'extraits de code AWS Command Line Interface (AWS CLI).

Pour obtenir des exemples de code complets pour AWS CLI les deux commandes et AWS SDK pour Python (boto3), ouvrez les onglets directement en suivant ces étapes.

  1. Obtenir les définitions des candidats

    Obtenez les définitions des conteneurs candidats auprès de InferenceContainers. Ces définitions de candidats sont utilisées pour créer un SageMaker modèle.

    L'exemple suivant utilise le DescribeAutoMLJobAPIpour obtenir les définitions du meilleur modèle candidat. Consultez la AWS CLI commande suivante à titre d'exemple.

    aws sagemaker describe-auto-ml-job --auto-ml-job-name <job-name> --region <region>
  2. Liste des candidats

    L'exemple suivant utilise le ListCandidatesForAutoMLJobAPIpour répertorier tous les candidats. La commande AWS CLI suivante constitue un exemple.

    aws sagemaker list-candidates-for-auto-ml-job --auto-ml-job-name <job-name> --region <region>
  3. Création d'un SageMaker modèle

    Utilisez les définitions de conteneur des étapes précédentes pour créer un SageMaker modèle à l'aide du CreateModelAPI. Consultez la AWS CLI commande suivante à titre d'exemple.

    aws sagemaker create-model --model-name '<your-custom-model-name>' \ --containers ['<container-definition1>, <container-definition2>, <container-definition3>]' \ --execution-role-arn '<execution-role-arn>' --region '<region>
  4. Créer une configuration de point de terminaison

    L'exemple suivant utilise le CreateEndpointConfigAPIpour créer une configuration de point de terminaison. Consultez la AWS CLI commande suivante à titre d'exemple.

    aws sagemaker create-endpoint-config --endpoint-config-name '<your-custom-endpoint-config-name>' \ --production-variants '<list-of-production-variants>' \ --region '<region>'
  5. Créer le point de terminaison

    L' AWS CLI exemple suivant utilise le CreateEndpointAPIpour créer le point de terminaison.

    aws sagemaker create-endpoint --endpoint-name '<your-custom-endpoint-name>' \ --endpoint-config-name '<endpoint-config-name-you-just-created>' \ --region '<region>'

    Vérifiez la progression du déploiement de votre terminal à l'aide du DescribeEndpointAPI. Consultez la AWS CLI commande suivante à titre d'exemple.

    aws sagemaker describe-endpoint —endpoint-name '<endpoint-name>' —region <region>

    Lorsque EndpointStatus devient InService, le point de terminaison est prêt à être utilisé pour l'inférence en temps réel.

  6. Appeler le point de terminaison

    La structure de commande suivante appelle le point de terminaison pour une inférence en temps réel.

    aws sagemaker invoke-endpoint --endpoint-name '<endpoint-name>' \ --region '<region>' --body '<your-data>' [--content-type] '<content-type>' <outfile>

Les onglets suivants contiennent des exemples de code complets pour déployer un modèle avec AWS SDK for Python (boto3) ou le. AWS CLI

AWS SDK for Python (boto3)
  1. Obtenez les définitions des candidats à l'aide de l'exemple de code suivant.

    import sagemaker import boto3 session = sagemaker.session.Session() sagemaker_client = boto3.client('sagemaker', region_name='us-west-2') job_name = 'test-auto-ml-job' describe_response = sm_client.describe_auto_ml_job(AutoMLJobName=job_name) # extract the best candidate definition from DescribeAutoMLJob response best_candidate = describe_response['BestCandidate'] # extract the InferenceContainers definition from the caandidate definition inference_containers = best_candidate['InferenceContainers']
  2. Créez le modèle à l'aide de l'exemple de code suivant.

    # Create Model model_name = 'test-model' sagemaker_role = 'arn:aws:iam:444455556666:role/sagemaker-execution-role' create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, Containers = inference_containers )
  3. Créez la configuration du point de terminaison à l'aide de l'exemple de code suivant.

    endpoint_config_name = 'test-endpoint-config' instance_type = 'ml.m5.2xlarge' # for all supported instance types, see # https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html#sagemaker-Type-ProductionVariant-InstanceType # Create endpoint config endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", "ModelName": model_name, "InstanceType": instance_type, "InitialInstanceCount": 1 } ] ) print(f"Created EndpointConfig: {endpoint_config_response['EndpointConfigArn']}")
  4. Créez le point de terminaison et déployez le modèle à l'aide de l'exemple de code suivant.

    # create endpoint and deploy the model endpoint_name = 'test-endpoint' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name) print(create_endpoint_response)

    Vérifiez l'état de création du point de terminaison à l'aide de l'exemple de code suivant.

    # describe endpoint creation status status = sagemaker_client.describe_endpoint(EndpointName=endpoint_name)["EndpointStatus"]
  5. Appelez le point de terminaison pour une inférence en temps réel en utilisant la structure de commande suivante.

    # once endpoint status is InService, you can invoke the endpoint for inferencing if status == "InService": sm_runtime = boto3.Session().client('sagemaker-runtime') inference_result = sm_runtime.invoke_endpoint(EndpointName='test-endpoint', ContentType='text/csv', Body='1,2,3,4,class')
AWS Command Line Interface (AWS CLI)
  1. Obtenez les définitions des candidats à l'aide de l'exemple de code suivant.

    aws sagemaker describe-auto-ml-job --auto-ml-job-name 'test-automl-job' --region us-west-2
  2. Créez le modèle à l'aide de l'exemple de code suivant.

    aws sagemaker create-model --model-name 'test-sagemaker-model' --containers '[{ "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", amzn-s3-demo-bucket1 "ModelDataUrl": "s3://amzn-s3-demo-bucket/output/model.tar.gz", "Environment": { "AUTOML_SPARSE_ENCODE_RECORDIO_PROTOBUF": "1", "AUTOML_TRANSFORM_MODE": "feature-transform", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "application/x-recordio-protobuf", "SAGEMAKER_PROGRAM": "sagemaker_serve", "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" } }, { "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-xgboost:1.3-1-cpu-py3", "ModelDataUrl": "s3://amzn-s3-demo-bucket/output/model.tar.gz", "Environment": { "MAX_CONTENT_LENGTH": "20971520", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,probabilities" } }, { "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", aws-region "ModelDataUrl": "s3://amzn-s3-demo-bucket/output/model.tar.gz", "Environment": { "AUTOML_TRANSFORM_MODE": "inverse-label-transform", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", "SAGEMAKER_INFERENCE_INPUT": "predicted_label", "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,labels,probabilities", "SAGEMAKER_PROGRAM": "sagemaker_serve", "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" } }]' \ --execution-role-arn 'arn:aws:iam::1234567890:role/sagemaker-execution-role' \ --region 'us-west-2'

    Pour plus de détails, veuillez consulter Création d'un modèle.

    La commande create model renvoie une réponse au format suivant.

    { "ModelArn": "arn:aws:sagemaker:us-west-2:1234567890:model/test-sagemaker-model" }
  3. Créez une configuration du point de terminaison à l'aide de l'exemple de code suivant.

    aws sagemaker create-endpoint-config --endpoint-config-name 'test-endpoint-config' \ --production-variants '[{"VariantName": "variant1", "ModelName": "test-sagemaker-model", "InitialInstanceCount": 1, "InstanceType": "ml.m5.2xlarge" }]' \ --region us-west-2

    La commande de configuration create endpoint renvoie une réponse au format suivant.

    { "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:1234567890:endpoint-config/test-endpoint-config" }
  4. Créez un point de terminaison à l'aide de l'exemple de code suivant.

    aws sagemaker create-endpoint --endpoint-name 'test-endpoint' \ --endpoint-config-name 'test-endpoint-config' \ --region us-west-2

    La commande create endpoint renvoie une réponse au format suivant.

    { "EndpointArn": "arn:aws:sagemaker:us-west-2:1234567890:endpoint/test-endpoint" }

    Vérifiez la progression du déploiement du point de terminaison à l'aide de l'exemple de CLI code de description du point de terminaison suivant.

    aws sagemaker describe-endpoint --endpoint-name 'test-endpoint' --region us-west-2

    La précédente vérification de progression renvoie une réponse au format suivant.

    { "EndpointName": "test-endpoint", "EndpointArn": "arn:aws:sagemaker:us-west-2:1234567890:endpoint/test-endpoint", "EndpointConfigName": "test-endpoint-config", "EndpointStatus": "Creating", "CreationTime": 1660251167.595, "LastModifiedTime": 1660251167.595 }

    Lorsque EndpointStatus devient InService, le point de terminaison est prêt à être utilisé dans l'inférence en temps réel.

  5. Appelez le point de terminaison pour une inférence en temps réel en utilisant la structure de commande suivante.

    aws sagemaker-runtime invoke-endpoint --endpoint-name 'test-endpoint' \ --region 'us-west-2' \ --body '1,51,3.5,1.4,0.2' \ --content-type 'text/csv' \ '/tmp/inference_output'

    Pour plus d'options, veuillez consulter Appeler un point de terminaison.

Vous pouvez déployer un modèle Autopilot à partir d'un compte différent du compte d'origine dans lequel le modèle a été généré. Pour implémenter le déploiement de modèles multicomptes, cette section explique comment procéder comme suit :

  1. Accorder l'autorisation au compte de déploiement

    Pour assumer le rôle dans le compte générateur, vous devez accorder l'autorisation au compte à partir duquel vous souhaitez effectuer le déploiement. Cela permet au compte de déploiement de décrire les tâches Autopilot dans le compte générateur.

    L'exemple suivant utilise un compte générateur avec une entité sagemaker-role de confiance. L'exemple montre comment autoriser un compte de déploiement portant l'ID 111122223333 à assumer le rôle du compte générateur.

    "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "sagemaker.amazonaws.com" ], "AWS": [ "111122223333"] }, "Action": "sts:AssumeRole" }

    Le nouveau compte portant l'ID 111122223333 peut désormais assumer le rôle du compte générateur.

    Ensuite, appelez le compte DescribeAutoMLJob API de déploiement pour obtenir une description de la tâche créée par le compte générateur.

    L'exemple de code suivant décrit le modèle issu du compte de déploiement.

    import sagemaker import boto3 session = sagemaker.session.Session() sts_client = boto3.client('sts') sts_client.assume_role role = 'arn:aws:iam::111122223333:role/sagemaker-role' role_session_name = "role-session-name" _assumed_role = sts_client.assume_role(RoleArn=role, RoleSessionName=role_session_name) credentials = _assumed_role["Credentials"] access_key = credentials["AccessKeyId"] secret_key = credentials["SecretAccessKey"] session_token = credentials["SessionToken"] session = boto3.session.Session() sm_client = session.client('sagemaker', region_name='us-west-2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, aws_session_token=session_token) # now you can call describe automl job created in account A job_name = "test-job" response= sm_client.describe_auto_ml_job(AutoMLJobName=job_name)
  2. Accordez l'accès au compte de déploiement aux artefacts du modèle du compte de génération.

    Le compte de déploiement a simplement besoin d'accéder aux artefacts du modèle dans le compte de génération pour le déployer. Ils se trouvent dans le S3 OutputPath spécifié lors de l'CreateAutoMLJobAPIappel initial lors de la génération du modèle.

    Pour donner au compte de déploiement l'accès aux artefacts du modèle, choisissez l'une des options suivantes :

    1. Donnez accès au ModelDataUrl à partir du compte générateur vers le compte de déploiement.

      Ensuite, vous devez autoriser le compte de déploiement à assumer le rôle. Suivez les étapes d'inférence en temps réel pour le déploiement.

    2. Copiez les artefacts du modèle depuis le S3 d'origine du compte générateur OutputPath vers le compte générateur.

      Pour autoriser l'accès aux artefacts du modèle, vous devez définir un modèle best_candidate et réattribuer des conteneurs de modèles au nouveau compte.

      L'exemple suivant illustre la façon de définir un modèle best_candidate et de réaffecter le ModelDataUrl.

      best_candidate = automl.describe_auto_ml_job()['BestCandidate'] # reassigning ModelDataUrl for best_candidate containers below new_model_locations = ['new-container-1-ModelDataUrl', 'new-container-2-ModelDataUrl', 'new-container-3-ModelDataUrl'] new_model_locations_index = 0 for container in best_candidate['InferenceContainers']: container['ModelDataUrl'] = new_model_locations[new_model_locations_index++]

      Après cette attribution de conteneurs, suivez les étapes décrites dans Déployez en utilisant SageMaker APIs pour le déploiement.

Pour créer une charge utile dans l'inférence en temps réel, consultez l'exemple du bloc-notes pour définir une charge utile de test. Pour créer la charge utile à partir d'un CSV fichier et appeler un point de terminaison, consultez la section Prédire avec votre modèle dans Créer automatiquement un modèle d'apprentissage automatique.