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

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 DataCaptureConfigKlasse 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 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.

AWS SDK for Python (Boto)

Konfigurieren Sie die Daten, die Sie erfassen möchten, mit dem DataCaptureConfigWö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 die erfassten Daten codieren soll, indem Sie Schlüssel-Wert-Paar-Argumente 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 CreateEndpointConfigAPI 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 Stichprobenauswahl angeben, nimmt SageMaker AI standardmäßig 20 (20%) Ihrer Daten als Stichprobe vor.

  • DestinationS3Uri: Die Amazon S3 S3-URI, die SageMaker KI zum Speichern der erfassten Daten verwenden wird. Wenn Sie keine angeben, speichert SageMaker KI 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 for 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-Echtzeitendpunkt bereit. Geben Sie in das instance_type Feld den Namen des EC2 Amazon-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 Prädiktorobjekt aus der SageMaker Python-SDK-Prädiktorklasse. Sie werden das von der Predictor 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 im SageMaker AI Python SDK.

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