En este tutorial se muestra cómo obtener información valiosa a partir de grandes conjuntos de datos mediante BigQuery, Cloud Run y el LLM de Gemma. En este tutorial, desplegarás una aplicación de ejemplo en Google Kubernetes Engine (GKE). La aplicación de ejemplo usa BigQuery para almacenar y procesar datos, Cloud Run para gestionar solicitudes y el LLM Gemma para analizar datos y generar predicciones basadas en las peticiones entrantes.
Este tutorial está dirigido a administradores y arquitectos de plataformas en la nube, especialistas en datos e IA, ingenieros de aprendizaje automático y profesionales de MLOps (DevOps). Antes de leer esta página, asegúrate de que conoces Kubernetes y un entorno de cuaderno como Jupyter.
Antes de empezar este tutorial, debes completar el tutorial Servir modelos abiertos de Gemma con GPUs en GKE mediante Hugging Face TGI. El framework TGI facilita el proceso de servicio de modelos.
Ventajas de GKE y BigQuery
BigQuery es una plataforma como servicio (PaaS), un almacén de datos sin servidor totalmente gestionado que permite realizar análisis escalables de petabytes de datos. BigQuery te permite centrarte en analizar datos para obtener información valiosa mientras usas SQL y aprendizaje automático integrados.
Si usas GPUs en GKE con TGI, puedes desplegar un modelo de lenguaje Gemma para analizar y resumir las interacciones de los usuarios en lenguaje natural. Después, al integrar BigQuery con GKE, puedes usar BigQuery para gestionar de forma eficiente conjuntos de datos de gran tamaño (como Google Analytics) y las funciones de comprensión del lenguaje natural del modelo para generar estadísticas valiosas.
Por ejemplo, si eres científico o analista de datos, o bien una persona que toma decisiones empresariales en una empresa de comercio electrónico, puede que quieras conocer el comportamiento de los usuarios en tu sitio web o aplicación. Esta información puede ayudarte a optimizar y personalizar los recorridos de los usuarios, así como a tomar decisiones empresariales fundamentadas para aumentar las ventas.
En este caso, podrías tomar datos sin procesar de Google Analytics de BigQuery, proporcionárselos al modelo Gemma y recibir resúmenes e información valiosa sobre las visitas a las páginas en lenguaje natural. El modelo de Gemma, que se ejecuta en una infraestructura escalable con aceleración de GPU de GKE, procesa rápidamente los datos del recorrido del usuario, identificando patrones y tendencias. Podrías obtener información valiosa para identificar combinaciones de productos populares, descubrir los puntos de abandono habituales en el proceso de compra y destacar las campañas de marketing eficaces que dirigen tráfico a páginas de destino específicas.
Ventajas
Esta solución ofrece un flujo de trabajo optimizado con las siguientes ventajas:
- Integración con BigQuery: usa BigQuery para almacenar y procesar grandes conjuntos de datos (como los datos de Google Analytics de este tutorial). Esto le permite consultar y agregar los datos necesarios para el análisis del modelo.
- Aceleración de GPU: ejecuta el modelo Gemma en un clúster de GKE con compatibilidad con GPU para acelerar el proceso de inferencia y generar predicciones mucho más rápido que con los procesadores basados en CPU.
- Reducción de costes y tiempo: ahorra tiempo y recursos usando el modelo de lenguaje Gemma preentrenado de código abierto, lo que elimina la necesidad de crear un modelo personalizado desde cero.
Objetivos
En este tutorial, aprenderás a hacer lo siguiente:
- Implementa el modelo y exponlo: crea un archivo YAML de servicio para definir un balanceador de carga interno que permita acceder al modelo Gemma.
- Crea una función remota de BigQuery: ejecuta código de Python para definir una función remota que tome datos de Google Analytics, cree peticiones para el modelo, envíe solicitudes al endpoint del modelo mediante el balanceador de carga y devuelva la respuesta del modelo.
- Configura la red de nube privada virtual (VPC): configura una red de VPC y un conector de VPC para habilitar la comunicación segura entre BigQuery y el clúster de GKE. Esto es fundamental para que la función remota acceda al endpoint del modelo.
- Analizar datos: analiza los datos con DataFrames de BigQuery o directamente en SQL mediante la herramienta de línea de comandos
bq
. Ejecuta los fragmentos de código proporcionados en un cuaderno de Colab Enterprise para:- Consultar datos de Google Analytics de BigQuery con SQL.
- Aplica la función remota a los datos para generar estadísticas a partir del modelo de Gemma.
- Muestra los resultados.
Arquitectura
En el siguiente diagrama de arquitectura se muestran los componentes implicados y cómo interactúan:
- Usa un cuaderno de Colab Enterprise para ejecutar tu código Python. Con Python, puedes usar la biblioteca bigframes para simplificar tus interacciones con SQL.
- BigQuery actúa como motor de procesamiento de Big Data, lo que permite usar SQL para interactuar con los datos.
- La función remota invoca una función de Cloud Run. Los datos se enrutan automáticamente a la función remota, donde se preparan y se envían a GKE para la inferencia.
- Los resultados se envían de nuevo a BigQuery y se muestran en una tabla.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
- Compute Engine instances used by GKE
- GPU resources used by GKE
- BigQuery
- Cloud Load Balancing
- Cloud Run functions
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
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
Asegúrate de cumplir los siguientes requisitos previos:
Seleccionar o crear un proyecto
Puedes usar un proyecto que ya tengas o crear uno para este tutorial.
- 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.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
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.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
-
In the Google Cloud console, go to the IAM page.
Ir a IAM - Selecciona el proyecto.
- Haz clic en Conceder acceso.
-
En el campo Nuevos principales, introduce tu identificador de usuario. Normalmente, se trata de la dirección de correo de una cuenta de Google.
- En la lista Selecciona un rol, elige un rol.
- Para conceder más roles, haz clic en Añadir otro rol y añade cada rol adicional.
- Haz clic en Guardar.
- Sustituye
PROJECT_ID
por el ID del proyecto. - Sustituye
PROJECT_NUMBER
por el número de tu proyecto para crear el dominio de la cuenta de servicio predeterminada de Compute Engine de tu proyecto. Por ejemplo,123456789012-compute@developer.gserviceaccount.com
. - Sustituye
ROLE
por cada rol individual. Crea el siguiente archivo de manifiesto
tgi-2b-lb-service.yaml
:apiVersion: v1 kind: Service metadata: name: llm-lb-service annotations: networking.gke.io/load-balancer-type: "Internal" spec: selector: app: gemma-server type: LoadBalancer ports: - protocol: TCP port: 8000 targetPort: 8000
Abre un nuevo terminal de Cloud Shell y ejecuta el siguiente comando para aplicar el manifiesto:
kubectl apply -f tgi-2b-lb-service.yaml
Obtén la dirección IP del balanceador de carga. Es posible que tengas que esperar entre 1 y 2 minutos para que se pueda obtener esta dirección IP:
kubectl get service llm-lb-service --output yaml | grep ip:
En la consola, ve a la página Notebooks de Colab Enterprise: Google Cloud
En el menú Región, selecciona
us-central1
. Es la misma región en la que crearás todos los servicios de este tutorial.Junto a Archivos, haz clic en Crear cuaderno.
- Haz clic en + Código para insertar una celda de código.
Copia el siguiente código en la nueva celda de código:
# Install the necessary packages on the notebook runtime %pip install --upgrade bigframes --quiet import bigframes.pandas as bpd import os import ast import requests # Replace the following variables # Use the format ip:port # For example, "10.128.05:8000" lb_url = "LOADBALANCER_IP_ADDRESS:8000" # Set BigQuery DataFrames options bpd.options.bigquery.project = "PROJECT_ID" bpd.options.bigquery.location = "US" # Update the VPC connector name with the one you created vpc_connector_name = "VPC_CONNECTOR_NAME" # Create a remote function using bigframes # https://cloud.google.com/bigquery/docs/remote-functions#bigquery-dataframes @bpd.remote_function( dataset="ga_demo", name="ga_explain_example", bigquery_connection="bigframes-rf-conn", reuse=True, packages=["requests"], cloud_function_vpc_connector=VPC_CONNECTOR_NAME, cloud_function_service_account="default", ) def process_incoming(data: str) -> str: ga_data = ast.literal_eval(data) USER_PROMPT = """ 'The following are the results from Google Analytics. They are reverse ranked. reverse_event_number 1 is the last page visited. reverse_event_number 2 is the second last page visited. You are given the following data. {} Can you summarize what was the most popular page people landed on and what page they came from? """.format(ga_data) url = 'http://{}/generate'.format(lb_url) myobj = { "inputs": USER_PROMPT, "temperature": 0.90, "top_p": 0.95, "max_tokens": 2048 } x = requests.post(url, json=myobj) result = x.text return (result) function_name = process_incoming.bigframes_remote_function print (f"The function name is: {function_name}")
Haz los cambios siguientes:
LOADBALANCER_IP_ADDRESS
: la dirección IP y el puerto del balanceador de carga interno que has creado anteriormente, por ejemplo,10.128.05:8000
.PROJECT_ID
: tu ID de proyecto.VPC_CONNECTOR_NAME
: el nombre del conector de Acceso a VPC sin servidor que has creado anteriormente.
En este tutorial, la ubicación del conjunto de datos de BigQuery es
US
, que tiene como valor predeterminado la regiónus-central1
.Haz clic en
Ejecutar celda.- Usar BigQuery DataFrames
- Usar la herramienta de línea de comandos
bq
para ejecutar una consulta directamente en SQL. - Haz clic en + Código para insertar una celda de código.
- Copia el siguiente código en la nueva celda de código y haz clic en Ejecutar celda.
- Haz clic en + Código para insertar una celda de código.
Copia el siguiente código en la nueva celda de código y sustituye
PROJECT_ID
por el ID de tu proyecto.# Update with your PROJECT_ID function_name = 'PROJECT_ID.ga_demo.ga_explain_example' new_sql = """'with \ data_table as ( \ SELECT \ distinct \ user_pseudo_id, \ events.value.string_value, \ event_timestamp, \ rank() over (partition by user_pseudo_id order by event_timestamp desc) as reverse_event_number \ FROM \ `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210131` as events20210131, \ unnest (events20210131.event_params) as events \ where events.key = "page_location" \ qualify reverse_event_number < 3 \ ) \ select \ *, `{}`(TO_JSON_STRING (data_table)) as result \ from data_table \ limit 10;' \ """.format(function_name) # Run query using bq cli directly in a notebook cell !bq query --use_legacy_sql=false \ {new_sql}
Haz clic en
Ejecutar celda.- Elimina tu cuaderno de Colab Enterprise.
- Elimina tu entorno de ejecución de Colab Enterprise.
- Elimina tu función de BigQuery.
Asegúrate de que tu cuenta de servicio tenga el permiso
bigquery.routines.delete
. Para obtener más información, consulta Permisos de BigQuery. - Elimine su conexión externa de BigQuery.
- Elimina tus funciones de Cloud Run.
- Elimina el clúster de GKE.
- Elimina tu conector de VPC.
- Prueba un codelab práctico para ver un caso práctico de análisis de datos estructurados y sin estructurar.
- Consulta las prácticas recomendadas para ejecutar cargas de trabajo por lotes en GKE.
- Consulta más información sobre los casos prácticos de IA/ML en BigQuery.
- Consulta más información sobre los casos prácticos de IA y aprendizaje automático en GKE.
Habilitar las APIs
Enable the Artifact Registry, Compute Engine, GKE, IAM Service Account Credentials, Cloud Functions, Cloud Build, Cloud Run Admin, Cloud Logging, Serverless VPC Access, BigQuery, Dataform, Vertex AI 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.
Configurar Cloud Shell
En este tutorial, usarás Cloud Shell para ejecutar comandos gcloud
y kubectl
. Cloud Shell es un entorno de shell para gestionar recursos alojados en Google Cloud. Viene preinstalado con la CLI de Google Cloud y la herramienta de línea de comandos kubectl.
In the Google Cloud console, activate Cloud Shell.
Se abrirá una sesión de Cloud Shell en un marco de la parte inferior de la consola.
Antes de ejecutar los comandos de este tutorial, asegúrate de que el proyecto predeterminado sea el ID del proyecto en el que quieras desplegar la aplicación de ejemplo. Si aún no lo has hecho, ejecuta el siguiente comando en Cloud Shell:
gcloud config set project PROJECT_ID
Sustituye PROJECT_ID
por el ID de tu proyecto.
Otorgar roles de gestión de identidades y accesos
Asegúrate de que tu cuenta de usuario y la cuenta de servicio predeterminada de Compute Engine de tu proyecto tengan los roles de gestión de identidades y accesos (IAM) necesarios para este tutorial.
Make sure that you have the following role or roles on the project: roles/aiplatform.colabEnterpriseAdmin, roles/run.invoker, roles/container.admin, roles/iam.serviceAccountAdmin, roles/logging.logWriter
Check for the roles
Grant the roles
Concede roles a tu cuenta de servicio predeterminada de Compute Engine. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de gestión de identidades y accesos: roles/logging.logWriter, roles/artifactregistry.writer, roles/storage.objectViewer
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=ROLE
Servir un modelo de Gemma
Ve al tutorial Servir modelos abiertos de Gemma con GPUs en GKE con Hugging Face TGI y sigue las instrucciones desde Antes de empezar hasta Interactuar con el modelo mediante curl para asegurarte de que tu modelo de Gemma se ha desplegado correctamente y puedes interactuar con él.
En este tutorial, vamos a desplegar el modelo Gemma 2B-it.
Configurar una red de VPC
Crea o usa la red de VPC
en la región us-central1
para que tu función remota pueda conectarse al clúster de GKE.
En este tutorial, usa la VPC Default
.
Para asegurarte de que tu conjunto de datos de BigQuery, tu función remota y las funciones de Cloud Run subyacentes se implementen en ubicaciones compatibles, la red VPC debe estar en la misma región que tu función remota de BigQuery.
En este tutorial, cuando configures las opciones de DataFrame de BigQuery al crear una función remota, especificarás US
como ubicación de tu conjunto de datos, que tiene como valor predeterminado la región us-central1
de tus funciones de Cloud Run. Por lo tanto, crea o usa la VPC en la región us-central1
.
Crear un balanceador de carga
Sigue estas instrucciones para crear un balanceador de carga interno en tu clúster de GKE:
Usarás esta dirección IP para comunicarte con tu aplicación gemma-server
, que se ejecuta detrás del balanceador de carga.
Crear conector
Puedes usar un conector de acceso a VPC sin servidor para enviar y recibir solicitudes a través de tu red de VPC sin usar la red de Internet pública. Para obtener más información, consulta Acceso a VPC sin servidor.
En este tutorial, crearás un conector con una subred nueva y específica para evitar conflictos de direcciones IP con los recursos de la VPC. Para obtener instrucciones, consulta la sección Crear un conector y sigue las instrucciones de gcloud
para la sección Crear un conector y una subred.
Si quieres usar una subred que ya tengas, sigue las instrucciones de la sección Crear un conector con una subred que ya tengas.
Para obtener más información, consulta los requisitos de la subred del conector.
Crear un cuaderno
En este tutorial, usarás un cuaderno de Colab Enterprise para ejecutar todo el código necesario para definir la función remota de BigQuery y realizar el análisis.
Para crear un cuaderno de Colab Enterprise con la Google Cloud consola, sigue estos pasos:
El nuevo cuaderno aparecerá en la pestaña Mis cuadernos.
Para ejecutar código en tu nuevo cuaderno, inserta una celda de código nueva en el cuaderno por cada comando o fragmento de código que quieras ejecutar.
Crear una función remota de BigQuery
Una de las formas de definir una función remota de BigQuery es usar la biblioteca bigframes
. En esta sección, usa bigframes
para crear una función remota
llamada process_incoming
. Esta función remota toma datos de Google Analytics como entrada, crea una petición y la envía a tu modelo de Gemma para que la analice.
En el cuaderno de Colab Enterprise que has creado, haz lo siguiente:
La salida muestra el nombre de la función, que es similar al siguiente:
The function name is: PROJECT_ID.ga_demo.ga_explain_example
Analizar el comportamiento de los usuarios
En esta sección, analizará el comportamiento de los usuarios en su sitio web mediante la función process_incoming
remota de una de las dos formas siguientes:
Usar BigQuery DataFrames
Para ejecutar la función remota con BigQuery DataFrames en el cuaderno de Colab Enterprise que has creado, sigue estos pasos:
# Generate a list of all matchups and their histories as a JSON
grouping_sql = """
with
data_table as (
SELECT
distinct
user_pseudo_id,
events.value.string_value,
event_timestamp,
rank() over (partition by user_pseudo_id order by event_timestamp desc) as reverse_event_number
FROM
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210131` as events20210131,
unnest (events20210131.event_params) as events
where events.key = 'page_location'
qualify reverse_event_number < 3
)
select
*,TO_JSON_STRING (data_table) as ga_history
from data_table
limit 10;
"""
ga_df = bpd.read_gbq(grouping_sql)
post_processed = ga_df.assign(results=ga_df['ga_history'].apply(process_incoming),axis=1)
post_processed.head(10)
En el siguiente resultado se muestran los resultados de ejemplo de la consulta:
user_pseudo_id | string_value | event_timestamp | reverse_event_number | ga_history | resultados | eje |
---|---|---|---|---|---|---|
0 | 2342103247.0307162928 | https://shop.googlemerchandisestore.com/Google... | 1612096237169825 | 2 | {"user_pseudo_id":"2342103247.0307162928","str... | {"generated_text":"\n 'The following are... |
1 | 48976087.6959390698 | https://www.googlemerchandisestore.com/ | 1612056537823270 | 2 | {"user_pseudo_id":"48976087.6959390698","strin... | {"generated_text":"\n \n ```python\n imp... |
Usar la herramienta de línea de comandos bq
También puedes usar la herramienta de línea de comandos bq
para hacer análisis directamente con SQL.
Para ejecutar la función remota con la herramienta de línea de comandos bq
en el cuaderno de Colab Enterprise que has creado, sigue estos pasos:
En el siguiente resultado se muestran los resultados de ejemplo de la consulta:
user_pseudo_id | string_value | event_timestamp | reverse_event_number | result |
---|---|---|---|---|
86037838.0267811614 | https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee | 1612128627715585 | 1 | {"generated_text":"Respuesta:\n La página más popular fue https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee\n La siguiente página más popular fue la página de la que procedía.\n\n Explicación:\n\nLos datos proporcionados muestran que el usuario actual visitó la tienda de merchandising de Google específicamente para ver el producto "Google Dino Game Tee". \n \nConsideraciones importantes:\n\n* Interpretación de los datos: no puedes afirmar con certeza que el"} |
4024190.3037653934 | https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Black+Cloud+Zip+Hoodie | 1612085948486438 | 1 | {"generated_text":"\n ```python\n import pandas as pd\n\n data = {'user_pseudo_id': ['4024190.3037653934', '4024190.3037653934', '4024190.3037653934'],\n 'string_value': ['https://shop.googlemerchandisestore.com"} |
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.
Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en este tutorial, elimina los recursos.