Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Captura de datos del punto de conexión en tiempo real
nota
Para evitar que las solicitudes de inferencia se vean afectadas, la captura de datos deja de capturar solicitudes con niveles altos de uso de disco. Se recomienda mantener la utilización del disco por debajo del 75 % para garantizar que la captura de datos siga capturando las solicitudes.
Para capturar datos para su punto final en tiempo real, debe implementar un modelo mediante servicios de SageMaker alojamiento. Esto requiere que cree un SageMaker modelo, defina una configuración de punto final y cree un HTTPS punto final.
Los pasos necesarios para activar la captura de datos son similares tanto si utilizas Python como AWS SDK for Python (Boto) si utilizas SageMaker PythonSDK. Si usa el AWS SDK, defina el DataCaptureConfigdiccionario, junto con los campos obligatorios, dentro del CreateEndpointConfigmétodo para activar la captura de datos. Si usas SageMaker PythonSDK, importa la DataCaptureConfigDataCaptureConfig
del método sagemaker.model.Model.deploy()
.
Para usar los fragmentos de código siguientes, reemplaza el italicized
placeholder text
en el código de ejemplo con su propia información.
Cómo establecer la captura de datos
Especifique una configuración de captura de datos. Puede capturar la carga útil de solicitud, la carga útil de respuesta o ambas con esta configuración. El fragmento de código siguiente muestra cómo habilitar la captura de datos mediante AWS SDK for Python (Boto) y Python SageMaker. SDK
nota
No necesita usar el monitor de modelos para capturar las cargas de solicitud o respuesta.
Implementar el modelo
Implemente su modelo y cree un HTTPS punto final si DataCapture
está activado.
Ver datos capturados
Cree un objeto predictor a partir de la clase SDK PredictorPredictor
para invocar su punto de conexión en un futuro. Proporcione el nombre de su punto de conexión (definido anteriormente como endpoint_name
), junto con los objetos serializadores y deserializadores para el serializador y el deserializador, respectivamente. Para obtener información sobre los tipos de serializadores, consulte la clase Serializers en Python
from sagemaker.predictor import Predictor from sagemaker.serializers import
<Serializer>
from sagemaker.deserializers import<Deserializers>
predictor = Predictor(endpoint_name=endpoint_name, serializer =<Serializer_Class>
, deserializer =<Deserializer_Class>
) # Example #from sagemaker.predictor import Predictor #from sagemaker.serializers import CSVSerializer #from sagemaker.deserializers import JSONDeserializer #predictor = Predictor(endpoint_name=endpoint_name, # serializer=CSVSerializer(), # deserializer=JSONDeserializer())
En el siguiente escenario de ejemplo de código, invocamos el punto final con los datos de validación de muestra que hemos almacenado localmente en un archivo denominado. CSV validation_with_predictions
El conjunto de validación de muestras contiene etiquetas para cada entrada.
Las primeras líneas de la instrucción with abren primero el archivo del conjunto de validación, luego dividen cada fila del CSV archivo por un carácter de coma y, a continuación","
, almacenan los dos objetos devueltos en una etiqueta y en variables input_cols. Para cada fila, la entrada (input_cols
) se pasa al método integrado Predictor.predict()
de los objetos de la variable de predicción (predictor
).
Suponga que el modelo devuelve una probabilidad. Las probabilidades oscilan entre valores enteros de 0 y 1,0. Si la probabilidad devuelta por el modelo es superior al 80 % (0,8), se asigna a la predicción una etiqueta de valor entero de 1. De lo contrario, se asigna a la predicción una etiqueta de valor entero de 0.
from time import sleep validate_dataset = "validation_with_predictions.csv" # Cut off threshold of 80% cutoff = 0.8 limit = 200 # Need at least 200 samples to compute standard deviations i = 0 with open(f"test_data/{validate_dataset}", "w") as validation_file: validation_file.write("probability,prediction,label\n") # CSV header with open("test_data/validation.csv", "r") as f: for row in f: (label, input_cols) = row.split(",", 1) probability = float(predictor.predict(input_cols)) prediction = "1" if probability > cutoff else "0" baseline_file.write(f"{probability},{prediction},{label}\n") i += 1 if i > limit: break print(".", end="", flush=True) sleep(0.5) print() print("Done!")
Dado que habilitó la captura de datos en los pasos anteriores, la carga de solicitud y respuesta, junto con algunos metadatos adicionales, se guarda en la ubicación de Amazon S3 especificada en DataCaptureConfig
. La entrega de los datos de captura a Amazon S3 puede tardar un par de minutos.
Para ve la fecha de captura, enumere los archivos de captura de datos almacenados en Amazon S3. El formato de la ruta de Amazon S3 es: s3:///
.{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename
.jsonl
Espere ver archivos diferentes de distintos períodos de tiempo, organizados en función de la hora en que se produjo la invocación. Ejecute lo siguiente para imprimir el contenido de un único archivo de captura:
print("\n".join(capture_file[-3:-1]))
Esto devolverá un archivo con formato de líneas específico SageMaker . JSON Lo siguiente es un ejemplo de respuesta tomado de un punto de conexión en tiempo real que se invocó con los datos csv/text
:
{"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"69,0,153.7,109,194.0,105,256.1,114,14.1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.0254181120544672","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"} {"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"94,23,197.1,125,214.5,136,282.2,103,9.5,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.07675473392009735","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"}
En el ejemplo anterior, el objeto capture_file
es un tipo de lista. Indexe el primer elemento de la lista para ver una única solicitud de inferencia.
# The capture_file object is a list. Index the first element to view a single inference request print(json.dumps(json.loads(capture_file[0]), indent=2))
Esto devolverá una respuesta similar a la siguiente. Los valores devueltos diferirán en función de la configuración del punto final, el SageMaker modelo y los datos capturados:
{ "captureData": { "endpointInput": { "observedContentType": "text/csv", # data MIME type "mode": "INPUT", "data": "50,0,188.9,94,203.9,104,151.8,124,11.6,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0\n", "encoding": "CSV" }, "endpointOutput": { "observedContentType": "text/csv; charset=character-encoding", "mode": "OUTPUT", "data": "0.023190177977085114", "encoding": "CSV" } }, "eventMetadata": { "eventId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "inferenceTime": "2022-02-14T17:25:06Z" }, "eventVersion": "0" }