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)
Themen
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: