Erfassen von Daten - Amazon SageMaker

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.

Erfassen von Daten

Um Model Monitor zu verwenden, konfigurieren Sie Ihren Echtzeit-Inferenzendpunkt, um Daten aus Anfragen und Antworten zu erfassen und die erfassten Daten in Amazon S3 zu speichern. Der Modellmonitor vergleicht Metriken aus diesen Daten mit einer Baseline, die Sie für das Modell erstellen. Weitere Informationen zum Erstellen einer Baseline finden Sie unterErstellen einer Baselineaus.

Anmerkung

Um Auswirkungen auf Inferenzanforderungen zu vermeiden, stoppt Data Capture die Erfassung von Anfragen bei hoher Festplattenauslastung. Es wird empfohlen, Ihre Festplattenauslastung unter 75% zu halten, um sicherzustellen, dass die Datenerfassung weiterhin Anfragen erfasst.

So richten Sie die Datenerfassung ein

  1. Konfigurieren Sie zunächst die Amazon S3 S3-Buckets, die Model Monitor zum Speichern der erfassten Daten verwendet.

    import boto3 import re import json from sagemaker import get_execution_role, session region= boto3.Session().region_name role = get_execution_role() print("RoleArn: {}".format(role)) # You can use a different bucket, but make sure the role you chose for this notebook # has s3:PutObject permissions. This is the bucket into which the data is captured bucket = session.Session(boto3.Session()).default_bucket() print("Demo Bucket: {}".format(bucket)) prefix = 'sagemaker/DEMO-ModelMonitor' data_capture_prefix = '{}/datacapture'.format(prefix) s3_capture_upload_path = 's3://{}/{}'.format(bucket, data_capture_prefix) reports_prefix = '{}/reports'.format(prefix) s3_report_path = 's3://{}/{}'.format(bucket,reports_prefix) code_prefix = '{}/code'.format(prefix) s3_code_preprocessor_uri = 's3://{}/{}/{}'.format(bucket,code_prefix, 'preprocessor.py') s3_code_postprocessor_uri = 's3://{}/{}/{}'.format(bucket,code_prefix, 'postprocessor.py') print("Capture path: {}".format(s3_capture_upload_path)) print("Report path: {}".format(s3_report_path)) print("Preproc Code path: {}".format(s3_code_preprocessor_uri)) print("Postproc Code path: {}".format(s3_code_postprocessor_uri))
  2. Laden Sie als Nächstes das vortrainierte Modell auf Amazon S3 hoch.

    model_file = open("model/your-prediction-model.tar.gz", 'rb') s3_key = os.path.join(prefix, 'your-prediction-model.tar.gz') boto3.Session().resource('s3').Bucket(bucket).Object(s3_key).upload_fileobj(model_file)
  3. Konfigurieren Sie die Daten, die Sie erfassen möchten, indem Sie die Daten konfigurieren, die Sie in einemDataCaptureConfig-Struktur. Sie können die Anforderungs-Nutzlast, die Antwort-Nutzlast oder beides mit dieser Konfiguration erfassen.

    from sagemaker.model_monitor import DataCaptureConfig endpoint_name = 'your-pred-model-monitor-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("EndpointName={}".format(endpoint_name)) data_capture_config=DataCaptureConfig( enable_capture = True, sampling_percentage=100, destination_s3_uri=s3_capture_upload_path)
  4. Aktivieren Sie die Datenerfassung, indem Sie die Konfiguration übergeben, die Sie beim Bereitstellen des Modells erstellt haben.

    predictor = model.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge', endpoint_name=endpoint_name data_capture_config=data_capture_config)
  5. Rufen Sie den Endpunkt auf, um Daten an den Endpunkt zu senden, um Inferenzen in Echtzeit zu erhalten. Da Sie die Datenerfassung in den vorherigen Schritten aktiviert haben, werden die Anforderungs- und Antwort-Nutzlast zusammen mit einigen zusätzlichen Metadaten an dem Amazon S3 S3-Speicherort gespeichert, den Sie in angegeben habenDataCaptureConfigaus.

    from sagemaker.predictor import Predictor from sagemaker.serializers import CSVSerializer from sagemaker.deserializers import JSONDeserializer import time predictor = Predictor(endpoint=endpoint_name, serializer=CSVSerializer(), deserializer=JSONDeserializer()) # get a subset of test data for a quick test !head -120 test_data/test-dataset-input-cols.csv > test_data/test_sample.csv print("Sending test traffic to the endpoint {}. \nPlease wait...".format(endpoint_name)) with open('test_data/test_sample.csv', 'r') as f: for row in f: payload = row.rstrip('\n') response = predictor.predict(data=payload) time.sleep(0.5) print("Done!")
  6. Die Lieferung erfasster Daten an Amazon S3 kann einige Minuten dauern. Sie können optional Folgendes ausführen, um zu überprüfen, ob Daten erfasst wurden:

    from sagemaker.s3 import S3Downloader print("Waiting for captures to show up", end="") for _ in range(120): capture_files = sorted(S3Downloader.list(f"{s3_capture_upload_path}/{endpoint_name}")) if capture_files: capture_file = S3Downloader.read_file(capture_files[-1]).split("\n") capture_record = json.loads(capture_file[0]) if "inferenceId" in capture_record["eventMetadata"]: break print(".", end="", flush=True) sleep(1) print() print("Found Capture Files:") print("\n ".join(capture_files[-3:]))