Formatos de datos comunes para realizar inferencias - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Formatos de datos comunes para realizar inferencias

SageMaker Los algoritmos de Amazon aceptan y producen varios tipos de MIME diferentes para las cargas HTTP que se utilizan para recuperar predicciones en línea y de minilotes. Puede utilizar varios AWS servicios para transformar o preprocesar los registros antes de ejecutar la inferencia. Como mínimo, tiene que convertir los datos para las siguientes tareas:

  • Serialización de la solicitud de inferencias (gestionada por usted)

  • Deserialización de la solicitud de inferencias (gestionada por el algoritmo)

  • Serialización de la respuesta de inferencias (gestionada por el algoritmo)

  • Deserialización de la respuesta de inferencias (gestionada por usted)

Convierta los datos para la serialización de las solicitudes de inferencia

Las opciones de tipo de contenido para las solicitudes de inferencia de SageMaker algoritmos de Amazon incluyen: text/csvapplication/json, yapplication/x-recordio-protobuf. Los algoritmos que no admiten todos estos tipos pueden admitir otros tipos. XGBoost, por ejemplo, solo admite text/csv de esta lista, pero también admite text/libsvm.

Para text/csv, el valor para el argumento Body en invoke_endpoint debe ser una cadena con comas que separan los valores para cada característica. Por ejemplo, un registro para un modelo con cuatro características debería tener un aspecto similar a 1.5,16.0,14,23.0. Las transformaciones realizadas en los datos de capacitación deben realizarse también en los datos antes de la obtención de la inferencia. El orden de las características es importante, y no debe cambiarse.

application/jsones más flexible y ofrece varios formatos posibles para que los desarrolladores los utilicen en sus aplicaciones. A un nivel alto, en JavaScript, la carga útil podría tener el siguiente aspecto:

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

Tiene las siguientes opciones para especificar dataElement:

Equivalente a búferes de protocolo

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

Vector numérico sencillo

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

Para varios registros

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

Convierta los datos para la deserialización de la respuesta a inferencias

SageMaker Los algoritmos de Amazon devuelven JSON en varios diseños. En líneas generales, la estructura es:

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

Los campos incluidos en las predicciones son diferentes en los algoritmos. A continuación se muestran ejemplos de la salida del algoritmo k-means.

Interfaz de registro único

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

Inferencia de varios registros

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

Inferencia de varios registros con entrada 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 Los algoritmos también admiten el formato JSONLINES, donde el contenido de la respuesta por registro es el mismo que en el formato JSON. La estructura de varios registros es una colección de objetos de respuesta por registro separados por caracteres de nueva línea. El contenido de la respuesta para el algoritmo KMeans integrado para dos puntos de datos de entrada es:

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

Mientras se ejecuta la transformación por lotes, se recomienda usar el tipo de respuesta jsonlines estableciendo el campo Accept de la CreateTransformJobRequest en application/jsonlines.

Formatos de solicitud comunes para todos los algoritmos

La mayoría de los algoritmos utilizan muchos de los siguientes formatos de solicitud de inferencia.

Formato de solicitud JSON

Tipo de contenido: application/JSON

Formato denso

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 disperso

{ "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 de solicitud JSONLINES

Tipo de contenido: application/JSONLINES

Formato denso

Un solo registro en formato denso se puede representar como:

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

o bien:

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

Formato disperso

Un solo registro en formato disperso se representa como:

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

Los registros múltiples se representan como una colección de representaciones de un solo registro, separadas por caracteres de nueva línea:

{"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 de solicitud CSV

Tipo de contenido: text/CSV; label_size=0

nota

La compatibilidad con CSV no está disponible para máquinas de factorización.

Formato de solicitud RECORDIO

Tipo de contenido: application/x-recordio-protobuf

Utilice la transformación por lotes con algoritmos integrados

Mientras se ejecuta la transformación por lotes, se recomienda usar el tipo de respuesta JSONLINES en lugar de JSON, si lo admite el algoritmo. Para ello, defina el Accept campo en el campo CreateTransformJobRequest paraapplication/jsonlines.

Al crear un trabajo de transformación, SplitType debe configurarse en función ContentType de los datos de entrada. Del mismo modo, dependiendo del campo Accept de la CreateTransformJobRequest, AssembleWith debe establecerse en consecuencia. Utilice la siguiente tabla para configurar estos campos:

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

Para obtener más información sobre los formatos de respuesta para algoritmos específicos, consulte lo siguiente: