es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Recibiendo un error de análisis sintáctico del punto de conexión de modelos múltiples de SageMaker que utiliza TensorFlow.

Actualmente estamos transfiriendo nuestros modelos de endpoints de modelos individuales a endpoints de varios modelos dentro de AWS SageMaker. Después de implementar el Multi Model Endpoint utilizando contenedores pregenerados de TensorFlow, recibo el siguiente error al llamar al método predict():

{"error": "Error de análisis JSON: el documento raíz no debe ir seguido de otro valor en la posición 17"}

Invoco el endpoint de la siguiente manera:

data = np.random.rand(n_muestras, n_características)

predictor = Predictor(endpoint_name=nombre_endpoint)
prediction = predictor.predict(data=serializer.serialize(data), target_model=nombre_modelo)

Mi función para procesar la entrada es la siguiente:

def _process_input(data, context):
    data = data.read().decode('utf-8')
    data = [float(x) for x in data.split(',')]
    return json.dumps({'instancias': [data]})

Para el entrenamiento, configuré mi contenedor de la siguiente manera:

contenedor_tensorflow = TensorFlow(
    entry_point=ruta_script,
    framework_version='2.4',
    py_version='py37',
    instance_type='ml.m4.2xlarge',
    instance_count=1,
    role=ROL_EJECUCION,
    sagemaker_session=sagemaker_session,
    hyperparameters=hiperparametros)

contenedor_tensorflow.fit()

Para implementar el endpoint, primero inicializo un Modelo a partir de un Estimador dado y luego un MultiDataModel:

modelo = estimador.create_model(
            role=ROL_EJECUCION, 
            image_uri=estimador.training_image_uri(),
            entry_point=ruta_serving)

mdm = MultiDataModel(
        name=nombre_endpoint, 
        model_data_prefix=dir_model_data,
        model=modelo, 
        sagemaker_session=sagemaker.Session())

mdm.deploy(
        initial_instance_count=1, 
        instance_type=tipo_instancia,
        endpoint_name=nombre_endpoint)

Posteriormente, se agregan los modelos individuales utilizando:

mdm.add_model(
    model_data_source=source_path,
    model_data_path=model_name)

Gracias por cualquier sugerencia y ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error que estás recibiendo probablemente se debe a un formato JSON inválido en la respuesta del punto final. La función _process_input parece estar procesando la entrada correctamente, por lo que el problema puede estar en otro lugar.

    Una posibilidad es que la respuesta del punto final no esté en el formato JSON esperado. Puedes comprobar esto imprimiendo la respuesta y verificando si es JSON válido, utilizando el módulo json en Python o un validador en línea.

    Otra posibilidad es que haya un problema con el proceso de serialización/deserialización. En tu código, estás utilizando serializer.serialize() para serializar los datos de entrada antes de enviarlos al punto final, pero no está claro qué serializador estás utilizando. Puede que quieras verificar que el serializador que estás utilizando sea compatible con los contenedores de TensorFlow y esté serializando correctamente tus datos.

    Finalmente, es posible que haya un problema con el propio contenedor de TensorFlow. Puedes intentar ejecutar un código de prueba sencillo con el contenedor para ver si funciona correctamente, o intentar utilizar un contenedor diferente.

    ¡Espero que esto te ayude!

Comments are closed.