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

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.

Gängige Datenformate für die Inferenz

SageMakerAmazon-Algorithmen akzeptieren und produzieren verschiedene MIME-Typen für die HTTP-Payloads, die beim Abrufen von Online- und Mini-Batch-Vorhersagen 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

Zu den Inhaltstypoptionen für Inferenzanfragen des SageMaker Amazon-Algorithmus gehören: text/csvapplication/json, undapplication/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.

Denn text/csv der Wert für das Argument Body invoke_endpoint sollte eine Zeichenfolge mit Kommas sein, die die Werte für jedes Feature voneinander trennen. Ein Datensatz für ein Modell mit vier Merkmalen könnte beispielsweise so aussehen1.5,16.0,14,23.0. Alle mit den Schulungsdaten durchgeführten Umwandlungen sollten auch für die Daten durchgeführt werden, bevor Inferenzen abgerufen werden. Die Reihenfolge der Merkmale ist wichtig und muss unverändert bleiben.

application/json ist wesentlich flexibler und stellt eine Vielzahl möglicher Formate für Entwickler bereit, die sie in ihren Anwendungen verwenden können. Auf hoher Ebene, inJavaScript, könnte die Payload 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:

Äquivalent zu Protokollpuffern

// 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

SageMakerAmazon-Algorithmen geben JSON in verschiedenen 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 Prognosen enthalten sind, sind für die verschiedenen Algorithmen unterschiedlich. Im Folgenden sehen Sie Beispiele für die Ausgabe für den k-means-Algorithmus.

Inferenz aus einem Datensatz

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

Inferenz mit mehreren Datensätzen

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 } ] }

Inferenz mit mehreren Datensätzen 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' }" }

SageMakerAlgorithmen unterstützen auch das JSONLINES-Format, bei dem der Antwortinhalt pro Datensatz mit dem im JSON-Format identisch ist. Die Multi-Datensatz-Struktur ist eine Kombination aus Antwortobjekten pro Datensatz, die durch Zeilenumbruchzeichen getrennt sind. Der Antwortinhalt 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 der Batch-Transformation empfehlen wir, den jsonlines Antworttyp zu verwenden, indem Sie das Accept Feld auf „CreateTransformJobRequestto“ setzenapplication/jsonlines.

Gängige Anforderungsformate für alle Algorithmen

Die meisten Algorithmen verwenden mehrere der folgenden Inferenzanforderungsformate.

JSON-Anforderungsformat

Inhaltstyp: Anwendung/JSON

Dichtes Format

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] } } } ] }

Spärliches Format

{ "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-Anforderungsformat

Inhaltstyp: Application/JsOnline

Dichtes Format

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] } }

Spärliches Format

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 Verkettung der oben genannten 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-Anforderungsformat

Inhaltstyp: Text/CSV; label_size=0

Anmerkung

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

RECORDIO-Anforderungsformat

Inhaltstyp: Bewerbung/ x-recordio-protobuf

Verwenden Sie Batch Transform mit integrierten Algorithmen

Bei der Ausführung der Batch-Transformation empfehlen wir, den Antworttyp JSONLINES anstelle von JSON zu verwenden, sofern dies vom Algorithmus unterstützt wird. Dies wird erreicht, indem Sie das Accept-Feld im CreateTransformJobRequest auf application/jsonlines festlegen.

Wenn Sie einen Umwandlungsauftrag erstellen, muss SplitType entsprechend des 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 entsprechend festzulegen:

ContentType Empfohlen SplitType
application/x-recordio-protobuf RecordIO
text/csv Line
application/jsonlines Line
application/json None
application/x-image None
image/* None
Accept Empfohlen AssembleWith
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: