

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
<a name="model-monitor-data-capture-endpoint"></a>

**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 für Python (Boto) oder das SageMaker Python-SDK verwenden. Wenn Sie das AWS SDK verwenden, definieren Sie das [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)Wörterbuch zusammen mit den erforderlichen Feldern innerhalb der [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)Methode, um die Datenerfassung zu aktivieren. Wenn Sie das SageMaker Python-SDK verwenden, importieren Sie die [DataCaptureConfig](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html#sagemaker.model_monitor.data_capture_config.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 Beispielcode durch Ihre eigenen Informationen.

## Wie man die Datenerfassung aktiviert
<a name="model-monitor-data-capture-defing.title"></a>

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 für 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 für Python (Boto) ]

Konfigurieren Sie die Daten, die Sie erfassen möchten, mit dem [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)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 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 [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)API im [Amazon SageMaker AI Service API-Referenzhandbuch](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html).

------
#### [ SageMaker Python SDK ]

Importieren Sie die `DataCaptureConfig` Klasse aus dem Modul [sagemaker.model\$1monitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html). 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
<a name="model-monitor-data-capture-deploy"></a>

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 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) 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 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)-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 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
<a name="model-monitor-data-capture-view"></a>

Erstellen Sie ein Prädiktorobjekt aus der SageMaker [Python-SDK-Prädiktorklasse](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html). 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](https://sagemaker.readthedocs.io/en/stable/api/inference/serializers.html) im SageMaker AI Python SDK.](https://sagemaker.readthedocs.io/en/stable/index.html)

```
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\$1cols 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"
}
```