Prévisions par lots - 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.

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

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

    L'exemple de AWS CLI commande suivant utilise le DescribeAutoMLJobV2APIpour obtenir les détails de la tâche AutoML, y compris les 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 SageMaker modèle 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 SageMaker modèle à 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 SageMaker modèle à l'aide du 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 IAM rôle SageMaker assumé 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 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 détails des entrées, des sorties et des ressources sont définis dans JSON des fichiers séparés :

    • 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. Suivez la progression de votre travail de transformation à l'aide du 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 for Python (boto3) et du AWS CLI for batch pour les prévisions.

AWS SDK for Python (boto3)

L'exemple suivant utilise Python (boto3)AWS SDK 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.