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 modélisées 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 à l'aide de ce candidat.

  1. Extrayez les détails de la tâche AutoML.

    L'exemple de AWS CLI commande suivant utilise l'API DescribeAutoMLJobV2 pour obtenir des détails 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 de conteneur pour le meilleur modèle candidat et la stocke dans la variable BEST_CANDIDATE.

  3. Créez un modèle d' SageMaker IA à l'aide de 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 liées aux entrées, sorties et ressources 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 vous recommandons d’utiliser des instances m5.12xlarge pour les charges de travail polyvalentes et des instances m5.24xlarge pour les tâches de prévision du big data.

      { "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. Extrayez le résultat de la transformation par lots.

    Une fois la tâche terminée, le résultat prédit est disponible dans S3OutputPath.

    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.

AWSSDK 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. Obtention des définitions de conteneurs des meilleurs 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.