Questo tutorial mostra come ricavare insight da set di dati di grandi dimensioni utilizzando BigQuery, Cloud Run e il LLM Gemma. In questo tutorial, esegui il deployment di un'applicazione di esempio in Google Kubernetes Engine (GKE). L'app di esempio utilizza BigQuery per l'archiviazione e l'elaborazione dei dati, Cloud Run per la gestione delle richieste e il modello LLM Gemma per l'analisi dei dati e la generazione di previsioni basate sui prompt in entrata.
Questo tutorial è rivolto ad amministratori e architetti della piattaforma cloud, specialisti di dati e AI, ML engineer e professionisti MLOps (DevOps). Prima di leggere questa pagina, assicurati di avere familiarità con Kubernetes e un ambiente notebook come Jupyter.
Come prerequisito per questo tutorial, devi completare il tutorial Eroga modelli aperti Gemma utilizzando le GPU su GKE con Hugging Face TGI. Il framework TGI facilita il processo di distribuzione del modello.
Perché GKE e BigQuery
BigQuery è un data warehouse serverless, completamente gestito e di tipo Platform as a Service (PaaS) che consente l'analisi scalabile di petabyte di dati. BigQuery ti consente di concentrarti sull'analisi dei dati per trovare informazioni significative utilizzando SQL e machine learning integrato.
Utilizzando le GPU su GKE con TGI, puoi eseguire il deployment di un modello linguistico Gemma per analizzare e riassumere le interazioni degli utenti in linguaggio naturale. Successivamente, integrando BigQuery con GKE, puoi utilizzare BigQuery per gestire in modo efficiente set di dati di grandi dimensioni (come Google Analytics) e le funzionalità di comprensione del linguaggio naturale del modello per generare insight significativi.
Ad esempio, in qualità di data scientist, analista o responsabile delle decisioni aziendali di un'azienda di e-commerce, potresti voler comprendere il comportamento degli utenti sul tuo sito web o nella tua app. Questa informazione può aiutarti a ottimizzare e personalizzare i percorsi degli utenti e a prendere decisioni aziendali informate per aumentare le vendite.
In questo scenario, potresti prendere i dati non elaborati di Google Analytics da BigQuery, inserirli nel modello Gemma e ricevere riepiloghi e approfondimenti sulle visite alle pagine in linguaggio naturale. Il modello Gemma, che viene eseguito su un'infrastruttura scalabile con accelerazione GPU di GKE, elabora rapidamente i dati del percorso dell'utente, identificando pattern e tendenze. Potresti ottenere informazioni per individuare le combinazioni di prodotti più apprezzate, rivelare i punti di abbandono comuni nella procedura di pagamento ed evidenziare le campagne di marketing di successo che generano traffico verso pagine di destinazione specifiche.
Vantaggi
Questa soluzione offre un flusso di lavoro semplificato con i seguenti vantaggi:
- Integrazione di BigQuery: utilizza BigQuery per archiviare ed elaborare set di dati di grandi dimensioni (come i dati di Google Analytics in questo tutorial). In questo modo puoi eseguire query e aggregare i dati necessari per l'analisi del modello.
- Accelerazione GPU: esegui il modello Gemma su un cluster GKE con supporto GPU per velocizzare il processo di inferenza, generando previsioni molto più rapidamente rispetto ai processori basati su CPU.
- Costi e tempi ridotti: risparmia tempo e risorse utilizzando il modello linguistico Gemma open source pre-addestrato, eliminando la necessità di creare un modello personalizzato da zero.
Pubblica un modello Gemma
Vai al tutorial Gestire modelli open Gemma utilizzando GPU su GKE con Hugging Face TGI e segui le istruzioni a partire da Prima di iniziare fino a Interagisci con il modello utilizzando curl per assicurarti che il modello Gemma sia stato eseguito il deployment correttamente e che tu possa interagire con lui.
Ai fini di questo tutorial, esegui il deployment del modello Gemma 2B-it.
Configura la rete VPC
Crea o utilizza la rete VPC
nella regione us-central1
in modo che la tua funzione remota possa connettersi al cluster GKE.
In questo tutorial, utilizza il VPC Default
.
Per assicurarti che il set di dati BigQuery, la funzione remota e le funzioni Cloud Run sottostanti vengano implementati in località compatibili, la rete VPC deve trovarsi nella stessa regione della funzione remota BigQuery.
In questo tutorial, quando imposti le opzioni di BigQuery DataFrames
durante la creazione di una funzione remota, specifichi US
come
posizione per il set di dati, che per impostazione predefinita è la regione us-central1
per le tue
funzioni Cloud Run. Pertanto, crea o utilizza il VPC nella regione us-central1
.
Crea un bilanciatore del carico
Segui queste istruzioni per creare un bilanciatore del carico interno nel tuo cluster GKE:
Crea il seguente manifest
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
Apri un nuovo terminale Cloud Shell ed esegui il comando seguente per applicare il manifest:
kubectl apply -f tgi-2b-lb-service.yaml
Ottieni l'indirizzo IP del bilanciatore del carico. Potresti dover attendere 1-2 minuti prima che questo indirizzo IP possa essere recuperato:
kubectl get service llm-lb-service --output yaml | grep ip:
Utilizzerai questo indirizzo IP per comunicare con l'applicazione gemma-server
in esecuzione dietro il bilanciatore del carico.
Crea connettore
Utilizzi un connettore di accesso VPC serverless per inviare e ricevere richieste tramite la rete VPC senza utilizzare la rete internet pubblica. Per saperne di più, vedi Accesso VPC serverless.
In questo tutorial crei un connettore con una subnet nuova e dedicata per evitare
conflitti di indirizzi IP con le risorse esistenti nel VPC. Per istruzioni,
consulta la sezione Creare un connettore
e segui le istruzioni gcloud
per la sezione Creare un connettore e una nuova subnet.
In alternativa, se vuoi utilizzare una subnet esistente, segui le istruzioni riportate nella sezione Crea un connettore utilizzando una subnet esistente.
Per maggiori informazioni, consulta Requisiti della subnet del connettore.
Crea un notebook
In questo tutorial, utilizzi un notebook Colab Enterprise per eseguire tutto il codice per definire la funzione remota BigQuery ed eseguire l'analisi.
Per creare un notebook Colab Enterprise utilizzando la console Google Cloud :
Nella console Google Cloud , vai alla pagina Blocchi note Colab Enterprise:
Nel menu Regione, seleziona
us-central1
. Si tratta della stessa regione in cui crei tutti i servizi in questo tutorial.Accanto a File, fai clic su Crea un notebook.
Il nuovo notebook viene visualizzato nella scheda I miei notebook.
Per eseguire il codice nel nuovo notebook, inserisci una nuova cella di codice per ogni comando o snippet di codice che vuoi eseguire.
Crea una funzione remota BigQuery
Uno dei modi per definire una funzione remota di BigQuery è utilizzare
la libreria bigframes
. In questa sezione, utilizza bigframes
per creare una funzione remota
chiamata process_incoming
. Questa funzione remota accetta i dati di Google Analytics
come input, crea un prompt e lo invia al modello Gemma
per l'analisi.
Nel notebook Colab Enterprise che hai creato:
- Fai clic su + Codice per inserire una nuova cella di codice.
Copia il seguente codice nella nuova cella di codice:
# 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}")
Sostituisci quanto segue:
LOADBALANCER_IP_ADDRESS
: l'indirizzo IP e la porta del bilanciatore del carico interno che hai creato in precedenza, ad esempio10.128.05:8000
.PROJECT_ID
: il tuo ID progetto.VPC_CONNECTOR_NAME
: il nome del connettore di accesso VPC serverless che hai creato in precedenza.
In questo tutorial, la località del set di dati BigQuery è impostata su
US
, che per impostazione predefinita è la regioneus-central1
.Fai clic su
Esegui cella.
L'output mostra il nome della funzione in modo simile al seguente:
The function name is: PROJECT_ID.ga_demo.ga_explain_example
Analizzare il comportamento degli utenti
In questa sezione analizzi il comportamento degli utenti sul tuo sito web utilizzando la funzione remota process_incoming
in uno dei due modi seguenti:
- utilizzando BigQuery DataFrames
- utilizzando lo strumento a riga di comando
bq
per eseguire una query direttamente in SQL.
Utilizza BigQuery DataFrames
Per eseguire la funzione remota utilizzando BigQuery DataFrames nel notebook Colab Enterprise che hai creato:
- Fai clic su + Codice per inserire una nuova cella di codice.
- Copia il seguente codice nella nuova cella di codice e fai clic su Esegui cella.
# 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)
L'output seguente mostra i risultati di esempio della query:
user_pseudo_id | string_value | event_timestamp | reverse_event_number | ga_history | risultati | asse |
---|---|---|---|---|---|---|
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... |
Utilizzare lo strumento a riga di comando bq
In alternativa, puoi utilizzare lo strumento a riga di comando bq
per eseguire l'analisi direttamente
utilizzando SQL.
Per eseguire la funzione remota utilizzando lo strumento a riga di comando bq
nel notebook Colab Enterprise
che hai creato:
- Fai clic su + Codice per inserire una nuova cella di codice.
Copia il seguente codice nella nuova cella di codice e sostituisci
PROJECT_ID
con il tuo ID progetto.# 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}
Fai clic su
Esegui cella.
L'output seguente mostra i risultati di esempio della query:
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":"Risposta:\n La pagina più visitata è stata https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee\n La seconda pagina più visitata è stata quella da cui proveniva l'utente.\n\n Spiegazione:\n\nI dati forniti mostrano che l'utente attuale ha visitato il negozio di merchandising di Google specificamente per il prodotto "Google Dino Game Tee". \n \nConsiderazioni importanti:\n\n* Interpretazione dei dati: non puoi affermare con certezza che"} |
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"} |