Batch-Prognosen - Amazon SageMaker KI

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Batch-Prognosen

Stapelprognosen, auch Offline-Inferences genannt, erzeugen Modellvorhersagen zu einer Reihe von Beobachtungen. Batch-Inferenz ist eine gute Option für große Datensätze oder wenn Sie keine sofortige Antwort auf eine Modellvorhersageanforderung benötigen.

Im Gegensatz dazu werden bei der Online-Inferenz (Echtzeit-Inferencing) Vorhersagen in Echtzeit erstellt.

Sie können SageMaker APIs damit den besten Kandidaten für einen AutoML-Job abrufen und dann mithilfe dieses Kandidaten einen Stapel von Eingabedaten zur Inferenz einreichen.

  1. Rufen Sie die Details des AutoML-Jobs ab.

    Das folgende AWS CLI Befehlsbeispiel verwendet die DescribeAutoMLJobV2-API, um Details zum AutoML-Job abzurufen, einschließlich der Informationen über den besten Modellkandidaten.

    aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name job-name --region region
  2. Extrahieren Sie die Containerdefinition InferenceContainersfür den besten Modellkandidaten.

    Eine Container-Definition ist die containerisierte Umgebung, in der das trainierte SageMaker KI-Modell für Vorhersagen gehostet wird.

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

    Mit diesem Befehl wird die Containerdefinition für den besten Modellkandidaten extrahiert und in der Variablen BEST_CANDIDATE gespeichert.

  3. Erstellen Sie ein SageMaker KI-Modell unter Verwendung der geeignetsten Containerdefinition.

    Verwenden Sie die Containerdefinitionen aus den vorherigen Schritten, um mithilfe der CreateModelAPI ein SageMaker KI-Modell zu erstellen.

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

    Der --execution-role-arn Parameter gibt die IAM-Rolle an, die SageMaker KI annimmt, wenn das Modell für Inferenz verwendet wird. Einzelheiten zu den für diese Rolle erforderlichen Berechtigungen finden Sie unter CreateModel API: Berechtigungen für Ausführungsrollen.

  4. Erstellen Sie einen Batch-Transformationsjob.

    Im folgenden Beispiel wird mithilfe der CreateTransformJobAPI ein Transformationsjob erstellt.

    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'

    Die Eingabe-, Ausgabe- und Ressourcendetails sind in separaten JSON-Dateien definiert:

    • 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:

      Anmerkung

      Wir empfehlen, m5.12xlarge-Instances für allgemeine Workloads und m5.24xlarge-Instances für Big-Data-Prognoseaufgaben zu verwenden.

      { "InstanceType": "instance-type", "InstanceCount": 1 }
  5. Überwachen Sie den Fortschritt Ihres Transformationsjobs mithilfe der DescribeTransformJobAPI.

    Sehen Sie sich den folgenden AWS CLI Befehl als Beispiel an.

    aws sagemaker describe-transform-job \ --transform-job-name 'transform-job-name' \ --region region
  6. Rufen Sie die Batch-Transformationsausgabe ab.

    Sobald der Job abgeschlossen ist, steht das vorhergesagte Ergebnis im S3OutputPath zur Verfügung.

    Der Name der Ausgabedatei hat das folgende Format: input_data_file_name.out. Wenn Ihre Eingabedatei z. B. text_x.csv ist, lautet der Name der Ausgabedatei text_x.csv.out.

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

Die folgenden Codebeispiele veranschaulichen die Verwendung des AWS SDK für Python (boto3) und AWS CLI für Batch-Prognosen.

AWSSDK for Python (boto3)

Im folgenden Beispiel wird AWSSDK für Python (boto3) verwendet, um Vorhersagen stapelweise zu treffen.

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, }, )

Der Batch-Inferenzauftrag gibt eine Antwort in folgendem Format zurück.

{'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. Erhalt der besten Kandidat-Containerdefinitionen

    aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name 'test-automl-job' --region us-west-2
  2. Erstellen des Modells

    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. Erstellen eines Transformationsjobs

    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. Überprüfen des Fortschritts des Transformationsjobs

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

    Es folgt die Antwort des Transformationsauftrags.

    { "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" } }

    Nach den TransformJobStatus Änderungen an Completed können Sie das Inferenzergebnis in der S3OutputPath überprüfen.