Gängige Datenformate für die Inferenz - Amazon SageMaker AI

Gängige Datenformate für die Inferenz

Algorithmen von Amazon SageMaker AI akzeptieren und erstellen verschiedene unterschiedliche MIME-Typen für die HTTP-Nutzlasten, die beim Abrufen von Online- und Mini-Stapelvoraussagen verwendet werden. Sie können verschiedene AWS-Services verwenden, um Datensätze vor dem Ausführen der Inferenz umzuwandeln oder vorzuverarbeiten. Sie müssen die Daten mindestens für Folgendes konvertieren:

  • Serialisierung der Inferenzanforderung (durchgeführt von Ihnen)

  • Deserialisierung der Inferenzanforderung (durchgeführt vom Algorithmus)

  • Serialisierung der Inferenzantwort (durchgeführt vom Algorithmus)

  • Deserialisierung der Inferenzantwort (durchgeführt von Ihnen)

Konvertieren von Daten für die Serialisierung von Inferenzanforderungen

Content-Type-Optionen für Inferenzanforderung von Algorithmen von Amazon SageMaker AI umfassen: text/csv, application/json und application/x-recordio-protobuf. Algorithmen, die nicht alle diese Typen unterstützen, können andere Typen unterstützen. XGBoost unterstützt beispielsweise nur text/csv aus dieser Liste, unterstützt aber auch text/libsvm.

Für text/csv sollte der Wert für das Body-Argument für invoke_endpoint eine Zeichenfolge mit durch Kommata getrennten Werten für jede Funktion sein. Ein Datensatz für ein Modell mit vier Funktionen könnte etwa so aussehen: 1.5,16.0,14,23.0. Alle mit den Trainingsdaten durchgeführten Umwandlungen sollten auch für die Daten durchgeführt werden, bevor Inferenzen abgerufen werden. Die Reihenfolge der Funktionen ist wichtig und muss unverändert bleiben.

application/json ist flexibler und stellt eine Vielzahl möglicher Formate für Entwickler bereit, die sie in ihren Anwendungen verwenden können. Grundsätzlich könnte die Nutzlast in JavaScript folgendermaßen aussehen:

let request = { // Instances might contain multiple rows that predictions are sought for. "instances": [ { // Request and algorithm specific inference parameters. "configuration": {}, // Data in the specific format required by the algorithm. "data": { "<field name>": dataElement } } ] }

Sie haben die folgenden Optionen für das Angeben von dataElement:

Protokollpufferentsprechung

// Has the same format as the protocol buffers implementation described for training. let dataElement = { "keys": [], "values": [], "shape": [] }

Einfacher numerischer Vektor

// An array containing numeric values is treated as an instance containing a // single dense vector. let dataElement = [1.5, 16.0, 14.0, 23.0] // It will be converted to the following representation by the SDK. let converted = { "features": { "values": dataElement } }

Für mehrere Datensätze

let request = { "instances": [ // First instance. { "features": [ 1.5, 16.0, 14.0, 23.0 ] }, // Second instance. { "features": [ -2.0, 100.2, 15.2, 9.2 ] } ] }

Konvertieren von Daten für die Deserialisierung von Inferenzantworten

Algorithmen von Amazon SageMaker AI geben JSON in mehreren Layouts zurück. Grundsätzlich ist dies die Struktur:

let response = { "predictions": [{ // Fields in the response object are defined on a per algorithm-basis. }] }

Die Felder, die in Voraussagen enthalten sind, sind für die verschiedenen Algorithmen unterschiedlich. Im Folgenden sehen Sie Beispiele für die Ausgabe für den k-means-Algorithmus.

Einzeldatensatz-Inferenz

let response = { "predictions": [{ "closest_cluster": 5, "distance_to_cluster": 36.5 }] }

Multi-Datensatz-Inferenz

let response = { "predictions": [ // First instance prediction. { "closest_cluster": 5, "distance_to_cluster": 36.5 }, // Second instance prediction. { "closest_cluster": 2, "distance_to_cluster": 90.3 } ] }

Multi-Datensatz-Inferenz mit protobuf-Eingabe

{ "features": [], "label": { "closest_cluster": { "values": [ 5.0 ] // e.g. the closest centroid/cluster was 1.0 }, "distance_to_cluster": { "values": [ 36.5 ] } }, "uid": "abc123", "metadata": "{ "created_at": '2017-06-03' }" }

SageMaker-AI-Algorithmen unterstützen ebenfalls das JSONLINES-Format, bei dem der Inhalt der Antwort pro Datensatz, mit dem im JSON-Format identisch ist. Die Multi-Datensatz-Struktur ist eine Sammlung aus Antwortobjekten pro Datensatz, die durch Zeilenumbruchzeichen getrennt sind. Der Inhalt der Antwort für den integrierten KMeans-Algorithmus für 2 Eingabedatenpunkte lautet:

{"distance_to_cluster": 23.40593910217285, "closest_cluster": 0.0} {"distance_to_cluster": 27.250282287597656, "closest_cluster": 0.0}

Bei der Ausführung einer Stapeltransformation empfehlen wir, den jsonlines-Antworttyp zu verwenden, indem das Accept-Feld im CreateTransformJobRequest auf application/jsonlines festgelegt wird.

Gängige Anforderungsformate für alle Algorithmen

Die meisten Algorithmen verwenden viele der folgenden Inferenzanforderungsformate.

JSON-Anfrageformat

Inhaltstyp: application/JSON

Format mit hoher Dichte

let request = { "instances": [ { "features": [1.5, 16.0, 14.0, 23.0] } ] } let request = { "instances": [ { "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } } } ] }

Format mit geringer Dichte

{ "instances": [ {"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }, {"data": {"features": { "keys": [0, 182, 232, 243, 431], "shape": [2000], "values": [13, 1, 1, 4, 1] } } }, ] }

JSONLINES-Anfrageformat

Inhaltstyp: application/JSONLINES

Format mit hoher Dichte

Für die Darstellung eines einzelnen Datensatzes im Format mit hoher Dichte gibt es zwei Möglichkeiten:

{ "features": [1.5, 16.0, 14.0, 23.0] }

oder:

{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }

Format mit geringer Dichte

Ein einzelner Datensatz im Format mit geringer Dichte wird wie folgt dargestellt:

{"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }

Mehrere Datensätze werden als Sammlung der Einzeldatensatz-Darstellungen repräsentiert und durch Zeilenumbruchzeichen getrennt:

{"data": {"features": { "keys": [0, 1, 3], "shape": [4], "values": [1, 4, 1] } } } { "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } } { "features": [1.5, 16.0, 14.0, 23.0] }

CSV-Anfrageformat

Inhaltstyp: text/CSV; label_size=0

Anmerkung

CSV-Unterstützung ist für Factorization Machines nicht verfügbar.

RECORDIO-Anfrageformat

Inhaltstyp: application/x-recordio-protobuf

Verwenden der Stapeltransformation mit integrierten Algorithmen

Bei der Ausführung der Stapeltransformation empfehlen wir, den JSONLINES-Antworttyp anstelle von JSON zu verwenden, sofern dieser vom Algorithmus unterstützt wird. Setzen Sie dazu das Feld Accept in CreateTransformJobRequest auf application/jsonlines.

Wenn Sie einen Umwandlungsauftrag erstellen, muss SplitType basierend auf ContentType der Eingabedaten festgelegt werden. Entsprechend muss AssembleWith abhängig vom Accept-Feld in der CreateTransformJobRequest entsprechend eingestellt werden. Verwenden Sie die folgende Tabelle, um diese Felder festzulegen:

ContentType Empfohlener SplitType
application/x-recordio-protobuf RecordIO
text/csv Line
application/jsonlines Line
application/json None
application/x-image None
image/* None
Accept Empfohlener AssembleWith-Wert
application/x-recordio-protobuf None
application/json None
application/jsonlines Line

Weitere Informationen zu Antwortformaten für bestimmte Algorithmen finden Sie in den folgenden Artikeln: