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
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 zum Aktivieren der Datenerfassung erforderlichen Schritte sind ähnlich, unabhängig davon, ob Sie das AWS SDK for Python (Boto) oder das SageMaker Python-SDK verwenden. Wenn Sie das AWS SDK verwenden, definieren Sie das DataCaptureConfigWörterbuch zusammen mit den erforderlichen Feldern innerhalb der CreateEndpointConfigMethode, um die Datenerfassung zu aktivieren. Wenn Sie das SageMaker Python-SDK verwenden, importieren Sie die DataCaptureConfigDataCaptureConfig
Parameter in der sagemaker.model.Model.deploy()
Methode.
Um die nachfolgenden Codefragmente zu verwenden, ersetzen Sie den Code italicized
placeholder text
im Beispielcode 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 nachfolgende Codeausschnitt zeigt, wie die Datenerfassung mithilfe des AWS SDK for Python (Boto) und des SageMaker AI Python SDK aktiviert wird.
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 Prädiktorobjekt aus der SageMaker Python-SDK-PrädiktorklassePredictor
Klasse zurückgegebene Objekt verwenden, um Ihren Endpunkt in einem future Schritt aufzurufen. Geben Sie den Namen Ihres Endpunkts (zuvor definiert als endpoint_name
) sowie Serializer- und Deserializer-Objekte für den Serializer bzw. Deserializer an. Informationen zu Serializer-Typen finden Sie in der Serializers-Klasse
from sagemaker.predictor import Predictor from sagemaker.serializers import
<Serializer>
from sagemaker.deserializers import<Deserializers>
predictor = Predictor(endpoint_name=endpoint_name, serializer =<Serializer_Class>
, deserializer =<Deserializer_Class>
) # Example #from sagemaker.predictor import Predictor #from sagemaker.serializers import CSVSerializer #from sagemaker.deserializers import JSONDeserializer #predictor = Predictor(endpoint_name=endpoint_name, # serializer=CSVSerializer(), # deserializer=JSONDeserializer())
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 eingebaute Methode Predictor.predict()
der Vorhersagevariablen (predictor
) übergeben.
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(predictor.predict(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-spezifische 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 Endpunktkonfiguration, SageMaker KI-Modell und 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" }