View a markdown version of this page

Daten von Echtzeit-Endpunkten erfassen - 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.

Daten von Echtzeit-Endpunkten erfassen

Anmerkung

Amazon SageMaker Model Monitor steht neuen Kunden nicht mehr offen. Bestehende Kunden können den Service weiterhin wie gewohnt nutzen. AWS investiert weiterhin in Sicherheits- und Verfügbarkeitsverbesserungen für Model Monitor, wir planen jedoch nicht, neue Funktionen einzuführen. Weitere Informationen finden Sie unter Änderung der Verfügbarkeit von Amazon SageMaker Model Monitor.

Anmerkung

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

Um Daten für Ihren Echtzeit-Endpunkt zu erfassen, müssen Sie ein Modell mithilfe von SageMaker KI-Hosting-Diensten bereitstellen. Dazu müssen Sie ein SageMaker KI-Modell erstellen, eine Endpunktkonfiguration definieren und einen HTTPS-Endpunkt erstellen.

Die Schritte, die zum Aktivieren der Datenerfassung erforderlich sind, sind ähnlich, unabhängig davon, ob Sie das AWS SDK für Python (Boto) oder das SageMaker Python-SDK verwenden. Wenn Sie das AWS SDK verwenden, definieren Sie das DataCaptureConfig Wörterbuch zusammen mit den erforderlichen Feldern in der CreateEndpointConfig Methode, um die Datenerfassung zu aktivieren. Wenn Sie das SageMaker Python-SDK verwenden, importieren Sie die DataCaptureConfig Klasse und initialisieren Sie eine Instanz aus dieser Klasse. Übergeben Sie dann dieses Objekt an den DataCaptureConfig Parameter in der sagemaker.model.Model.deploy() Methode.

Um die nachfolgenden Codefragmente zu verwenden, ersetzen Sie den Code italicized placeholder text im Beispiel durch Ihre eigenen Informationen.

Wie man die Datenerfassung aktiviert

Geben Sie eine Datenerfassungskonfiguration an. Sie können die Anforderungs-Nutzlast, die Antwort-Nutzlast oder beides mit dieser Konfiguration erfassen. Der folgende Codeausschnitt zeigt, wie die Datenerfassung mithilfe des AWS SDK für Python (Boto) und des AI Python SDK aktiviert wird SageMaker .

Anmerkung

Sie müssen Model Monitor nicht verwenden, um Payloads für Anfragen oder Antworten zu erfassen.

AWS SDK für Python (Boto)

Konfigurieren Sie die Daten, die Sie erfassen möchten, mit dem DataCaptureConfig Wörterbuch, wenn Sie mit der CreateEndpointConfig Methode einen Endpunkt erstellen. Setzen Sie EnableCapture auf den booleschen Wert True. Geben Sie außerdem die folgenden obligatorischen Parameter an:

  • EndpointConfigName: der Name der Endpunktkonfiguration. Sie werden diesen Namen verwenden, wenn Sie eine CreateEndpoint Anfrage stellen.

  • ProductionVariants: eine Liste der Modelle, die Sie an diesem Endpunkt hosten möchten. Definieren Sie für jedes Modell einen Wörterbuch-Datentyp.

  • DataCaptureConfig: Wörterbuch-Datentyp, bei dem Sie einen Integer-Wert angeben, der dem anfänglichen Prozentsatz der zu samplenden Daten entspricht (InitialSamplingPercentage), den Amazon-S3-URI, in dem die erfassten Daten gespeichert werden sollen, und eine Liste mit Erfassungsoptionen (CaptureOptions). Geben Sie entweder Input oder Output für CaptureMode in der CaptureOptions Liste an.

Sie können optional angeben, wie SageMaker KI erfasste Daten codieren soll, indem Sie Argumente für Schlüssel-Wert-Paare an das Wörterbuch übergeben. CaptureContentTypeHeader

# Create an endpoint config name. endpoint_config_name = '<endpoint-config-name>' # The name of the production variant. variant_name = '<name-of-production-variant>' # The name of the model that you want to host. # This is the name that you specified when creating the model. model_name = '<The_name_of_your_model>' instance_type = '<instance-type>' #instance_type='ml.m5.xlarge' # Example # Number of instances to launch initially. initial_instance_count = <integer> # Sampling percentage. Choose an integer value between 0 and 100 initial_sampling_percentage = <integer> # The S3 URI containing the captured data s3_capture_upload_path = 's3://<bucket-name>/<data_capture_s3_key>' # Specify either Input, Output, or both capture_modes = [ "Input", "Output" ] #capture_mode = [ "Input"] # Example - If you want to capture input only endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, # List of ProductionVariant objects, one for each model that you want to host at this endpoint. ProductionVariants=[ { "VariantName": variant_name, "ModelName": model_name, "InstanceType": instance_type, # Specify the compute instance type. "InitialInstanceCount": initial_instance_count # Number of instances to launch initially. } ], DataCaptureConfig= { 'EnableCapture': True, # Whether data should be captured or not. 'InitialSamplingPercentage' : initial_sampling_percentage, 'DestinationS3Uri': s3_capture_upload_path, 'CaptureOptions': [{"CaptureMode" : capture_mode} for capture_mode in capture_modes] # Example - Use list comprehension to capture both Input and Output } )

Weitere Informationen zu anderen Endpunktkonfigurationsoptionen finden Sie in der CreateEndpointConfig API im Amazon SageMaker AI Service API-Referenzhandbuch.

SageMaker Python SDK

Importieren Sie die DataCaptureConfig Klasse aus dem Modul sagemaker.model_monitor. Aktivieren Sie die Datenerfassung, indem Sie EnableCapture auf den booleschen Wert True setzen.

Geben Sie optional Argumente für die folgenden Parameter an:

  • SamplingPercentage: ein ganzzahliger Wert, der dem Prozentsatz der zu samplenden Daten entspricht. Wenn Sie keinen Prozentsatz für die Stichprobe angeben, SageMaker nimmt AI standardmäßig eine Stichprobe von 20 (20%) Ihrer Daten vor.

  • DestinationS3Uri: Die Amazon S3-URI, die SageMaker AI zum Speichern der erfassten Daten verwenden wird. Wenn Sie keine angeben, speichert SageMaker AI die erfassten Daten in"s3://<default-session-bucket>/ model-monitor/data-capture".

from sagemaker.model_monitor import DataCaptureConfig # Set to True to enable data capture enable_capture = True # Optional - Sampling percentage. Choose an integer value between 0 and 100 sampling_percentage = <int> # sampling_percentage = 30 # Example 30% # Optional - The S3 URI of stored captured-data location s3_capture_upload_path = 's3://<bucket-name>/<data_capture_s3_key>' # Specify either Input, Output or both. capture_modes = ['REQUEST','RESPONSE'] # In this example, we specify both # capture_mode = ['REQUEST'] # Example - If you want to only capture input. # Configuration object passed in when deploying Models to SM endpoints data_capture_config = DataCaptureConfig( enable_capture = enable_capture, sampling_percentage = sampling_percentage, # Optional destination_s3_uri = s3_capture_upload_path, # Optional capture_options = ["REQUEST", "RESPONSE"], )

Bereitstellen Ihres Modells

Stellen Sie Ihr Modell bereit und erstellen Sie einen HTTPS-Endpunkt mit DataCapture aktiviert.

AWS SDK für Python (Boto3)

Stellen Sie SageMaker AI die Endpunktkonfiguration zur Verfügung. Der Service startet die ML-Compute-Instances und stellt die Modelle gemäß der Konfiguration bereit.

Sobald Sie Ihr Modell und Ihre Endpunktkonfiguration haben, verwenden Sie die CreateEndpoint API, um Ihren Endpunkt zu erstellen. Der Endpunktname muss innerhalb einer AWS Region in Ihrem AWS Konto eindeutig sein.

Im Folgenden wird ein Endpunkt unter Verwendung der in der Anfrage angegebenen Endpunktkonfiguration erstellt. Amazon SageMaker AI verwendet den Endpunkt, um Ressourcen bereitzustellen und Modelle bereitzustellen.

# The name of the endpoint. The name must be unique within an AWS Region in your AWS account. endpoint_name = '<endpoint-name>' # The name of the endpoint configuration associated with this endpoint. endpoint_config_name='<endpoint-config-name>' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name)

Weitere Informationen finden Sie in der CreateEndpoint-API.

SageMaker Python SDK

Definieren Sie einen Namen für Ihren Endpunkt Dieser Schritt ist optional. Wenn Sie keinen angeben, erstellt SageMaker AI einen eindeutigen Namen für Sie:

from datetime import datetime endpoint_name = f"DEMO-{datetime.utcnow():%Y-%m-%d-%H%M}" print("EndpointName =", endpoint_name)

Stellen Sie Ihr Modell mit der integrierten deploy() Methode des Model-Objekts auf einem HTTPS-Endpunkt in Echtzeit bereit. Geben Sie in das instance_type Feld den Namen des Amazon-EC2-Instance-Typs, für den dieses Modell bereitgestellt werden soll, zusammen mit der anfänglichen Anzahl von Instances, auf denen der Endpunkt ausgeführt werden soll, für das initial_instance_count Feld ein:

initial_instance_count=<integer> # initial_instance_count=1 # Example instance_type='<instance-type>' # instance_type='ml.m4.xlarge' # Example # Uncomment if you did not define this variable in the previous step #data_capture_config = <name-of-data-capture-configuration> model.deploy( initial_instance_count=initial_instance_count, instance_type=instance_type, endpoint_name=endpoint_name, data_capture_config=data_capture_config )

Aufgezeichnete Daten anzeigen

Erstellen Sie ein Endpoint Objekt aus dem SageMaker Python-SDK. In einem zukünftigen Schritt werden Sie das Endpoint Objekt verwenden, um Ihren Endpunkt aufzurufen. Geben Sie den Namen Ihres Endpunkts an (zuvor definiert alsendpoint_name).

from sagemaker.core.resources import Endpoint endpoint = Endpoint(endpoint_name=endpoint_name) # Example #from sagemaker.core.resources import Endpoint #endpoint = Endpoint(endpoint_name=endpoint_name)

Im nachfolgenden Codebeispielszenario rufen wir den Endpunkt mit Beispielvalidierungsdaten auf, die wir lokal in einer CSV-Datei mit dem Namen validation_with_predictions gespeichert haben. Unser Beispielvalidierungssatz enthält Beschriftungen für jede Eingabe.

In den ersten Zeilen der with-Anweisung wird zuerst die CSV-Datei für den Validierungssatz geöffnet, dann wird jede Zeile innerhalb der Datei durch ein Komma "," aufgeteilt und die beiden zurückgegebenen Objekte werden dann in den Variablen label und input_cols gespeichert. Für jede Zeile wird die Eingabe (input_cols) an die integrierte Methode (endpoint) der Endpunktvariablen übergebeninvoke().

Angenommen, das Modell gibt eine Wahrscheinlichkeit zurück. Die Wahrscheinlichkeiten liegen zwischen Ganzzahlwerten von 0 und 1,0. Wenn die vom Modell zurückgegebene Wahrscheinlichkeit größer als 80% (0,8) ist, weisen wir der Vorhersage die Bezeichnung 1 als Ganzzahl zu. Andernfalls weisen wir der Vorhersage eine Ganzzahlkennzeichnung mit dem Wert 0 zu.

from time import sleep validate_dataset = "validation_with_predictions.csv" # Cut off threshold of 80% cutoff = 0.8 limit = 200 # Need at least 200 samples to compute standard deviations i = 0 with open(f"test_data/{validate_dataset}", "w") as validation_file: validation_file.write("probability,prediction,label\n") # CSV header with open("test_data/validation.csv", "r") as f: for row in f: (label, input_cols) = row.split(",", 1) probability = float(endpoint.invoke(input_cols)) prediction = "1" if probability > cutoff else "0" baseline_file.write(f"{probability},{prediction},{label}\n") i += 1 if i > limit: break print(".", end="", flush=True) sleep(0.5) print() print("Done!")

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-Speicherort gespeichert, den Sie in DataCaptureConfig angegeben haben. Die Lieferung von Erfassungsdaten an Amazon S3 kann einige Minuten dauern.

Zeigen Sie die erfassten Daten an, indem Sie die in Amazon S3 gespeicherten Datenerfassungsdateien auflisten. Das Format des Amazon S3 s3:///{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename.jsonl-Pfades ist: .

Zu erwarten ist, dass verschiedene Dateien aus verschiedenen Zeiträumen angezeigt werden und basierend auf der Stunde organisiert sind, in der der Aufruf stattfand. Führen Sie den folgenden Befehl aus, um den Inhalt einer einzelnen Erfassungsdatei auszudrucken:

print("\n".join(capture_file[-3:-1]))

Dadurch wird eine SageMaker AI-spezifisch JSON-line formatierte Datei zurückgegeben. Im Folgenden finden Sie ein Antwortbeispiel von einem Echtzeit-Endpunkt, den wir mithilfe von csv/text Daten aufgerufen haben:

{"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"69,0,153.7,109,194.0,105,256.1,114,14.1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.0254181120544672","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"} {"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"94,23,197.1,125,214.5,136,282.2,103,9.5,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.07675473392009735","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"}

Im vorherigen Beispiel ist das capture_file Objekt ein Listentyp. Indizieren Sie das erste Element der Liste, um eine einzelne Inferenzanforderung anzuzeigen.

# The capture_file object is a list. Index the first element to view a single inference request print(json.dumps(json.loads(capture_file[0]), indent=2))

Dies gibt eine Antwort ähnlich wie die folgende zurück. Die zurückgegebenen Werte unterscheiden sich je nach Ihrer Endpunktkonfiguration, Ihrem SageMaker KI-Modell und den erfassten Daten:

{ "captureData": { "endpointInput": { "observedContentType": "text/csv", # data MIME type "mode": "INPUT", "data": "50,0,188.9,94,203.9,104,151.8,124,11.6,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0\n", "encoding": "CSV" }, "endpointOutput": { "observedContentType": "text/csv; charset=character-encoding", "mode": "OUTPUT", "data": "0.023190177977085114", "encoding": "CSV" } }, "eventMetadata": { "eventId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "inferenceTime": "2022-02-14T17:25:06Z" }, "eventVersion": "0" }