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 indice1e le intestazioni delle etichette possono essere estratte utilizzando l'indice0.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 scorein 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
JMESPathespressioneprobabilitye le intestazioni delle etichette possono essere estratte perJMESPathespressionepredicted 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
JMESPathespressioneprobabilitye le intestazioni delle etichette possono essere estratte perJMESPathespressionepredicted 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/nullOutput:
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--bodyindica al comando di interpretare\nil 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/nullOutput:
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/nullOutput:
0.60.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/nullOutput:
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/nullOutput:
0.1,0.6,0.30.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/nullOutput:
1,0.60,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/nullOutput:
"['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/nullOutput:
{"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/nullOutput:
{"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/nullOutput:
{"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/nullOutput:
{"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/nullOutput:
0.60.3
-
al termine delle convalide, elimina l'endpoint di test.