Hacer predicciones con modelos importados de TensorFlow


En este tutorial, importarás modelos de TensorFlow a un conjunto de datos de BigQuery ML. Después, usas una consulta de SQL para hacer predicciones a partir de los modelos importados.

Objetivos

  • Usa la instrucción CREATE MODEL para importar modelos de TensorFlow a BigQuery ML.
  • Usa la función ML.PREDICT para hacer predicciones con los modelos de TensorFlow importados.

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. Compruebe que la API de BigQuery esté habilitada.

    Habilitar la API

  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 (IAM) necesarios para completar este tutorial.

    Si usas un proyecto, el rol Administrador de BigQuery Studio (roles/bigquery.studioAdmin) te concede todos los permisos necesarios para completar este tutorial.

    Make sure that you have the following role or roles on the project: BigQuery Studio Admin (roles/bigquery.studioAdmin).

    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.

      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)

      Importar un modelo de TensorFlow

      En los siguientes pasos se muestra cómo importar un modelo de Cloud Storage. La ruta al modelo es gs://cloud-training-demos/txtclass/export/exporter/1549825580/*. El nombre del modelo importado es imported_tf_model.

      Ten en cuenta que el URI de Cloud Storage termina en un carácter comodín (*). Este carácter indica que BigQuery ML debe importar cualquier recurso asociado al modelo.

      El modelo importado es un modelo de clasificador de texto de TensorFlow que predice qué sitio web ha publicado un título de artículo determinado.

      Para importar el modelo de TensorFlow en tu conjunto de datos, sigue estos pasos.

      Consola

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

        Ir a la página de 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 `bqml_tutorial.imported_tf_model`
          OPTIONS (MODEL_TYPE='TENSORFLOW',
            MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')

        Cuando la operación se haya completado, debería aparecer un mensaje como el siguiente: Successfully created model named imported_tf_model.

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

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

        Información del modelo de TensorFlow

      bq

      1. Importa el modelo de TensorFlow de Cloud Storage introduciendo la siguiente instrucción CREATE MODEL.

        bq query --use_legacy_sql=false \
        "CREATE OR REPLACE MODEL
          `bqml_tutorial.imported_tf_model`
        OPTIONS
          (MODEL_TYPE='TENSORFLOW',
            MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"
      2. Después de importar el modelo, comprueba que aparece en el conjunto de datos.

        bq ls bqml_tutorial

        El resultado debería ser similar al siguiente:

        tableId             Type
        ------------------- -------
        imported_tf_model   MODEL

      API

      Inserta un nuevo empleo y rellena la propiedad jobs#configuration.query en el cuerpo de la solicitud.

      {
        "query": "CREATE MODEL `PROJECT_ID:bqml_tutorial.imported_tf_model` OPTIONS(MODEL_TYPE='TENSORFLOW' MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"
      }

      Sustituye PROJECT_ID por el nombre de tu proyecto y del conjunto de datos.

      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.

      Importa el modelo mediante el objeto TensorFlowModel.

      import bigframes
      from bigframes.ml.imported import TensorFlowModel
      
      bigframes.options.bigquery.project = PROJECT_ID
      # You can change the location to one of the valid locations: https://cloud.google.com/bigquery/docs/locations#supported_locations
      bigframes.options.bigquery.location = "US"
      
      imported_tensorflow_model = TensorFlowModel(
          model_path="gs://cloud-training-demos/txtclass/export/exporter/1549825580/*"
      )

      Para obtener más información sobre cómo importar modelos de TensorFlow en BigQuery ML, incluidos los requisitos de formato y almacenamiento, consulta la instrucción CREATE MODELpara importar modelos de TensorFlow.

      Hacer predicciones con el modelo de TensorFlow importado

      Después de importar el modelo de TensorFlow, usa la función ML.PREDICT para hacer predicciones con el modelo.

      La siguiente consulta usa imported_tf_model para hacer predicciones con datos de entrada de la tabla full del conjunto de datos público hacker_news. En la consulta, la función serving_input_fn del modelo de TensorFlow especifica que el modelo espera una sola cadena de entrada llamada input. La subconsulta asigna el alias input a la columna title de la instrucción SELECT de la subconsulta.

      Para hacer predicciones con el modelo de TensorFlow importado, sigue estos pasos.

      Consola

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

        Ir a la página de BigQuery

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

      3. En el editor de consultas, introduce esta consulta que usa la función ML.PREDICT.

        SELECT *
          FROM ML.PREDICT(MODEL `bqml_tutorial.imported_tf_model`,
            (
             SELECT title AS input
             FROM bigquery-public-data.hacker_news.full
            )
        )

        Los resultados de la consulta deberían tener este aspecto:

        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 `bqml_tutorial.imported_tf_model`,
        (SELECT title AS input FROM `bigquery-public-data.hacker_news.full`))'

      El resultado será similar a:

      +------------------------------------------------------------------------+----------------------------------------------------------------------------------+
      |                               dense_1                                  |                                       input                                      |
      +------------------------------------------------------------------------+----------------------------------------------------------------------------------+
      |   ["0.6251608729362488","0.2989124357700348","0.07592673599720001"]    | How Red Hat Decides Which Open Source Companies t...                             |
      |   ["0.014276246540248394","0.972910463809967","0.01281337533146143"]   | Ask HN: Toronto/GTA mastermind around side income for big corp. dev?             |
      |   ["0.9821603298187256","1.8601855117594823E-5","0.01782100833952427"] | Ask HN: What are good resources on strategy and decision making for your career? |
      |   ["0.8611106276512146","0.06648492068052292","0.07240450382232666"]   | Forget about promises, use harvests                                              |
      +------------------------------------------------------------------------+----------------------------------------------------------------------------------+
      

      API

      Inserta un nuevo empleo y rellena la propiedad jobs#configuration.query como en el cuerpo de la solicitud. Sustituye project_id por el nombre de tu proyecto.

      {
        "query": "SELECT * FROM ML.PREDICT(MODEL `project_id.bqml_tutorial.imported_tf_model`, (SELECT * FROM input_data))"
      }

      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.

      Usa la función predict para ejecutar el modelo remoto:

      import bigframes.pandas as bpd
      
      df = bpd.read_gbq("bigquery-public-data.hacker_news.full")
      df_pred = df.rename(columns={"title": "input"})
      predictions = imported_tensorflow_model.predict(df_pred)
      predictions.head(5)

      El resultado será similar a:

      Result_visualization

      En los resultados de la consulta, la columna dense_1 contiene una matriz de valores de probabilidad y la columna input contiene los valores de cadena correspondientes de la tabla de entrada. Cada valor de elemento de la matriz representa la probabilidad de que la cadena de entrada correspondiente sea el título de un artículo de una publicación concreta.

      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

      También puedes eliminar los recursos utilizados en este tutorial:

      1. Elimina el modelo importado.

      2. Opcional: elimina el conjunto de datos.

      Siguientes pasos