En este instructivo, se muestra cómo obtener estadísticas de conjuntos de datos grandes con BigQuery, Cloud Run, y el LLM de Gemma. En este instructivo, implementarás una aplicación de ejemplo en Google Kubernetes Engine (GKE). La app de ejemplo aprovecha BigQuery para el almacenamiento y el procesamiento de datos, Cloud Run para el manejo de solicitudes y el LLM de Gemma para analizar datos y generar predicciones basadas en instrucciones entrantes.
Este instructivo está dirigido a administradores y arquitectos de plataformas de nube, especialistas en datos y AA, ingenieros de AA, y profesionales de MLOps (DevOps). Antes de leer esta página, asegúrate de estar familiarizado con Kubernetes y un entorno de notebook como Jupyter.
Como requisito previo para este instructivo, debes completar el instructivo Entrega modelos abiertos de Gemma con GPUs en GKE con Hugging Face TGI. El framework de TGI facilita el proceso de entrega del modelo.
Por qué GKE y BigQuery
BigQuery es un almacén de datos sin servidores completamente administrado como plataforma como servicio (PaaS) que permite el análisis escalable de petabytes de datos. BigQuery te permite enfocarte en el análisis de los datos para buscar información significativa mientras usas SQL familiar y aprendizaje automático integrado.
Con las GPUs en GKE con TGI, puedes implementar un modelo de lenguaje de Gemma para analizar y resumir las interacciones del usuario en lenguaje natural. Posteriormente, si integras BigQuery con GKE, puedes usar BigQuery para controlar de manera eficiente conjuntos de datos masivos (como Google Analytics) y las capacidades de comprensión del lenguaje natural del modelo para generar estadísticas significativas.
Por ejemplo, como científico o analista de datos, o como tomador de decisiones comerciales en una empresa de comercio electrónico, es posible que desees comprender el comportamiento del usuario en tu sitio web o app. Esta información puede ayudarte a optimizar y personalizar los recorridos del usuario, y a tomar decisiones comerciales fundamentadas para aumentar las ventas.
En este caso, podrías tomar datos sin procesar de Google Analytics de BigQuery, enviarlos al modelo de Gemma y recibir resúmenes y estadísticas de visitas a la página 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, identifica patrones y tendencias. Podrías obtener estadísticas para identificar combinaciones de productos populares, revelar puntos de abandono comunes en el proceso de finalización de la compra y destacar campañas de marketing exitosas que dirigen tráfico a páginas de destino específicas.
Beneficios
Esta solución ofrece un flujo de trabajo optimizado con las siguientes ventajas:
- Integración de BigQuery: Usa BigQuery para almacenar y procesar conjuntos de datos grandes (como los datos de Google Analytics en este instructivo). Esto te permite consultar y agregar los datos necesarios para el análisis del modelo.
- Aceleración de GPU: Ejecuta el modelo de 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 costos y tiempo: Ahorra tiempo y recursos con el modelo de lenguaje de Gemma de código abierto, previamente entrenado, lo que elimina la necesidad de compilar un modelo personalizado desde cero.
Objetivos
En este instructivo, aprenderás a realizar lo siguiente:
- Implementar el modelo y exponerlo: crea un archivo YAML de servicio para definir un balanceador de cargas interno para acceder al modelo de Gemma.
- Crear una función remota de BigQuery: Ejecuta código de Python para definir una función remota que tome datos de Google Analytics, cree instrucciones para el modelo, envíe solicitudes al extremo del modelo con el balanceador de cargas y muestre la respuesta del modelo.
- **Configurar 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 extremo del modelo.
- Analizar datos: Analiza los datos con BigQuery DataFrames,
o directamente en SQL con la herramienta de línea de comandos
bq. Ejecuta los fragmentos de código proporcionados en un notebook de Colab Enterprise para hacer lo siguiente:- Consultar datos de Google Analytics de BigQuery con SQL
- Aplicar la función remota a los datos para generar estadísticas del modelo de Gemma
- Mostrar los resultados
Arquitectura
En el siguiente diagrama de arquitectura, se muestran los componentes involucrados y cómo interactúan:
- Usa un notebook de Colab Enterprise para ejecutar tu código de Python. Con Python, puedes usar la biblioteca de bigframes para simplificar tus interacciones de SQL.
- BigQuery funciona como tu motor de procesamiento de macrodatos, lo que permite el uso de 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 vuelta a BigQuery y se muestran en una tabla.
Costos
En este documento, usarás 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 costos en función del uso previsto,
usa la calculadora de precios.
Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.
Antes de comenzar
Asegúrate de completar los siguientes requisitos previos:
Selecciona o crea un proyecto
Puedes usar un proyecto existente o crear uno nuevo para este instructivo.
- Accede a tu Google Cloud cuenta. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Habilita las APIs
Habilita las APIs de Artifact Registry, Compute Engine, GKE, IAM Service Account Credentials, Cloud Functions, Cloud Build, Cloud Run Admin, Cloud Logging, Acceso a VPC sin servidores, BigQuery, Dataform y Vertex AI.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén información para otorgar roles.
Configura Cloud Shell
En este instructivo, usarás Cloud Shell para
ejecutar los comandos gcloud y kubectl. Cloud Shell es un entorno de shell que se usa para administrar
recursos alojados en Google Cloud. Ya viene instalado en el
Google Cloud CLI y la herramienta de línea de comandos de kubectl.
En la Google Cloud consola, activa Cloud Shell.
Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior en la consola.
Antes de ejecutar comandos en este instructivo, asegúrate de que tu proyecto predeterminado esté configurado como el ID del proyecto en el que deseas implementar la app de ejemplo. Si aún no está configurado, ejecuta el siguiente comando en Cloud Shell:
gcloud config set project PROJECT_ID
Reemplaza PROJECT_ID por el ID del proyecto.
Asigna roles de IAM
Asegúrate de que tu cuenta de usuario y la cuenta de servicio predeterminada de Compute Engine en tu proyecto tengan los roles necesarios de la administración de identidades y accesos (IAM) para este instructivo.
Otorga roles a tu cuenta de usuario. Ejecuta el siguiente comando una vez para cada uno de los siguientes
roles de IAM:
roles/aiplatform.colabEnterpriseAdmin, roles/run.invoker, roles/container.admin, roles/iam.serviceAccountAdmin, roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Reemplaza lo siguiente:
PROJECT_ID: ID del proyectoUSER_IDENTIFIER: El identificador de tu cuenta de usuario Por ejemplo,myemail@example.com.ROLE: El rol de IAM que otorgas a tu cuenta de usuario
Otorga roles a tu cuenta de servicio predeterminada de Compute Engine. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: 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
- Reemplaza
PROJECT_IDpor el ID del proyecto. - Reemplaza
PROJECT_NUMBERpor el número de tu proyecto para construir el dominio de la cuenta de servicio predeterminada de Compute Engine para tu proyecto. Por ejemplo,123456789012-compute@developer.gserviceaccount.com. - Reemplaza
ROLEpor cada rol individual.
Entrega un modelo de Gemma
Ve al instructivo Entrega modelos abiertos de Gemma con GPUs en GKE con Hugging Face TGI y sigue las instrucciones desde Antes de comenzar hasta Interactúa con el modelo con curl para asegurarte de que tu modelo de Gemma se implemente correctamente y puedas interactuar con él.
Para los fines de este instructivo, implementa el modelo Gemma 2B-it.
Configura la 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 instructivo, usa la Default VPC.
Para asegurarte de que tu conjunto de datos de BigQuery, la función remota y las funciones subyacentes de Cloud Run se implementen en ubicaciones compatibles, la red de VPC debe estar en la misma región que tu función remota de BigQuery.
En este instructivo, cuando configuras las opciones de BigQuery DataFrames
mientras creas una función remota, especificas US como
ubicación para tu conjunto de datos, que se establece de forma predeterminada en la región us-central1 para tus
funciones de Cloud Run. Por lo tanto, crea o usa la VPC en la región us-central1.
Crea un balanceador de cargas
Sigue estas instrucciones para crear un balanceador de cargas interno en tu clúster de GKE:
Crea el siguiente 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: 8000Abre una nueva terminal de Cloud Shell y ejecuta el siguiente comando para aplicar el manifiesto:
kubectl apply -f tgi-2b-lb-service.yamlObtén la dirección IP del balanceador de cargas. Es posible que debas esperar de 1 a 2 minutos antes de que se pueda recuperar esta dirección IP:
kubectl get service llm-lb-service --output yaml | grep ip:
Usarás esta dirección IP para comunicarte con tu aplicación gemma-server que se ejecuta detrás del balanceador de cargas.
Crear un conector
Usas un conector de Acceso a VPC sin servidores para enviar y recibir solicitudes a través de tu red de VPC sin usar la Internet pública. Para obtener más información, consulta Acceso a VPC sin servidores.
En este instructivo, crearás un conector con una subred nueva y dedicada para evitar
conflictos de direcciones IP con los recursos existentes en la VPC. Para obtener instrucciones,
consulta la sección Crea un conector
y sigue las instrucciones de gcloud para la sección Crea un conector y una subred nueva.
Como alternativa, si deseas usar una subred existente, sigue las instrucciones de la sección Crea un conector con una subred existente.
Para obtener más información, consulta Requisitos de la subred del conector.
Crear un notebook
En este instructivo, usarás un notebook de Colab Enterprise para ejecutar todo el código para definir la función remota de BigQuery y realizar el análisis.
Para crear un notebook de Colab Enterprise con la Google Cloud consola, haz lo siguiente:
En Google Cloud laconsola, ve a la página Notebooks de Colab Enterprise:
En el menú Región, selecciona
us-central1. Esta es la misma región en la que creas todos tus servicios en este instructivo.Junto a Archivos, haz clic en Crear un notebook.
El notebook nuevo aparece en la pestaña Mis notebooks.
Para ejecutar código en tu notebook nuevo, inserta una celda de código nueva en tu notebook para cada comando o fragmento de código que desees ejecutar.
Crea una función remota de BigQuery
Una de las formas en que puedes definir una función remota de BigQuery es con 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 instrucción y la envía a tu modelo de Gemma para su análisis.
En el notebook de Colab Enterprise que creaste, haz lo siguiente:
- Haz clic en + Código para insertar una celda de código nueva.
Copia el siguiente código en la celda de código nueva:
# 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}")Reemplaza lo siguiente:
LOADBALANCER_IP_ADDRESS: La dirección IP y el puerto del balanceador de cargas interno que creaste antes, por ejemplo,10.128.05:8000.PROJECT_ID: ID del proyectoVPC_CONNECTOR_NAME: El nombre del conector de Acceso a VPC sin servidores que creaste antes
En este instructivo, la ubicación de tu conjunto de datos de BigQuery se establece en
US, que se establece de forma predeterminada en la regiónus-central1.Haz clic en Ejecutar celda.
El resultado muestra el nombre de la función de manera similar a la siguiente:
The function name is: PROJECT_ID.ga_demo.ga_explain_example
Analiza el comportamiento del usuario
En esta sección, analizarás el comportamiento del usuario en tu sitio web con la función remota process_incoming de cualquiera de las siguientes dos maneras:
- Con BigQuery DataFrames
- Con la herramienta de línea de comandos
bqpara ejecutar una consulta directamente en SQL
Usa BigQuery DataFrames
Para ejecutar la función remota con BigQuery DataFrames en el notebook de Colab Enterprise que creaste, haz lo siguiente:
- Haz clic en + Código para insertar una celda de código nueva.
- Copia el siguiente código en la celda de código nueva y haz clic en Ejecutar celda.
# 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 muestra 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... |
Usa la herramienta de línea de comandos bq
Como alternativa, puedes usar la herramienta de línea de comandos bq para realizar análisis directamente con SQL.
Para ejecutar la función remota con la herramienta de línea de comandos bq en el notebook de Colab Enterprise que creaste, haz lo siguiente:
- Haz clic en + Código para insertar una celda de código nueva.
Copia el siguiente código en la celda de código nueva y reemplaza
PROJECT_IDpor 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.
En el siguiente resultado, se muestran los resultados de muestra de la consulta:
| user_pseudo_id | string_value | event_timestamp | reverse_event_number | resultado |
|---|---|---|---|---|
| 86037838.0267811614 | https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee | 1612128627715585 | 1 | Answer: The most popular page was https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee The next most popular page was the page they came from. Explanation: The provided data shows that the current user visited Google's tienda de artículos promocionales specifically for the product "Google Dino Game Tee." \n \nImportant Considerations:\n\n* Data Interpretation: You can't definitively say the"} |
| 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"} |
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Para evitar que se apliquen cargos a tu Google Cloud cuenta por los recursos usados en este instructivo, borra los recursos individuales.
- Borra tu notebook de Colab Enterprise.
- Borra tu entorno de ejecución de Colab Enterprise.
- Borra 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. - Borra tu conexión externa de BigQuery.
- Borra tus funciones de Cloud Run.
- Borra tu clúster de GKE.
- Borra tu conector de VPC.
¿Qué sigue?
- Prueba un codelab práctico para un caso de uso de análisis de datos estructurados y no estructurados.
- Consulta Prácticas recomendadas para ejecutar cargas de trabajo por lotes en GKE.
- Obtén más información sobre los casos de uso de IA/AA en BigQuery.
- Obtén más información sobre los casos de uso de IA/AA en GKE.