Formatos de dados comuns para inferência - SageMaker IA da Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Formatos de dados comuns para inferência

Os algoritmos de SageMaker IA da Amazon aceitam e produzem vários tipos diferentes de MIME para as cargas HTTP usadas na recuperação de previsões on-line e em minilote. Você pode usar vários AWS serviços para transformar ou pré-processar registros antes de executar a inferência. No mínimo, é preciso converter os dados para os seguintes itens:

  • Serialização da solicitação de inferência (processada por você)

  • Desserialização da solicitação de inferência (processada pelo algoritmo)

  • Serialização da resposta de inferência (processada pelo algoritmo)

  • Desserialização da resposta de inferência (processada por você)

Converter dados para serialização de solicitação de inferência

As opções de tipo de conteúdo para solicitações de inferência do algoritmo Amazon SageMaker AI incluem: text/csvapplication/json, e. application/x-recordio-protobuf Algoritmos que não oferecem suporte a todos esses tipos podem oferecer suporte a outros tipos. XGBoost, por exemplo, só suporta text/csv desta lista, mas também suportatext/libsvm.

Para text/csv, o valor do argumento do corpo para invoke_endpoint deve ser uma string com vírgulas que separem os valores para cada atributo. Por exemplo, um registro para um modelo com quatro atributos pode parecer assim: 1.5,16.0,14,23.0. Todas as transformações executadas nos dados de treinamento também devem ser executadas nos dados antes da obtenção da inferência. A ordem dos atributos é importante, devendo permanecer inalterada.

application/json é significativamente mais flexível e fornece vários formatos possíveis para os desenvolvedores usarem em suas aplicações. Em um nível alto, em JavaScript, a carga útil pode ter a seguinte aparência:

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

Para especificar o dataElement, você tem as seguintes opções:

Buffers de protocolo equivalentes

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

Vetor numérico simples

// 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 vários 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 ] } ] }

Converter dados para desserialização de respostas de inferência

Os algoritmos de SageMaker IA da Amazon retornam JSON em vários layouts. Basicamente, a estrutura é esta:

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

Os campos incluídos nas predições diferem de algoritmo para algoritmo. Veja a seguir exemplos de resultado para o algoritmo k-means.

Inferência de único registro

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

Inferência de vários 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 } ] }

Inferência de vários registros com 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 Os algoritmos de IA também oferecem suporte ao formato JSONLINES, em que o conteúdo da resposta por registro é o mesmo do formato JSON. A estrutura de vários registros é uma coleção de objetos de resposta por registro separados por caracteres de nova linha. O conteúdo da resposta para o KMeans algoritmo integrado para 2 pontos de dados de entrada é:

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

Ao executar uma transformação em lote, recomendamos usar o tipo de resposta jsonlines, definindo o campo Accept em CreateTransformJobRequest como application/jsonlines.

Formatos de solicitação comuns para todos os algoritmos

A maioria dos algoritmos usa vários dos formatos de solicitação de inferência a seguir:

Formato da solicitação JSON

Tipo de conteúdo: 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 esparso

{ "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 da solicitação JSONLINES

Tipo de conteúdo: application/JSONLINES

Formato denso

Um único registro no formato denso pode ser representado como:

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

ou:

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

Formato esparso

Um único registro no formato esparso é representado como:

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

Vários registros são representados como uma coleção das representações de registro único, separadas por caracteres de nova linha:

{"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 da solicitação CSV

Tipo de conteúdo: text/csv;label_size=0

nota

Não há compatibilidade com CSV para máquinas de fatoração.

Formato da solicitação RECORDIO

Tipo de conteúdo: aplicativo/ x-recordio-protobuf

Use a transformação em lote com algoritmos integrados

Ao executar a transformação em lote, recomendamos usar o tipo de resposta JSONLINES em vez do JSON, se aceito pelo algoritmo. Para fazer isso, defina o campo Accept em CreateTransformJobRequest a application/jsonlines.

Quando você cria um trabalho de transformação, SplitType deve ser definido de acordo com ContentType dos dados de entrada. De modo semelhante, dependendo do campo Accept em CreateTransformJobRequest, AssembleWith deve ser ajustado de acordo. Use a seguinte tabela para definir esses campos:

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

Para obter mais informações sobre formatos de resposta de algoritmos específicos, consulte os seguintes tópicos: