Contro preliminare del container del modello - Amazon SageMaker AI

Contro preliminare del container del modello

Questa sezione mostra come controllare preventivamente la compatibilità degli input e degli output del container del modello prima di configurare un endpoint. Lo strumento esplicativo SageMaker Clarify è indipendente dal modello, ma presenta requisiti per l'input e l'output del container del modello.

Nota

È possibile aumentare l'efficienza configurando il container per supportare le richieste batch, che supportano due o più record in un'unica richiesta. Ad esempio, un singolo record è una singola riga di dati CSV o una singola riga di dati JSON Lines. SageMaker Clarify tenterà di inviare un mini-batch di record al container modello prima di ricorrere alle richieste di record singoli.

Input del container del modello

CSV

Il container del modello supporta l'input in CSV con tipo MIME: text/csv. La tabella riportata di seguito mostra un esempio di input supportati da SageMaker Clarify.

Input del container del modello (rappresentazione di stringhe) Commenti

'1,2,3,4'

Record singolo che utilizza quattro caratteristiche numeriche.

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

Due record, separati da un'interruzione di riga \n.

'"Questo è un buon prodotto",5'

Record singolo che contiene una caratteristica testuale e una numerica.

'"Questo è un buon prodotto",5\n"Pessima esperienza di acquisto",1'

Due record.

JSON Lines

SageMaker AI supporta anche l’input in formato JSON Lines denso con tipo MIME application/jsonlines, come mostrato nella tabella seguente.

Input del container del modello Commenti

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

Record singolo; un elenco di caratteristiche può essere estratto tramite l'espressione JMESPath data.features.

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

Due record.

'{"caratteristiche": ["Questo è un buon prodotto" ,5]}'

Record singolo; un elenco di caratteristiche può essere estratto tramite l'espressione JMESPath features.

'{"caratteristiche": ["Questo è un buon prodotto",5]}\n{"caratteristiche":["Esperienza di acquisto negativa",1]}'

Due record.

Output del container del modello

L'output del container del modello dovrebbe anche essere in formato CSV o JSON Lines denso. Inoltre, il container del modello deve includere le probabilità dei record di input, che SageMaker Clarify utilizza per calcolare le attribuzioni delle caratteristiche.

I seguenti esempi di dati riguardano gli output del container del modello in formato CSV.

Probability only

Per problemi di regressione e classificazione binaria, il container del modello emette un singolo valore di probabilità (punteggio) dell'etichetta prevista. Queste probabilità possono essere estratte utilizzando l'indice di colonna 0. Per problemi multiclasse, il container del modello emette un elenco di probabilità (punteggi). Per problemi multiclasse, se non viene fornito alcun indice, vengono estratti tutti i valori.

Input del container del modello Output del container del modello (rappresentazione di stringhe)

Record singolo

'0.6'

Due record (risultati in una riga)

'0.6,0.3'

Due record (risultati in due righe)

'0.6\n0.3'

Record singolo di un modello multiclasse (tre classi)

'0.1,0.6,0.3'

Due record di un modello multiclasse (tre classi)

'0.1,0.6,0.3\n0,2,0,5,0,3'

Predicted label and probabilities

Il container del modello emette l'etichetta prevista seguita dalla relativa probabilità in formato CSV. Le probabilità possono essere estratte utilizzando l'indice 1.

Input del container del modello Output del container del modello

Record singolo

'1,0.6'

Due record

'1,0.6\n0,0.3'

Predicted labels header and probabilities

Un container modello multiclasse addestrato da Autopilot può essere configurato per generare la rappresentazione in stringa dell'elenco delle etichette e delle probabilità previste in formato CSV. Nell'esempio seguente è possibile estrarre le probabilità per indice 1. Le intestazioni delle etichette possono essere estratte per indice 1 e le intestazioni delle etichette possono essere estratte utilizzando l'indice 0.

Input del container del modello Output del container del modello

Record singolo

'"[\'gatto\',\'cane\',\'pesce\']","[0.1,0.6,0.3]"'

Due record

'"[\'gatto\',\'cane\',\'pesce\']", "[0.1,0.6,0.3]"\n"[\'gatto\',\'cane\',\'pesce\']","[0.2,0.5,0.3]"'

I seguenti esempi di dati riguardano gli output del container del modello in formato JSON Lines.

Probability only

In questo esempio, il container del modello emette la probabilità che può essere estratta mediante JMESPathespressione score in formato JSON Lines.

Input del container del modello Output del container del modello

Record singolo

'{"score":0.6}'

Due record

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

Predicted label and probabilities

In questo esempio, un container modello multiclasse genera un elenco di intestazioni di etichette insieme a un elenco di probabilità in formato JSON Lines. Le probabilità possono essere estratte per JMESPathespressione probability e le intestazioni delle etichette possono essere estratte per JMESPath espressione predicted labels.

Input del container del modello Output del container del modello

Record singolo

'{"etichette_previste":["gatto","cane","pesce"],"probabilità":[0.1,0.6,0.3]}'

Due record

'{"etichette_previste":["gatto","cane","pesce"],"probabilità":[0.1,0.6,0.3]}\n{"etichette_previste":["gatto","cane","pesce"],"probabilità":[0.2,0.5,0.3]}'

Predicted labels header and probabilities

In questo esempio, un container modello multiclasse emette un elenco di intestazioni di etichette e probabilità in formato JSON Lines. Le probabilità possono essere estratte per JMESPath espressione probability e le intestazioni delle etichette possono essere estratte per JMESPath espressione predicted labels.

Input del container del modello Output del container del modello

Record singolo

'{"etichette_previste":["gatto","cane","pesce"],"probabilità":[0.1,0.6,0.3]}'

Due record

'{"etichette_previste":["gatto","cane","pesce"],"probabilità":[0.1,0.6,0.3]}\n{"etichette_previste":["gatto","cane","pesce"],"probabilità":[0.2,0.5,0.3]}'

Validazione del container del modello

Ti consigliamo di implementare il modello su un endpoint di inferenza in tempo reale SageMaker AI e di inviare richieste all’endpoint. Esamina manualmente le richieste (input del container del modello) e le risposte (output del container del modello) per assicurarti che entrambe siano conformi ai requisiti delle sezioni Input del container del modello e Output del container del modello. Se il container del modello supporta le richieste batch, è possibile iniziare con una singola richiesta di record e quindi provare due o più record.

I comandi seguenti mostrano come richiedere una risposta utilizzando AWS CLI. AWS CLI è preinstallata nelle istanze SageMaker Studio Classic e SageMaker Notebook. Se è necessario installare AWS CLI, seguire questa guida all'installazione.

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

I parametri sono definiti come segue:

  • $ENDPOINT NAME: Il nome dell'endpoint.

  • $CONTENT_TYPE: Il tipo MIME della richiesta (input del container del modello).

  • $ACCEPT_TYPE: il tipo MIME della risposta (output del container del modello).

  • $REQUEST_DATA: La stringa payload richiesta.

  • $CLI_BINARY_FORMAT: il formato del parametro CLI (Command Line Interface). Per AWS CLI v1, questo parametro deve rimanere vuoto. Per v2, questo parametro deve essere impostato su --cli-binary-format raw-in-base64-out.

Nota

AWS CLI v2 passa i parametri binari come stringhe codificate in base64 per impostazione predefinita.

Nell'esempio seguente viene utilizzato AWS CLI v1:

Request and response in CSV format
  • la richiesta è costituita da un singolo record e la risposta è il relativo valore di probabilità.

    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

    Output:

    0.6

  • la richiesta è composta da due record e la risposta include le relative probabilità e il modello separa le probabilità con una virgola. L'espressione $'content' in --body indica al comando di interpretare \n il contenuto come un'interruzione di riga.

    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

    Output:

    0.6,0.3

  • la richiesta è composta da due record, la risposta include le relative probabilità e il modello separa le probabilità con un'interruzione di riga.

    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

    Output:

    0.6

    0.3

  • la richiesta è costituita da un singolo record e la risposta è costituita da valori di probabilità (modello multiclasse, tre classi).

    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

    Output:

    0.1,0.6,0.3

  • la richiesta è composta da due record e la risposta include i relativi valori di probabilità (modello multiclasse, tre classi).

    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

    Output:

    0.1,0.6,0.3

    0.2,0.5,0.3

  • la richiesta è composta da due record e la risposta include l'etichetta e la probabilità previste.

    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

    Output:

    1,0.6

    0,0.3

  • la richiesta è composta da due record e la risposta include le intestazioni e le probabilità delle etichette.

    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

    Output:

    "['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
  • la richiesta è costituita da un singolo record e la risposta è il relativo valore di probabilità.

    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

    Output:

    {"score":0.6}

  • la richiesta contiene due record e la risposta include l'etichetta e la probabilità previste.

    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

    Output:

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

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

  • la richiesta contiene due record e la risposta include le intestazioni e le probabilità delle etichette.

    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

    Output:

    {"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
  • la richiesta è in formato CSV e la risposta è in 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

    Output:

    {"probability":0.6}

    {"probability":0.3}

  • la richiesta è in formato JSON Lines e la risposta è in 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

    Output:

    0.6

    0.3

al termine delle convalide, elimina l'endpoint di test.