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.
- Predictor personalizado con preprocesamiento o postprocesamiento personalizado para Sklearn. Crea tu propio contenedor con el SDK de Vertex AI para Python.
- Implementa solo la carga de métodos de preprocesador, preprocesamiento y postprocesamiento serializados en Predictor. Hereda la carga predeterminada de modelos y el comportamiento de predicción de
SklearnPredictor
distribuido por Vertex AI.
- Implementa solo la carga de métodos de preprocesador, preprocesamiento y postprocesamiento serializados en Predictor. Hereda la carga predeterminada de modelos y el comportamiento de predicción de
- Predictor personalizado: crea tu propio contenedor con el SDK de Vertex AI para Python.
- Implementación personalizada de todo el predictor.
- Predictor y controlador personalizados: crea tu propio contenedor con el SDK de Vertex AI para Python.
- Implementación personalizada de Predictor y Handler.
- Al personalizar el controlador, el servidor de modelos puede gestionar las entradas de CSV.
- Predictor personalizado: crea tu propio contenedor con el SDK de Vertex AI para Python y PyTorch.
- Implementación personalizada de Predictor.
- Imagen ya creada, prueba la inferencia de forma local y despliega modelos con el SDK de Vertex AI para Python.
- Usa el servidor de inferencia NVIDIA Triton para modelos de PyTorch.