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 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.
Bereitstellen Ihres Modells
Stellen Sie Ihr Modell bereit und erstellen Sie einen HTTPS-Endpunkt mit DataCapture aktiviert.
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:///-Pfades ist: .{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename.jsonl
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" }