Formati di dati comuni per l'inferenza - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Formati di dati comuni per l'inferenza

SageMaker Gli algoritmi di Amazon accettano e producono diversi tipi MIME per i payload HTTP utilizzati per recuperare previsioni online e in mini-batch. Puoi utilizzare vari AWS servizi per trasformare o preelaborare i record prima di eseguire l'inferenza. Come minimo, devi convertire i dati per quanto segue:

  • Serializzazione richiesta di inferenza (gestita da te)

  • Deserializzazione richiesta di inferenza (gestita dall'algoritmo)

  • Serializzazione risposta di inferenza (gestita dall'algoritmo)

  • Deserializzazione risposta di inferenza (gestita da te)

Conversione dei dati per la serializzazione delle richieste di inferenza

Le opzioni relative ai tipi di contenuto per le richieste di inferenza degli SageMaker algoritmi di Amazon includono: text/csvapplication/json, eapplication/x-recordio-protobuf. Gli algoritmi che non supportano tutti questi tipi possono supportare altri tipi. XGBoost, ad esempio, supporta solo text/csv da questo elenco, ma supporta anche text/libsvm.

Per text/csv il valore dell'argomento corpo a invoke_endpoint deve essere una stringa con delle virgole che separano i valori di ogni funzionalità. Ad esempio, un record per un modello con quattro funzionalità potrebbe essere simile a 1.5,16.0,14,23.0. Qualsiasi trasformazione eseguita sui dati dell'addestramento deve essere eseguita sui dati prima di ottenere l'inferenza. L'ordine delle funzionalità è rilevante e non deve essere modificato.

application/json è molto più flessibile e offre diversi formati possibili per gli sviluppatori da utilizzare nelle loro applicazioni. A un livello elevato, in JavaScript, il payload potrebbe essere simile al seguente:

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

Hai le seguenti opzioni per specificare dataElement:

Equivalenti buffer di protocollo

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

Vettore numerico semplice

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

Per record multipli

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

Conversione dei dati per la deserializzazione della risposta di inferenza

SageMaker Gli algoritmi di Amazon restituiscono JSON in diversi layout. Ad alto livello, la struttura è:

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

I campi inclusi nelle previsioni presentano differisce nei diversi algoritmi. Seguono degli esempi di output per l'algoritmo k-means.

Inferenza singolo record

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

Inferenza multi-record

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

Inferenza multi-record con input protobuf

{ "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 gli algoritmi supportano anche il formato JSONLINES, in cui il contenuto della risposta per record è lo stesso del formato JSON. La struttura multi-record è una concatenazione di oggetti di risposta per record separati da caratteri di nuova riga. Il contenuto della risposta per l'algoritmo K-Means integrato per 2 punti di dati di input è:

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

Durante l'esecuzione della trasformazione in batch, consigliamo di utilizzare il tipo di risposta jsonlines impostando il campo Accept in CreateTransformJobRequest su application/jsonlines.

Formati di richiesta comuni per tutti gli algoritmi

La maggior parte degli algoritmi utilizza molti dei seguenti formati di richiesta di inferenza.

Formato della richiesta JSON

Content type: application/JSON

Formato a densità alta

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

Formato a densità bassa

{ "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] } } }, ] }

Formato della richiesta JSONLINES

Content type: application/JSONLINES

Formato a densità alta

Un singolo record in formato a densità alta può essere rappresentato come:

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

oppure:

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

Formato a densità bassa

Un singolo record in formato a densità bassa è rappresentato come:

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

Più record sono rappresentati come una concatenazione delle rappresentazioni di record singolo precedenti, separate da caratteri di nuova riga:

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

Formato della richiesta CSV

Content type: text/CSV; label_size=0

Nota

Il supporto CSV non è disponibile per la fattorizzazione delle macchine.

Formato della richiesta RECORDIO

Tipo di contenuto: applicazione/ x-recordio-protobuf

Uso della trasformazione in batch con gli algoritmi integrati

Durante l'esecuzione della trasformazione in batch, consigliamo di utilizzare il tipo di risposta JSONLINES anziché JSON, se supportato dall'algoritmo. A tale scopo, devi impostare il campo Accept in CreateTransformJobRequest su application/jsonlines.

Quando crei un processo di trasformazione, SplitType deve essere impostato in base al ContentType dei dati di input. Analogamente, AssembleWith deve essere impostato in base al campo Accept in CreateTransformJobRequest. Utilizza la seguente tabella per impostare in modo appropriato questi campi:

ContentType Consigliato SplitType
application/x-recordio-protobuf RecordIO
text/csv Line
application/jsonlines Line
application/json None
application/x-image None
image/* None
Accettare Consigliato AssembleWith
application/x-recordio-protobuf None
application/json None
application/jsonlines Line

Per ulteriori informazioni sui formati di risposta per determinati algoritmi, consulta quanto segue: