Prévisions par lots - Amazon SageMaker AI

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.

Prévisions par lots

La prévision par lots, également appelée inférence hors connexion, génère des prédictions de modèle sur un lot d'observations. L'inférence par lots est une bonne option pour les grands jeux de données, ou si vous n'avez pas besoin d'une réponse immédiate à une demande de prédiction de modèle.

En revanche, l'inférence en ligne (inférence en temps réel) génère des prédictions en temps réel.

Vous pouvez l'utiliser SageMaker APIs pour récupérer le meilleur candidat pour une tâche AutoML, puis soumettre un lot de données d'entrée à des fins d'inférence en utilisant ce candidat.

  1. Récupérez les détails de la tâche AutoML.

    L'exemple de AWS CLI commande suivant utilise l'API DescribeAutoMLJobV2 pour obtenir des informations détaillées sur la tâche AutoML, notamment des informations sur le meilleur modèle candidat.

    aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name job-name --region region
  2. Extrayez la définition du conteneur InferenceContainerspour trouver le meilleur modèle candidat.

    Une définition de conteneur est l'environnement conteneurisé utilisé pour héberger le modèle d' SageMaker IA entraîné pour effectuer des prédictions.

    BEST_CANDIDATE=$(aws sagemaker describe-auto-ml-job-v2 \ --auto-ml-job-name job-name --region region \ --query 'BestCandidate.InferenceContainers[0]' \ --output json

    Cette commande extrait la définition du conteneur pour le meilleur modèle candidat et la stocke dans la BEST_CANDIDATE variable.

  3. Créez un modèle d' SageMaker IA en utilisant la meilleure définition de conteneur candidat.

    Utilisez les définitions de conteneur des étapes précédentes pour créer un modèle d' SageMaker IA à l'aide de l'CreateModelAPI.

    aws sagemaker create-model \ --model-name 'model-name' \ --primary-container "$BEST_CANDIDATE" --execution-role-arn 'execution-role-arn>' \ --region 'region>

    Le --execution-role-arn paramètre indique le rôle IAM assumé par l' SageMaker IA lors de l'utilisation du modèle à des fins d'inférence. Pour plus de détails sur les autorisations requises pour ce rôle, voir CreateModel API : autorisations du rôle d'exécution.

  4. Créez une tâche de transformation par lots.

    L'exemple suivant crée une tâche de transformation à l'aide de l'CreateTransformJobAPI.

    aws sagemaker create-transform-job \ --transform-job-name 'transform-job-name' \ --model-name 'model-name'\ --transform-input file://transform-input.json \ --transform-output file://transform-output.json \ --transform-resources file://transform-resources.json \ --region 'region'

    Les informations d'entrée, de sortie et de ressource sont définies dans des fichiers JSON distincts :

    • transform-input.json:

      { "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://my-input-data-bucket/path/to/input/data" } }, "ContentType": "text/csv", "SplitType": "None" }
    • transform-output.json:

      { "S3OutputPath": "s3://my-output-bucket/path/to/output", "AssembleWith": "Line" }
    • transform-resources.json:

      Note

      Nous recommandons d'utiliser des instances m5.12xlarge pour les charges de travail à usage général et m5.24xlarge des instances pour les tâches de prévision des mégadonnées.

      { "InstanceType": "instance-type", "InstanceCount": 1 }
  5. Surveillez la progression de votre travail de transformation à l'aide de l'DescribeTransformJobAPI.

    Consultez la AWS CLI commande suivante à titre d'exemple.

    aws sagemaker describe-transform-job \ --transform-job-name 'transform-job-name' \ --region region
  6. Récupérez le résultat de la transformation par lots.

    Une fois le travail terminé, le résultat prévu est disponible dans leS3OutputPath.

    Le nom du fichier de sortie possède le format suivant : input_data_file_name.out. Par exemple, si votre fichier d'entrée est text_x.csv, le nom de sortie sera text_x.csv.out.

    aws s3 ls s3://my-output-bucket/path/to/output/

Les exemples de code suivants illustrent l'utilisation du AWS SDK pour Python (boto3) et AWS CLI pour les prévisions par lots.

AWS SDK for Python (boto3)

L'exemple suivant utilise le kit AWS SDK pour Python (boto3) pour effectuer des prédictions par lots.

import sagemaker import boto3 session = sagemaker.session.Session() sm_client = boto3.client('sagemaker', region_name='us-west-2') role = 'arn:aws:iam::1234567890:role/sagemaker-execution-role' output_path = 's3://test-auto-ml-job/output' input_data = 's3://test-auto-ml-job/test_X.csv' best_candidate = sm_client.describe_auto_ml_job_v2(AutoMLJobName=job_name)['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName'] # create model reponse = sm_client.create_model( ModelName = best_candidate_name, ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName=f'{best_candidate_name}-transform-job', ModelName=model_name, TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': input_data } }, 'ContentType': "text/csv", 'SplitType': 'None' }, TransformOutput={ 'S3OutputPath': output_path, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m5.2xlarge', 'InstanceCount': 1, }, )

La tâche d'inférence par lots renvoie une réponse au format suivant.

{'TransformJobArn': 'arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-transform-job', 'ResponseMetadata': {'RequestId': '659f97fc-28c4-440b-b957-a49733f7c2f2', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '659f97fc-28c4-440b-b957-a49733f7c2f2', 'content-type': 'application/x-amz-json-1.1', 'content-length': '96', 'date': 'Thu, 11 Aug 2022 22:23:49 GMT'}, 'RetryAttempts': 0}}
AWS Command Line Interface (AWS CLI)
  1. Obtenez les meilleures définitions de conteneurs candidats.

    aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name 'test-automl-job' --region us-west-2
  2. Créez le modèle.

    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", "ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/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/out/test-job1/tuning/flicdf10v2-dpp0-xgb/test-job1E9-244-7490a1c0/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", "ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/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'
  3. Créez une tâche de transformation.

    aws sagemaker create-transform-job --transform-job-name 'test-tranform-job'\ --model-name 'test-sagemaker-model'\ --transform-input '{ "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://amzn-s3-demo-bucket/data.csv" } }, "ContentType": "text/csv", "SplitType": "None" }'\ --transform-output '{ "S3OutputPath": "s3://amzn-s3-demo-bucket/output/", "AssembleWith": "Line" }'\ --transform-resources '{ "InstanceType": "ml.m5.2xlarge", "InstanceCount": 1 }'\ --region 'us-west-2'
  4. Vérifiez la progression de la tâche de transformation.

    aws sagemaker describe-transform-job --transform-job-name 'test-tranform-job' --region us-west-2

    Voici la réponse de la tâche de transformation.

    { "TransformJobName": "test-tranform-job", "TransformJobArn": "arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-tranform-job", "TransformJobStatus": "InProgress", "ModelName": "test-model", "TransformInput": { "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://amzn-s3-demo-bucket/data.csv" } }, "ContentType": "text/csv", "CompressionType": "None", "SplitType": "None" }, "TransformOutput": { "S3OutputPath": "s3://amzn-s3-demo-bucket/output/", "AssembleWith": "Line", "KmsKeyId": "" }, "TransformResources": { "InstanceType": "ml.m5.2xlarge", "InstanceCount": 1 }, "CreationTime": 1662495635.679, "TransformStartTime": 1662495847.496, "DataProcessing": { "InputFilter": "$", "OutputFilter": "$", "JoinSource": "None" } }

    Une fois les modifications TransformJobStatus apportées à Completed, vous pouvez vérifier le résultat de l'inférence dans le S3OutputPath.