Comprobación previa del contenedor de modelos
Esta sección le muestra cómo realizar la comprobación previa de la compatibilidad de las entradas y salidas del contenedor de modelos antes de configurar un punto de conexión. El explicador de SageMaker Clarify es independiente del modelo, pero tiene requisitos para las entradas y salidas del contenedor de modelos.
Puede aumentar la eficiencia si configura su contenedor para que admita solicitudes por lotes, que admiten dos o más registros en una sola solicitud. Por ejemplo, un único registro es una sola línea de datos CSV o una sola línea de datos JSON Lines. SageMaker Clarify intentará enviar primero un minilote de registros al contenedor de modelos antes de recurrir a las solicitudes de registro único.
- CSV
-
El contenedor de modelos admite entradas en CSV con el tipo MIME: text/csv. En la tabla siguiente se muestran ejemplos de entradas admitidas por SageMaker Clarify.
| Entrada del contenedor de modelos (representación de cadena) |
Comentarios |
|
'1,2,3,4'
|
Registro único que utiliza cuatro características numéricas.
|
|
'1,2,3,4\n5,6,7,8'
|
Dos registros, separados por un salto de línea '\n'.
|
|
'"Este es un buen producto",5'
|
Registro único que contiene una característica de texto y una característica numérica.
|
|
‘"Este es un buen producto",5\n"Mala experiencia de compra",1'
|
Dos registros.
|
- JSON Lines
-
SageMaker AI también admite entradas en formato denso JSON Lines con el tipo MIME: application/jsonlines, como se muestra en la siguiente tabla.
| Entrada del contenedor de modelos |
Comentarios |
|
'{"datos":{"características":[1,2,3,4]}}'
|
Registro único; se puede extraer una lista de características mediante la expresión JMESPath data.features.
|
|
'{"datos":{"características":[1,2,3,4]}}\n{"datos":{"características":[5,6,7,8]}}'
|
Dos registros.
|
|
'{"características":["Este es un buen producto",5]}'
|
Registro único; se puede extraer una lista de características mediante la expresión JMESPath features.
|
|
'{"características":["Este es un buen producto",5]}\n{"características":["Mala experiencia de compra",1]}'
|
Dos registros.
|
Salida del contenedor de modelos
La salida del contenedor de modelos también debe estar en formato denso CSV o JSON Lines. Además, el contenedor de modelos debe incluir las probabilidades de los registros de entrada, que SageMaker Clarify utiliza para calcular las atribuciones de características.
Los siguientes ejemplos de datos son para salidas de contenedores de modelos en formato CSV.
- Probability only
-
En el caso de problemas de regresión y clasificación binaria, el contenedor de modelos genera un único valor de probabilidad (puntuación) de la etiqueta predicha. Estas probabilidades se pueden extraer utilizando el índice de columna 0. En el caso de problemas con varias clases, el contenedor de modelos genera una lista de probabilidades (puntuaciones). En el caso de problemas con varias clases, si no se proporciona ningún índice, se extraen todos los valores.
| Entrada del contenedor de modelos |
Salida del contenedor de modelos (representación de cadena) |
|
Registro único
|
'0,6'
|
|
Dos registros (resultados en una línea)
|
'0,6,0,3'
|
|
Dos registros (resultados en dos líneas)
|
'0,6\n0,3'
|
|
Registro único de un modelo multiclase (tres clases)
|
'0,1,0,6,0,3'
|
|
Dos registros de un modelo multiclase (tres clases)
|
'0,1,0,6,0,3\n0,2,0,5,0,3'
|
- Predicted label and probabilities
-
El contenedor de modelos genera la etiqueta predicha seguida de su probabilidad en formato CSV. Estas probabilidades se pueden extraer utilizando el índice 1.
| Entrada del contenedor de modelos |
Salida del contenedor de modelos |
|
Registro único
|
'1,0,6'
|
|
Dos registros
|
'1,0,6\n0,0,3'
|
- Predicted labels header and probabilities
-
Se puede configurar un contenedor de modelos multiclase entrenado por el piloto automático para que genere la representación en cadena de la lista de etiquetas y probabilidades predichas en formato CSV. En el siguiente ejemplo, las probabilidades se pueden extraer mediante el índice 1. Los encabezados de las etiquetas se pueden extraer mediante el índice 1, y los encabezados de las etiquetas se pueden extraer utilizando el índice 0.
| Entrada del contenedor de modelos |
Salida del contenedor de modelos |
|
Registro único
|
'"[\'gato\',\'perro\',\'pez\']","[0,1,0,6,0,3]"'
|
|
Dos registros
|
'"[\'gato\',\'perro\',\'pez\']","[0,1,0,6,0,3]"\n"[\'gato\',\'perro\',\'pez\']","[0,2,0,5,0,3]"'
|
Los siguientes ejemplos de datos son para salidas del contenedor de modelos en formato JSON Lines.
- Probability only
-
En este ejemplo, el contenedor de modelos genera la probabilidad que se puede extraer mediante una expresión de JMESPath score en formato JSON Lines.
| Entrada del contenedor de modelos |
Salida del contenedor de modelos |
|
Registro único
|
'{"puntuación":0,6}'
|
|
Dos registros
|
'{"puntuación":0,6}\n{"puntuación":0,3}'
|
- Predicted label and probabilities
-
En este ejemplo, un contenedor de modelos multiclase genera una lista de encabezados de etiquetas junto con una lista de probabilidades en formato JSON Lines. Las probabilidades se pueden extraer mediante la expresión de JMESPath probability y los encabezados de las etiquetas se pueden extraer mediante la expresión de JMESPath predicted labels.
| Entrada del contenedor de modelos |
Salida del contenedor de modelos |
|
Registro único
|
'{"etiquetas_predichas":["gato","perro","pez"],"probabilidades":[0,1,0,6,0,3]}'
|
|
Dos registros
|
'{"etiquetas_predichas":["gato","perro","pez"],"probabilidades":[0,1,0,6,0.3]}\n{"etiquetas_predichas":["gato","perro","pez"],"probabilidades":[0,2,0,5,0,3]}'
|
- Predicted labels header and probabilities
-
En este ejemplo, un contenedor de modelos multiclase genera una lista de encabezados de etiquetas y probabilidades en formato JSON Lines. Las probabilidades se pueden extraer mediante la expresión de JMESPath probability y los encabezados de las etiquetas se pueden extraer mediante la expresión de JMESPath predicted
labels.
| Entrada del contenedor de modelos |
Salida del contenedor de modelos |
|
Registro único
|
'{"etiquetas_predichas":["gato","perro","pez"],"probabilidades":[0,1,0,6,0,3]}'
|
|
Dos registros
|
'{"etiquetas_predichas":["gato","perro","pez"],"probabilidades":[0,1,0,6,0.3]}\n{"etiquetas_predichas":["gato","perro","pez"],"probabilidades":[0,2,0,5,0,3]}'
|
Validación del contenedor de modelos
Se recomienda implementar el modelo en un punto de conexión de inferencia en tiempo real de SageMaker AI y enviar las solicitudes al punto de conexión. Examine manualmente las solicitudes (entradas del contenedor de modelos) y las respuestas (salidas del contenedor de modelos) para asegurarse de que ambas cumplan con los requisitos de las secciones Entrada del contenedor de modelos y Salida del contenedor de modelos. Si el contenedor de modelos admite solicitudes por lotes, puede empezar con una sola solicitud de registro y, a continuación, probar con dos o más registros.
En los siguientes comandos se muestra cómo solicitar una respuesta mediante la AWS CLI. La AWS CLI está preinstalada en las instancias de SageMaker Studio Classic y el cuaderno de SageMaker. Si necesita instalar la AWS CLI, siga esta guía de instalación.
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
Los parámetros se definen como sigue:
-
$ENDPOINT NAME: el nombre del punto de conexión.
-
$CONTENT_TYPE: el tipo MIME de la solicitud (entrada del contenedor de modelos).
-
$ACCEPT_TYPE: el tipo MIME de la respuesta (salida del contenedor de modelos).
-
$REQUEST_DATA: la cadena de carga solicitada.
-
$CLI_BINARY_FORMAT: el formato del parámetro de la interfaz de la línea de comandos (CLI). En la versión 1 de la AWS CLI, este parámetro debe permanecer en blanco. En la versión 2, este parámetro debe establecerse en --cli-binary-format
raw-in-base64-out.
La versión 2 de la AWS CLI pasa los parámetros binarios como cadenas codificadas en base64 de forma predeterminada.
El siguiente ejemplo usa la versión 1 de la AWS CLI:
- Request and response in CSV format
-
-
La solicitud consta de un único registro y la respuesta es su valor de probabilidad.
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
Salida:
0.6
-
La solicitud consta de dos registros, la respuesta incluye sus probabilidades y el modelo separa las probabilidades con una coma. La expresión $'content' en --body indica al comando que debe interpretar \n en el contenido como un salto de línea.
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
Salida:
0.6,0.3
-
La solicitud consta de dos registros, la respuesta incluye sus probabilidades y el modelo separa las probabilidades con un salto de línea.
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
Salida:
0.6
0.3
-
La solicitud consta de un único registro y la respuesta son los valores de probabilidad (modelo multiclase, tres clases).
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
Salida:
0.1,0.6,0.3
-
La solicitud consta de dos registros y la respuesta incluye sus valores de probabilidad (modelo multiclase, tres clases).
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
Salida:
0.1,0.6,0.3
0.2,0.5,0.3
-
La solicitud consta de dos registros y la respuesta incluye la probabilidad y la etiqueta predicha.
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
Salida:
1,0.6
0,0.3
-
La solicitud consta de dos registros y la respuesta incluye los encabezados de la etiqueta y las probabilidades.
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
Salida:
"['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 solicitud consta de un único registro y la respuesta es su valor de probabilidad.
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
Salida:
{"score":0.6}
-
La solicitud contiene dos registros y la respuesta incluye la probabilidad y la etiqueta predicha.
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
Salida:
{"predicted_label":1,"probability":0.6}
{"predicted_label":0,"probability":0.3}
-
La solicitud contiene dos registros y la respuesta incluye los encabezados de la etiqueta y las probabilidades.
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
Salida:
{"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 solicitud está en formato CSV y la respuesta está en 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
Salida:
{"probability":0.6}
{"probability":0.3}
-
La solicitud está en formato JSON Lines y la respuesta está en 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
Salida:
0.6
0.3
Una vez finalizadas las validaciones, elimine el punto de conexión de prueba.