Entrenamiento personalizado de Hello: Entrega predicciones desde un modelo de clasificación de imágenes personalizado

En esta página, se explica cómo entregar predicciones de tu modelo de clasificación de imágenes y ver estas predicciones en una aplicación web.

Este documento es parte del instructivo “entrenamiento personalizado de Hello”, que te guía a través del uso de Vertex AI para entrenar un modelo de clasificación de imágenes y entregar predicciones mediante el modelo. En este instructivo, usarás la función de entrenamiento personalizado de Vertex AI para ejecutar una aplicación de entrenamiento de Keras de TensorFlow en uno de los entornos de contenedores prediseñados de Vertex AI. Este trabajo de entrenamiento personalizado entrena un modelo de aprendizaje automático (AA) para clasificar imágenes de flores según su tipo. Después de entrenar el modelo de AA, en el instructivo se muestra cómo crear un extremo y entregar predicciones de ese extremo a una aplicación web simple.

En este instructivo, se incluyen las siguientes páginas:

  1. Configura tu proyecto y tu entorno.

  2. Entrena un modelo de clasificación de imágenes personalizada.

  3. Entrega predicciones desde un modelo de clasificación de imágenes personalizadas.

  4. Limpia tu proyecto.

En cada página, se supone que ya realizaste las instrucciones de las páginas anteriores del instructivo.

En el resto de este documento, se supone que usas el mismo entorno de Cloud Shell que creaste cuando sigues la primera página de este instructivo. Si tu sesión original de Cloud Shell ya no está abierta, puedes volver al entorno de la siguiente manera:

  1. En Cloud Console, activa Cloud Shell.

    Activar Cloud Shell

  2. En la sesión de Cloud Shell, ejecuta el siguiente comando:

    cd hello-custom-sample
    

1. Crear un extremo

Para obtener predicciones en línea del modelo de AA que entrenaste cuando seguiste la página anterior de este instructivo, crea un extremo de Vertex AI. Los extremos entregan predicciones en línea de uno o más modelos.

  1. En Google Cloud Console, en la sección Vertex AI, ve a la página Modelos.

    Ir a los modelos

  2. Busca la fila del modelo que entrenaste en el paso anterior de este instructivo, hello_custom, y haz clic en el nombre del modelo para abrir la página de detalles del modelo.

  3. En la pestaña Implementar y probar, haz clic en Implementar en el extremo para abrir el panel Implementar en el extremo.

  4. En el paso Definir el extremo, agrega información básica para el extremo:

    1. Selecciona Crear extremo nuevo.

    2. En el campo Nombre del extremo, ingresa hello_custom.

    3. En la sección Configuración del modelo, asegúrate de ver el nombre del modelo, que también se llama hello_custom. Especifica la siguiente configuración del modelo:

      1. En el campo División del tráfico, ingresa 100. Vertex AI admite la división del tráfico de un extremo en varios modelos, pero en este instructivo no se usa esa función.

      2. En el campo Cantidad mínima de nodos de procesamiento, ingresa 1.

      3. En la lista desplegable Tipo de máquina, selecciona n1-standard-2 de la sección Estándar.

      4. Haga clic en Listo.

    4. En la sección Registro, asegúrate de que ambos tipos de registro de predicción estén habilitados.

    Haz clic en Continuar.

  5. En el paso Detalles del extremo, confirma que el extremo se implementará en us-central1 (Iowa).

    No selecciones la casilla de verificación Usar una clave de encriptación administrada por el cliente (CMEK). En este instructivo, no se usa CMEK.

  6. Haz clic en Implementar para crear el extremo y, luego, implementa el modelo en el extremo.

Después de unos minutos, aparecerá junto al extremo nuevo en la tabla Extremos. Al mismo tiempo, también recibirás un correo electrónico que indica que creaste el extremo y que implementaste tu modelo en el extremo.

2. Implementa una Cloud Function

Puedes obtener predicciones desde el extremo de Vertex AI que acabas de crear mediante el envío de solicitudes a la interfaz de la API de REST de Vertex AI. Sin embargo, solo los principales con el permiso aiplatform.endpoints.predict pueden enviar solicitudes de predicción en línea. No puedes hacer que el extremo sea público para que nadie envíe solicitudes, por ejemplo, a través de una aplicación web.

En esta sección, implementa código en Cloud Functions para administrar las solicitudes no autenticadas. El código de muestra que descargaste cuando leiste la primera página de este instructivo contiene el código de esta función de Cloud Functions en el directorio function/. De manera opcional, ejecuta el siguiente comando para explorar el código de Cloud Functions:

less function/main.py

Implementa la función tiene los siguientes fines:

  • Puedes configurar una Cloud Function para recibir solicitudes sin autenticar. Además, las funciones se ejecutan mediante una cuenta de servicio con la función de editor de forma predeterminada, que incluye el permiso aiplatform.endpoints.predict necesario para obtener predicciones de tu extremo de Vertex AI.

  • Esta función también realiza un procesamiento previo útil en las solicitudes. El extremo de Vertex IA espera solicitudes de predicción en el formato de la primera capa del grafo de TensorFlow Keras entrenado: un tensor de números de punto flotante normalizados con dimensiones fijas. La función toma la URL de una imagen como entrada y la procesa previamente en este formato antes de solicitar una predicción del extremo de Vertex AI.

Para implementar la Cloud Function, haz lo siguiente:

  1. En Google Cloud Console, en la sección Vertex AI, ve a la página Extremos.

    Ir a Endpoints

  2. Busca la fila del extremo que creaste en la sección anterior, llamada hello_custom. En esta fila, haz clic en Solicitud de muestra para abrir el panel Solicitud de muestra.

  3. En el panel Solicitud de muestra, busca la línea de código de shell que coincide con el siguiente patrón:

    ENDPOINT_ID="ENDPOINT_ID"
    

    ENDPOINT_ID es un número que identifica este extremo en particular.

    Copia esta línea de código y ejecútala en tu sesión de Cloud Shell para configurar la variable ENDPOINT_ID.

  4. Ejecuta el siguiente comando en tu sesión de Cloud Shell para implementar la Cloud Function:

    gcloud functions deploy classify_flower \
      --region=us-central1 \
      --source=function \
      --runtime=python37 \
      --memory=2048MB \
      --trigger-http \
      --allow-unauthenticated \
      --set-env-vars=ENDPOINT_ID=${ENDPOINT_ID}
    

3. Implementa una aplicación web para enviar solicitudes de predicción

Por último, aloja una aplicación web estática en Cloud Storage para obtener predicciones de tu modelo de AA entrenado. La aplicación web envía solicitudes a tu función de Cloud Functions, que las procesa con anterioridad y obtiene predicciones del extremo de Vertex AI.

El directorio webapp del código de muestra que descargaste contiene una aplicación web de muestra. En tu sesión de Cloud Shell, ejecuta los siguientes comandos para preparar e implementar la aplicación web:

  1. Configura algunas variables de shell para los comandos en los siguientes pasos a fin de poder usarlas:

    PROJECT_ID=PROJECT_ID
    BUCKET_NAME=BUCKET_NAME
    

    Reemplaza lo siguiente:

  2. Edita la app para proporcionarle la URL de activación de tu función de Cloud Functions:

    echo "export const CLOUD_FUNCTION_URL = 'https://us-central1-${PROJECT_ID}.cloudfunctions.net/classify_flower';" \
      > webapp/function-url.js
    
  3. Sube el directorio webapp a tu bucket de Cloud Storage:

    gsutil -m cp -r webapp gs://${BUCKET_NAME}/
    
  4. Haz que los archivos de la aplicación web que acabas de subir legibles de forma pública:

    gsutil -m acl ch -u AllUsers:R gs://${BUCKET_NAME}/webapp/**
    
  5. Ahora puedes navegar a la siguiente URL para abrir la aplicación web y obtener predicciones:

    https://storage.googleapis.com/BUCKET_NAME/webapp/index.html
    

    Abre la aplicación web y haz clic en una imagen de una flores para ver la clasificación de tu modelo de AA del tipo de flores. La aplicación web presenta la predicción como una lista de tipos de flores y la probabilidad de que la imagen contenga cada tipo de flores.

En la siguiente captura de pantalla, la aplicación web ya tiene una predicción y está en proceso de enviar otra solicitud de predicción.

Aplicación web con cuatro imágenes etiquetadas de flores. Una tiene probabilidades de etiquetas de predicción debajo. Otra tiene una barra de carga debajo.

¿Qué sigue?

Sigue las indicaciones de la última página del instructivo para limpiar los recursos que creaste.