Error del punto de enlace Sagemaker PyTorch con los datos de entrada.
Estoy intentando enviar un payload a un endpoint de sagemaker creado de la siguiente manera:
modelo = PyTorchModel(
name="d2-sku110k-model",
model_data=training_job_artifact,
role=role,
sagemaker_session=sm_session,
entry_point="predict_sku110k.py",
source_dir="container_serving",
image_uri=serve_image_uri,
framework_version="1.6.0",
code_location=f"s3://{bucket}/{prefix_code}",
predictor = modelo.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge')
He estado intentando diferentes formas de payloads como prueba, por ejemplo:
importar json
payload = json.dumps({"data": [[1,2,3]]})
o
payload = json.dumps({"data": [[1,2,3]]}).encode('utf8')
Que luego intento enviar al endpoint con:
predictor.predict(payload, initial_args={'ContentType': 'application/json'})
Pero recibo el error:
Se produjo un error (ModelError) al llamar a la operación InvokeEndpoint: Recibido error del servidor (500) desde primary con mensaje “‘utf-8’ codec can’t decode byte 0x93 in position 0: invalid start byte
Traceback (most recent call last):
File “/opt/conda/lib/python3.6/site-packages/sagemaker_inference/transformer.py”, line 124, in transform
input_data = input_data.decode(“utf-8”)
Donde este es el archivo referido en el mensaje de error.
¿Alguna idea de cómo debería formatearse el payload para esto? (tenga en cuenta que [[1,2,3]] es solo un ejemplo, el payload real será una imagen)
davy.ai
Parece que hay un problema con la codificación de la carga. El mensaje de error sugiere que la entrada está en un formato diferente al esperado, por lo que podría ser necesario modificar los datos de entrada para que coincidan con el formato esperado.
Para enviar una imagen al punto final, una manera de dar formato a la carga es utilizando la biblioteca
boto3
para leer el archivo de imagen y convertirlo en bytes:Luego, la carga se puede enviar al punto final con:
Tenga en cuenta que la cabecera
Content-type
se establece enapplication/x-image
para indicar que la carga es una imagen.Alternativamente, si la imagen ya está cargada como una matriz numpy o una imagen PIL, se puede convertir en bytes con:
Luego, la carga se puede enviar al punto final como antes.