Hacer predicciones con modelos remotos en Vertex AI


En este tutorial, registrarás un endpoint de Vertex AI como modelo remoto en BigQuery. A continuación, usa la función ML.PREDICT para hacer predicciones con el modelo remoto.

Puedes usar modelos remotos cuando un modelo sea demasiado grande para importarlo a BigQuery. También son útiles cuando quieres tener un único punto de inferencia para los casos prácticos online, por lotes y por microlotes.

Objetivos

  • Importa un modelo de TensorFlow preentrenado al registro de modelos de Vertex AI.
  • Despliega el modelo en un endpoint de Vertex AI.
  • Crea una conexión de recursos de Cloud.
  • Usa la instrucción CREATE MODEL para crear un modelo remoto en BigQuery.
  • Usa la función ML.PREDICT para hacer predicciones con el modelo remoto.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the BigQuery, Vertex AI, Cloud Storage, and BigQuery Connection APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  6. Asegúrate de que tienes los permisos necesarios para realizar las tareas descritas en este documento.
  7. Roles obligatorios

    Si creas un proyecto, serás el propietario y se te concederán todos los permisos de gestión de identidades y accesos necesarios para completar este tutorial.

    Si usas un proyecto que ya tengas, haz lo siguiente.

    Make sure that you have the following role or roles on the project:

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Ir a IAM
    2. Selecciona el proyecto.
    3. Haz clic en Conceder acceso.
    4. En el campo Nuevos principales, introduce tu identificador de usuario. Normalmente, se trata de la dirección de correo de una cuenta de Google.

    5. En la lista Selecciona un rol, elige un rol.
    6. Para conceder más roles, haz clic en Añadir otro rol y añade cada rol adicional.
    7. Haz clic en Guardar.
    8. Para obtener más información sobre los permisos de gestión de identidades y accesos en BigQuery, consulta el artículo sobre los permisos de BigQuery.

      Importar el modelo al registro de modelos de Vertex AI

      En este tutorial, usarás un modelo de TensorFlow preentrenado que está disponible en Cloud Storage en gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/. El segmento de Cloud Storage se encuentra en la ubicación multirregional US.

      El modelo es un modelo de TensorFlow llamado saved_model.pb. Se trata de un modelo de análisis de sentimiento personalizado que se ha creado perfeccionando un modelo BERT con reseñas de películas de IMDb en texto sin formato. El modelo usa texto de las reseñas de películas y devuelve puntuaciones de sentimiento entre cero y uno. Cuando importas el modelo en Model Registry, usas un contenedor de TensorFlow precompilado.

      Sigue estos pasos para importar el modelo.

      1. En la Google Cloud consola, ve a la página Registro de modelos de Vertex AI.

        Ir a Registro de modelos

      2. Haz clic en Importar.

      3. En Paso 1: Nombre y región, haz lo siguiente:

        1. Selecciona Importar como modelo nuevo.

        2. En Nombre, escribe bert_sentiment.

        3. En Descripción, escriba BQML tutorial model.

        4. En Región, selecciona us-central1. Debes elegir una región de EE. UU. porque el segmento de Cloud Storage está en la ubicación multirregional US.

        5. Haz clic en Continuar.

      4. En el paso 2: Configuración del modelo, haga lo siguiente:

        1. Selecciona Importar artefactos del modelo a un contenedor predefinido nuevo.

        2. En la sección Configuración del contenedor precompilado, haga lo siguiente:

          1. En Framework del modelo, elige TensorFlow.

          2. En Versión del framework del modelo, elija 2.15.

          3. En Tipo de acelerador, elige GPU.

          4. En Ubicación del artefacto del modelo, introduce gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/.

          5. Deja los valores predeterminados de todas las opciones restantes y haz clic en Importar.

      Una vez que se haya completado la importación, el modelo aparecerá en la página Registro de modelos.

      Desplegar el modelo en un endpoint de Vertex AI

      Sigue estos pasos para implementar el modelo en un endpoint.

      1. En la consola, ve a la página Registro de modelos de Vertex AI. Google Cloud

        Ir a Registro de modelos

      2. En la columna Nombre, haga clic en bert_sentiment.

      3. Haz clic en la pestaña Implementar y probar.

      4. Haz clic en Implementar en endpoint.

      5. En el paso 1, Define tu endpoint, haz lo siguiente:

        1. Haz clic en Crear endpoint.

        2. En Endpoint name (Nombre del endpoint), introduce bert sentiment endpoint.

        3. Deja los valores predeterminados restantes y haz clic en Continuar.

      6. En el paso dos, Configuración del modelo, haga lo siguiente:

        1. En la sección Configuración de los recursos de computación, en Número mínimo de nodos de computación, introduce 1. Es el número de nodos que deben estar disponibles para el modelo en todo momento.

        2. En la sección Opciones avanzadas de escalado, en Tipo de máquina, elige Estándar (n1-standard-2). Como has elegido GPU como tipo de acelerador al importar el modelo, después de elegir el tipo de máquina, el tipo y el número de aceleradores se definen automáticamente.

        3. Deja los valores predeterminados restantes y haz clic en Desplegar.

          Cuando el modelo se despliega en el endpoint, el estado cambia a Active.

        4. Copia el ID de endpoint numérico de la columna ID y el valor de la columna Región. Los necesitarás más adelante.

      Crear conjunto de datos

      Crea un conjunto de datos de BigQuery para almacenar tu modelo de aprendizaje automático.

      Consola

      1. En la Google Cloud consola, ve a la página BigQuery.

        Ir a la página de BigQuery

      2. En el panel Explorador, haz clic en el nombre de tu proyecto.

      3. Haga clic en Ver acciones > Crear conjunto de datos.

      4. En la página Crear conjunto de datos, haz lo siguiente:

        • En ID del conjunto de datos, introduce bqml_tutorial.

        • En Tipo de ubicación, selecciona Multirregión y, a continuación, EE. UU. (varias regiones de Estados Unidos).

        • Deje el resto de los ajustes predeterminados como están y haga clic en Crear conjunto de datos.

      bq

      Para crear un conjunto de datos, usa el comando bq mk con la marca --location. Para ver una lista completa de los parámetros posibles, consulta la referencia del comando bq mk --dataset.

      1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos definida como US y la descripción BigQuery ML tutorial dataset:

        bq --location=US mk -d \
         --description "BigQuery ML tutorial dataset." \
         bqml_tutorial

        En lugar de usar la marca --dataset, el comando usa el acceso directo -d. Si omite -d y --dataset, el comando creará un conjunto de datos de forma predeterminada.

      2. Confirma que se ha creado el conjunto de datos:

        bq ls

      API

      Llama al método datasets.insert con un recurso de conjunto de datos definido.

      {
        "datasetReference": {
           "datasetId": "bqml_tutorial"
        }
      }

      BigQuery DataFrames

      Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de los DataFrames de BigQuery.

      Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.

      import google.cloud.bigquery
      
      bqclient = google.cloud.bigquery.Client()
      bqclient.create_dataset("bqml_tutorial", exists_ok=True)

      Crear una conexión de recursos de Cloud de BigQuery

      Debes tener una conexión de recursos de Cloud para conectarte a un endpoint de Vertex AI.

      Consola

      1. Ve a la página BigQuery.

        Ir a BigQuery

      2. En el panel Explorador, haz clic en Añadir datos.

        Se abrirá el cuadro de diálogo Añadir datos.

      3. En el panel Filtrar por, en la sección Tipo de fuente de datos, selecciona Bases de datos.

        También puede introducir Vertex AI en el campo Buscar fuentes de datos.

      4. En la sección Fuentes de datos destacadas, haga clic en Vertex AI.

      5. Haz clic en la tarjeta de solución Modelos de Vertex AI: federación de BigQuery.

      6. En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (recurso de Cloud).

      7. En el campo ID de conexión, introduce bqml_tutorial.

      8. Comprueba que esté seleccionada la opción Multirregión (EE. UU.).

      9. Haga clic en Crear conexión.

      10. En la parte inferior de la ventana, haz clic en Ir a la conexión. También puedes ir al panel Explorador, desplegar Conexiones externas y hacer clic en us.bqml_tutorial.

      11. En el panel Información de conexión, copia el ID de la cuenta de servicio. Necesitarás este ID cuando configures los permisos de la conexión. Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia a la conexión.

      bq

      1. Para crear una conexión, sigue estos pasos:

        bq mk --connection --location=US --project_id=PROJECT_ID \
            --connection_type=CLOUD_RESOURCE bqml_tutorial

        Sustituye PROJECT_ID por elGoogle Cloud ID de tu proyecto. El parámetro --project_id anula el proyecto predeterminado.

        Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia a la conexión.

        Solución de problemas: si aparece el siguiente error de conexión, actualiza el SDK de Google Cloud:

        Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
        
      2. Obtén y copia el ID de la cuenta de servicio para usarlo en un paso posterior:

        bq show --connection PROJECT_ID.us.bqml_tutorial

        El resultado debería ser similar al siguiente:

        name                          properties
        1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
        

      Configurar el acceso a la conexión

      Asigna el rol Usuario de Vertex AI a la cuenta de servicio de la conexión de recursos de Cloud. Debes conceder este rol en el mismo proyecto en el que has creado el endpoint del modelo remoto.

      Para conceder el rol, sigue estos pasos:

      1. Ve a la página IAM y administración.

        Ir a IAM y administración

      2. Haz clic en Conceder acceso.

      3. En el campo Nuevos principales, introduce el ID de cuenta de servicio de la conexión de recursos de Cloud que has copiado anteriormente.

      4. En el campo Selecciona un rol, elige Vertex AI y, a continuación, selecciona Usuario de Vertex AI.

      5. Haz clic en Guardar.

      Crear un modelo remoto de BigQuery ML

      Para crear un modelo remoto de BigQuery ML, debes usar la instrucción CREATE MODEL con la cláusula REMOTE WITH CONNECTION. Para obtener más información sobre la instrucción CREATE MODEL, consulte Instrucción CREATE MODEL para modelos remotos sobre modelos personalizados.

      Crea el modelo en la ubicación US multirregional. En un conjunto de datos multirregional de BigQuery (US, EU), solo puedes crear un modelo remoto que se conecte a un endpoint implementado en una región que esté en la misma ubicación multirregional (US, EU).

      Cuando crees el modelo remoto, necesitarás el ID del endpoint que se generó al desplegar el modelo en Vertex AI. Además, los nombres y los tipos de los campos de entrada y salida deben ser exactamente los mismos que los de entrada y salida del modelo de Vertex AI. En este ejemplo, la entrada es un texto STRING y la salida es un ARRAY de tipo FLOAT64.

      Consola

      1. En la Google Cloud consola, ve a la página BigQuery.

        Ir a BigQuery

      2. En Crear nuevo, haz clic en Consulta de SQL.

      3. En el editor de consultas, introduce esta instrucción CREATE MODEL y, a continuación, haz clic en Ejecutar:

        CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
        INPUT (text STRING)
        OUTPUT(scores ARRAY<FLOAT64>)
        REMOTE WITH CONNECTION `PROJECT_ID.us.bqml_tutorial`
        OPTIONS(ENDPOINT = 'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpoints/ENDPOINT_ID')

        Haz los cambios siguientes:

        • PROJECT_ID: el nombre de tu proyecto.
        • ENDPOINT_ID: el ID de endpoint que has copiado anteriormente.

        Cuando la operación se haya completado, verás un mensaje similar a este: Successfully created model named bert_sentiment.

        El nuevo modelo aparecerá en el panel Recursos. Los modelos se indican con el icono de modelo: model
icon.

        Si selecciona el nuevo modelo en el panel Recursos, la información sobre el modelo aparecerá debajo del Editor de consultas.

      bq

      1. Crea el modelo remoto introduciendo la siguiente CREATE MODEL declaración:

        bq query --use_legacy_sql=false \
        "CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
        INPUT (text STRING)
        OUTPUT(scores ARRAY<FLOAT64>)
        REMOTE WITH CONNECTION `PROJECT_ID.us.bqml_tutorial`
        OPTIONS(ENDPOINT = 'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpoints/ENDPOINT_ID')"

        Haz los cambios siguientes:

        • PROJECT_ID: el nombre de tu proyecto.
        • ENDPOINT_ID: el ID de endpoint que has copiado anteriormente.
      2. Después de crear el modelo, comprueba que aparece en el conjunto de datos:

        bq ls -m bqml_tutorial

        El resultado debería ser similar al siguiente:

        Id               Model Type   Labels    Creation Time
        ---------------- ------------ -------- -----------------
        bert_sentiment                         28 Jan 17:39:43

      Obtener predicciones con ML.PREDICT

      Usa la función ML.PREDICT para obtener predicciones de sentimiento del modelo remoto. La entrada es una columna de texto (review) que contiene reseñas de películas de la tabla bigquery-public-data.imdb.reviews.

      En este ejemplo, se seleccionan 10.000 registros y se envían para obtener una predicción. El modelo remoto tiene un tamaño de lote predeterminado de 128 instancias para las solicitudes.

      Consola

      1. En la Google Cloud consola, ve a la página BigQuery.

        Ir a BigQuery

      2. En la sección Crear nuevo, haz clic en Consulta de SQL.

      3. En el editor de consultas, introduce esta consulta que usa la función ML.PREDICT y, a continuación, haz clic en Ejecutar.

        SELECT *
        FROM ML.PREDICT (
            MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
            (
                SELECT review as text
                FROM `bigquery-public-data.imdb.reviews`
                LIMIT 10000
            )
        )

        Los resultados de la consulta deberían ser similares a los siguientes:

        Resultados de la consulta

      bq

      Introduce este comando para ejecutar la consulta que usa ML.PREDICT.

      bq query --use_legacy_sql=false \
      'SELECT *
      FROM ML.PREDICT (
      MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
        (
          SELECT review as text
          FROM `bigquery-public-data.imdb.reviews`
          LIMIT 10000
        )
      )'

      Limpieza

      Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

      Eliminar el proyecto

      Consola

      1. In the Google Cloud console, go to the Manage resources page.

        Go to Manage resources

      2. In the project list, select the project that you want to delete, and then click Delete.
      3. In the dialog, type the project ID, and then click Shut down to delete the project.

      gcloud

      1. In the Google Cloud console, go to the Manage resources page.

        Go to Manage resources

      2. In the project list, select the project that you want to delete, and then click Delete.
      3. In the dialog, type the project ID, and then click Shut down to delete the project.

      Eliminar recursos concretos

      Si lo prefieres, puedes eliminar los recursos utilizados en este tutorial:

      1. Elimina el modelo.

      2. Opcional: elimina el conjunto de datos.

      3. Anula el despliegue del modelo y elimina el endpoint.

      4. Eliminar el modelo del registro de modelos.

      5. Elimina la conexión del recurso de Cloud.

      Siguientes pasos