Formatos de datos comunes para 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 inferencias

SageMaker Los algoritmos de Amazon aceptan y producen varios MIME tipos diferentes de HTTP cargas útiles utilizadas 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

Entre las opciones de tipo de contenido para las solicitudes de inferencia de SageMaker algoritmos de Amazon se incluyen: text/csvapplication/json, yapplication/x-recordio-protobuf. Los algoritmos que no admiten todos estos tipos pueden admitir otros tipos. XGBoost, por ejemplo, solo es compatible con text/csv los de esta lista, pero también admitetext/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 proporciona 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 JSON se muestran 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 este JSONLINES formato, en el que el contenido de la respuesta por registro es el mismo que el del JSON formato. 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 respuesta del KMeans algoritmo integrado para 2 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.

JSONformato de solicitud

Tipo de contenido: aplicación/ 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] } } }, ] }

JSONLINESformato de solicitud

Tipo de contenido: aplicación/ 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] }

CSVformato de solicitud

Tipo de contenido: text/CSV; label_size=0

nota

CSVEl soporte no está disponible para las máquinas de factorización.

RECORDIOformato de solicitud

Tipo de contenido: aplicación/ x-recordio-protobuf

Utilice la transformación por lotes con algoritmos integrados

Al ejecutar la transformación por lotes, se recomienda utilizar el tipo de JSONLINES respuesta en lugar del tipo de respuestaJSON, si el algoritmo lo admite. Para ello, defina el Accept campo en 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: