Rutinas de inferencia personalizadas

Las rutinas de inferencia personalizadas te permiten crear contenedores personalizados con código de preprocesamiento y postprocesamiento, sin tener que ocuparte de los detalles de la configuración de un servidor HTTP ni de la creación de un contenedor desde cero. Puedes usar el preprocesamiento para normalizar y transformar las entradas o hacer llamadas a servicios externos para obtener datos adicionales, y usar el postprocesamiento para dar formato a la inferencia del modelo o ejecutar la lógica empresarial.

En el siguiente diagrama se muestra el flujo de trabajo del usuario con y sin rutinas de inferencia personalizadas.

Las principales diferencias son las siguientes:

  • No es necesario que escribas un servidor de modelos ni un Dockerfile. El servidor de modelos, que es el servidor HTTP que aloja el modelo, se te proporciona.

  • Puedes desplegar y depurar el modelo de forma local, lo que acelera el ciclo de iteración durante el desarrollo.

Crear y desplegar un contenedor personalizado

En esta sección se describe cómo usar CPR para crear un contenedor personalizado con lógica de preprocesamiento y posprocesamiento, y cómo implementarlo en un endpoint local y en un endpoint online.

Configuración

Debes tener instalado Vertex AI SDK para Python y Docker en tu entorno.

Escribir una interfaz de inferencia Predictor personalizada

Implementa la interfaz Predictor.

Por ejemplo, consulta la implementación de Predictor de Sklearn.

Escribir Handler personalizado (opcional)

Los controladores personalizados tienen acceso al objeto de solicitud sin procesar y, por lo tanto, son útiles en casos excepcionales en los que necesitas personalizar la lógica relacionada con el servidor web, como admitir encabezados de solicitud y respuesta adicionales o deserializar solicitudes de inferencia con un formato que no sea JSON.

Aquí tienes un cuaderno de ejemplo que implementa Predictor y Handler.

Aunque no es obligatorio, para mejorar la organización y la reutilización del código, le recomendamos que implemente la lógica del servidor web en el controlador y la lógica de aprendizaje automático en el predictor, tal como se muestra en el controlador predeterminado.

Crear un contenedor personalizado

Coloca tu código personalizado y un archivo requirements.txt adicional, si necesitas instalar algún paquete en tus imágenes, en un directorio.

Usa el SDK de Vertex AI para Python para crear contenedores personalizados de la siguiente manera:

from google.cloud.aiplatform.prediction import LocalModel

# {import your predictor and handler}

local_model = LocalModel.build_cpr_model(
    {PATH_TO_THE_SOURCE_DIR},
    f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
    predictor={PREDICTOR_CLASS},
    handler={HANDLER_CLASS},
    requirements_path={PATH_TO_REQUIREMENTS_TXT},
)

Puedes inspeccionar la especificación del contenedor para obtener información útil, como el URI de la imagen y las variables de entorno.

local_model.get_serving_container_spec()

Ejecutar el contenedor de forma local (opcional)

Este paso solo es necesario si quieres ejecutar y probar el contenedor localmente, lo que resulta útil para acelerar la iteración. En el siguiente ejemplo, se implementa en un endpoint local y se envía una solicitud de inferencia (formato del cuerpo de la solicitud).

with local_model.deploy_to_local_endpoint(
    artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
    credential_path={PATH_TO_CREDENTIALS},
) as local_endpoint:
    health_check_response = local_endpoint.run_health_check()
    predict_response = local_endpoint.predict(
        request_file={PATH_TO_INPUT_FILE},
        headers={ANY_NEEDED_HEADERS},
    )

Imprime la comprobación del estado y la respuesta de inferencia.

print(health_check_response, health_check_response.content)
print(predict_response, predict_response.content)

Imprime todos los registros del contenedor.

local_endpoint.print_container_logs(show_all=True)

Subir al registro de modelos de Vertex AI

Tu modelo tendrá que acceder a los artefactos del modelo (los archivos del entrenamiento), así que asegúrate de haberlos subido a Google Cloud Storage.

Envía la imagen a Artifact Registry.

local_model.push_image()

A continuación, súbelo a Model Registry.

from google.cloud import aiplatform

model = aiplatform.Model.upload(
    local_model=local_model,
    display_name={MODEL_DISPLAY_NAME},
    artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
)

Una vez que hayas subido tu modelo a Model Registry, podrás usarlo para obtener inferencias por lotes o desplegarlo en un endpoint de Vertex AI para obtener inferencias online.

Desplegar en un endpoint de Vertex AI

endpoint = model.deploy(machine_type="n1-standard-4")

Una vez que hayas desplegado tu modelo, podrás obtener inferencias online.

Cuadernos de ejemplo

Los ejemplos muestran las diferentes formas en las que puedes desplegar un modelo con preprocesamiento y postprocesamiento personalizados mediante la inferencia de Vertex AI.