Verifique previamente o recipiente modelo - 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á.

Verifique previamente o recipiente modelo

Esta seção mostra como verificar previamente a compatibilidade das entradas e saídas do contêiner do modelo antes de configurar um endpoint. O SageMaker explicador do Clarify é independente do modelo, mas tem requisitos para entrada e saída do contêiner do modelo.

nota

Você pode aumentar a eficiência configurando seu contêiner para oferecer compatibilidade com solicitações em lote, que oferecem apoio a dois ou mais registros em uma única solicitação. Por exemplo, um único registro é uma única linha de dados CSV ou uma única linha de dados de linhas JSON. SageMaker O Clarify tentará enviar primeiro um pequeno lote de registros para o contêiner do modelo, antes de retornar às solicitações de registro único.

Entrada de contêiner de modelo

CSV

O contêiner do modelo é compatível com entrada em CSV com o tipo MIME: text/csv. A tabela a seguir mostra exemplos de entradas compatíveis com o SageMaker Clarify.

Entrada de contêiner do modelo (representação de string) Comentários

'1,2,3,4'

Registro único que usa quatro atributos numéricos.

'1,2,3,4\n5,6,7,8'

Dois registros, separados por quebra de linha '\n'.

'"Este é um bom produto",5'

Registro único que contém um atributo de texto e um atributo numérico.

'"Este é um bom produto",5\n"Experiência de compra ruim",1'

Dois registros.

JSON Lines

SageMaker O AI também suporta entrada no formato denso de linhas JSON com o tipo MIME:application/jsonlines, conforme mostrado na tabela a seguir.

Entrada de contêiner de modelo Comentários

'{"data":{"features":[1,2,3,4]}}'

Registro único; uma lista de recursos pode ser extraída por JMESPath expressãodata.features.

'{"data":{"features":[1,2,3,4]}}\n{"data":{"features":[5,6,7,8]}}'

Dois registros.

'{"features":["Este é um bom produto",5]}'

Registro único; uma lista de recursos pode ser extraída por JMESPath expressãofeatures.

'{"features":["Este é um bom produto",5]}\n{"features":["Experiência de compra ruim",1]}'

Dois registros.

Entrada de contêiner de modelo

A saída do contêiner do modelo também deve estar no formato denso CSV ou JSON Lines. Além disso, o contêiner do modelo deve incluir as probabilidades dos registros de entrada, que o SageMaker Clarify usa para calcular as atribuições de recursos.

Os exemplos de dados a seguir são para saídas de contêiner de modelo no formato CSV.

Probability only

Para problemas de regressão e classificação binária, o contêiner do modelo gera um único valor de probabilidade (pontuação) do rótulo previsto. Essas probabilidades podem ser extraídas usando o índice da coluna 0. Para problemas de várias classes, o contêiner do modelo gera uma lista de probabilidades (pontuações). Para problemas de várias classes, se nenhum índice for fornecido, todos os valores serão extraídos.

Entrada de contêiner de modelo Saída do contêiner do modelo (representação de string)

Registro único

'0.6'

Dois registros (resultados em uma linha)

'0.6,0.3'

Dois registros (resultados em duas linhas)

'0.6\n0.3'

Registro único de um modelo multiclasse (três classes)

'0.1,0.6,0.3'

Dois registros de um modelo multiclasse (três classes)

'0.1,0.6,0.3\n0.2,0.5,0.3'

Predicted label and probabilities

O contêiner do modelo gera o rótulo previsto seguido por sua probabilidade no formato CSV. As probabilidades podem ser extraídas usando o índice 1.

Entrada de contêiner de modelo Entrada de contêiner de modelo

Registro único

'1,0.6'

Dois registros

'1,0.6\n0,0.3'

Predicted labels header and probabilities

Um contêiner de modelo multiclasse treinado pelo Autopilot pode ser configurado para gerar a representação em sequência da lista de rótulos e probabilidades previstos no formato CSV. No exemplo a seguir, as probabilidades podem ser extraídas por índice 1. Os cabeçalhos dos rótulos podem ser extraídos pelo índice 1 e os cabeçalhos dos rótulos podem ser extraídos usando o índice 0.

Entrada de contêiner de modelo Entrada de contêiner de modelo

Registro único

'"[\'gato\',\'cachorro\',\'peixe\']","[0.1,0.6,0.3]"'

Dois registros

'"[\'gato\',\'cachorro\',\'peixe\']", "[0.1,0.6,0.3]"\n"[\'gato\',\'cachorro\',\'peixe\']","[0.2,0.5,0.3]"'

Os exemplos de dados a seguir são para saídas de contêineres de modelos no formato JSON Lines.

Probability only

Neste exemplo, o contêiner do modelo gera a probabilidade que pode ser extraída pela expressão JMESPath no formato score JSON Lines.

Entrada de contêiner de modelo Entrada de contêiner de modelo

Registro único

'{"score":0.6}'

Dois registros

'{"score":0.6}\n{"score":0.3}'

Predicted label and probabilities

Neste exemplo, um contêiner de modelo multiclasse gera uma lista de cabeçalhos de rótulos junto com uma lista de probabilidades no formato JSON Lines. As probabilidades podem ser extraídas pela JMESPath expressão probability e os cabeçalhos dos rótulos podem ser extraídos pela expressão JMESPath predicted labels.

Entrada de contêiner de modelo Entrada de contêiner de modelo

Registro único

'{"predicted_labels":["gato","cachorro","peixe"],"probabilities":[0.1,0.6,0.3]}'

Dois registros

'{"predicted_labels":["gato","cachorro","peixe"],"probabilities":[0.1,0.6,0.3]}\n{"predicted_labels":["gato","cachorro","peixe"],"probabilities":[0.2,0.5,0.3]}'

Predicted labels header and probabilities

Neste exemplo, um contêiner de modelo multiclasse gera uma lista de cabeçalhos e probabilidades de rótulos no formato JSON Lines. As probabilidades podem ser extraídas pela JMESPath expressão probability e os cabeçalhos dos rótulos podem ser extraídos pela expressão JMESPath predicted labels.

Entrada de contêiner de modelo Entrada de contêiner de modelo

Registro único

'{"predicted_labels":["gato","cachorro","peixe"],"probabilities":[0.1,0.6,0.3]}'

Dois registros

'{"predicted_labels":["gato","cachorro","peixe"],"probabilities":[0.1,0.6,0.3]}\n{"predicted_labels":["gato","cachorro","peixe"],"probabilities":[0.2,0.5,0.3]}'

Validação de contêiner

Recomendamos que você implante seu modelo em um endpoint de inferência de SageMaker IA em tempo real e envie solicitações para o endpoint. Examine manualmente as solicitações (entradas do contêiner do modelo) e as respostas (saídas do contêiner do modelo) para garantir que ambas estejam em conformidade com os requisitos na seção Entrada do contêiner do modelo e na seção Saída do contêiner do modelo. Se o seu contêiner de modelo oferecer compatibilidade com solicitações em lote, você poderá começar com uma única solicitação de registro e, em seguida, tentar dois ou mais registros.

Os comandos a seguir mostram como solicitar uma resposta usando o AWS CLI. O AWS CLI vem pré-instalado nas instâncias SageMaker Studio Classic e SageMaker Notebook. Se você precisar instalar o AWS CLI, siga este guia de instalação.

aws sagemaker-runtime invoke-endpoint \ --endpoint-name $ENDPOINT_NAME \ --content-type $CONTENT_TYPE \ --accept $ACCEPT_TYPE \ --body $REQUEST_DATA \ $CLI_BINARY_FORMAT \ /dev/stderr 1>/dev/null

Os parâmetros são definidos da seguinte forma:

  • $ENDPOINT NAME: o nome do endpoint.

  • $CONTENT_TYPE: o tipo MIME da solicitação (entrada do contêiner do modelo).

  • $ACCEPT_TYPE: o tipo MIME da resposta (saída do contêiner do modelo).

  • $REQUEST_DATA: a string de carga útil solicitada.

  • $CLI_BINARY_FORMAT: o formato do parâmetro da Interface da linha de comando (CLI). Para AWS CLI v1, esse parâmetro deve permanecer em branco. Para v2, esse parâmetro deve ser definido como --cli-binary-format raw-in-base64-out.

Os exemplos a seguir usam AWS CLI v1:

Request and response in CSV format
  • A solicitação consiste em um único registro e a resposta é seu valor de probabilidade.

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-sagemaker-xgboost-model \ --content-type text/csv \ --accept text/csv \ --body '1,2,3,4' \ /dev/stderr 1>/dev/null

    Saída:

    0.6

  • A solicitação consiste em dois registros, e a resposta inclui suas probabilidades, e o modelo separa as probabilidades por uma vírgula. A $'content' expressão no --body diz ao comando para interpretar \n o conteúdo como uma quebra de linha.

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-sagemaker-xgboost-model \ --content-type text/csv \ --accept text/csv \ --body $'1,2,3,4\n5,6,7,8' \ /dev/stderr 1>/dev/null

    Saída:

    0.6,0.3

  • A solicitação consiste em dois registros, a resposta inclui suas probabilidades e o modelo separa as probabilidades com uma quebra de linha.

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-csv-1 \ --content-type text/csv \ --accept text/csv \ --body $'1,2,3,4\n5,6,7,8' \ /dev/stderr 1>/dev/null

    Saída:

    0.6

    0.3

  • A solicitação consiste em um único registro e a resposta são valores de probabilidade (modelo multiclasse, três classes).

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-csv-1 \ --content-type text/csv \ --accept text/csv \ --body '1,2,3,4' \ /dev/stderr 1>/dev/null

    Saída:

    0.1,0.6,0.3

  • A solicitação consiste em dois registros e a resposta inclui seus valores de probabilidade (modelo multiclasse, três classes).

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-csv-1 \ --content-type text/csv \ --accept text/csv \ --body $'1,2,3,4\n5,6,7,8' \ /dev/stderr 1>/dev/null

    Saída:

    0.1,0.6,0.3

    0.2,0.5,0.3

  • A solicitação consiste em dois registros, e a resposta inclui rótulo e probabilidade previstos.

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-csv-2 \ --content-type text/csv \ --accept text/csv \ --body $'1,2,3,4\n5,6,7,8' \ /dev/stderr 1>/dev/null

    Saída:

    1,0.6

    0,0.3

  • A solicitação consiste em dois registros e a resposta inclui cabeçalhos e probabilidades dos rótulos.

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-csv-3 \ --content-type text/csv \ --accept text/csv \ --body $'1,2,3,4\n5,6,7,8' \ /dev/stderr 1>/dev/null

    Saída:

    "['cat','dog','fish']","[0.1,0.6,0.3]"

    "['cat','dog','fish']","[0.2,0.5,0.3]"

Request and response in JSON Lines format
  • A solicitação consiste em um único registro e a resposta é seu valor de probabilidade.

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-jsonlines \ --content-type application/jsonlines \ --accept application/jsonlines \ --body '{"features":["This is a good product",5]}' \ /dev/stderr 1>/dev/null

    Saída:

    {"score":0.6}

  • A solicitação contém dois registros e a resposta inclui rótulo e probabilidade previstos.

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-jsonlines-2 \ --content-type application/jsonlines \ --accept application/jsonlines \ --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \ /dev/stderr 1>/dev/null

    Saída:

    {"predicted_label":1,"probability":0.6}

    {"predicted_label":0,"probability":0.3}

  • A solicitação contém dois registros e a resposta inclui cabeçalhos e probabilidades dos rótulos.

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-jsonlines-3 \ --content-type application/jsonlines \ --accept application/jsonlines \ --body $'{"data":{"features":[1,2,3,4]}}\n{"data":{"features":[5,6,7,8]}}' \ /dev/stderr 1>/dev/null

    Saída:

    {"predicted_labels":["cat","dog","fish"],"probabilities":[0.1,0.6,0.3]}

    {"predicted_labels":["cat","dog","fish"],"probabilities":[0.2,0.5,0.3]}

Request and response in different formats
  • A solicitação está no formato CSV e a resposta está no formato JSON Lines:

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-csv-in-jsonlines-out \ --content-type text/csv \ --accept application/jsonlines \ --body $'1,2,3,4\n5,6,7,8' \ /dev/stderr 1>/dev/null

    Saída:

    {"probability":0.6}

    {"probability":0.3}

  • A solicitação está no formato JSON Lines e a resposta está no formato CSV:

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name test-endpoint-jsonlines-in-csv-out \ --content-type application/jsonlines \ --accept text/csv \ --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \ /dev/stderr 1>/dev/null

    Saída:

    0.6

    0.3

Depois que as validações forem concluídas, exclua o endpoint de teste.