Questo tutorial mostra come ricavare approfondimenti da set di dati di grandi dimensioni utilizzando BigQuery, Cloud Run, e il modello linguistico di grandi dimensioni Gemma. In questo tutorial, eseguirai 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 linguistico di grandi dimensioni Gemma per l'analisi dei dati e la generazione di previsioni in base ai prompt in entrata.
Questo tutorial è rivolto ad amministratori e architetti di piattaforme cloud, specialisti di dati e AI, ML engineer e professionisti MLOps (DevOps). Prima di leggere questa pagina, assicurati di conoscere Kubernetes e un ambiente notebook come Jupyter.
Come prerequisito per questo tutorial, devi completare il tutorial Gestisci i modelli aperti di Gemma utilizzando le GPU su GKE con Hugging Face TGI. Il framework TGI facilita il processo di erogazione del modello.
Perché GKE e BigQuery
BigQuery è un data warehouse serverless, completamente gestito e PaaS (Platform as a Service) che consente l'analisi scalabile di petabyte di dati. BigQuery ti consente di concentrarti sull'analisi dei dati per trovare approfondimenti significativi 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 approfondimenti 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 sulla tua app. Questo approfondimento può aiutarti a ottimizzare e personalizzare i percorsi utente 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 delle 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 approfondimenti per individuare le combinazioni di prodotti più richieste, rivelare i punti di abbandono comuni nel processo 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ù velocemente rispetto ai processori basati su CPU.
- Costi e tempi ridotti: risparmia tempo e risorse utilizzando il modello linguistico Gemma open source, preaddestrato, eliminando la necessità di creare un modello personalizzato da zero.
Obiettivi
In questo tutorial imparerai a:
- Eseguire il deployment del modello ed esporlo: crea un file YAML del servizio per definire un bilanciatore del carico interno per accedere al modello Gemma.
- Creare una funzione remota BigQuery: esegui il codice Python per definire una funzione remota che accetta i dati di Google Analytics, crea prompt per il modello, invia richieste all'endpoint del modello utilizzando il bilanciatore del carico e restituisce la risposta del modello.
- Configurare la rete Virtual Private Cloud (VPC): configura una rete VPC e un connettore VPC per consentire la comunicazione sicura tra BigQuery e il cluster GKE. Questo è fondamentale per la funzione remota per accedere all'endpoint del modello.
- Analizzare i dati: analizza i dati utilizzando BigQuery DataFrames,
o direttamente in SQL utilizzando lo strumento a riga di comando
bq. Esegui gli snippet di codice forniti in un Colab Enterprise notebook per:- Eseguire query sui dati di Google Analytics da BigQuery utilizzando SQL.
- Applicare la funzione remota ai dati per generare approfondimenti dal modello Gemma.
- Visualizzare i risultati.
Architettura
Il seguente diagramma dell'architettura mostra i componenti coinvolti e il modo in cui interagiscono:
- Utilizza un notebook Colab Enterprise per eseguire il codice Python. Con Python, puoi utilizzare la libreria bigframes per semplificare le interazioni SQL.
- BigQuery funge da motore di elaborazione dei big data, consentendo l'utilizzo di SQL per interagire con i dati.
- La funzione remota richiama una funzione Cloud Run. I dati vengono instradati automaticamente alla funzione remota, dove vengono preparati e inviati a GKE per l'inferenza.
- I risultati vengono inviati di nuovo a BigQuery e visualizzati in una tabella.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- Compute Engine instances used by GKE
- GPU resources used by GKE
- BigQuery
- Cloud Load Balancing
- Cloud Run functions
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
Assicurati di completare i seguenti prerequisiti:
Seleziona o crea un progetto
Puoi utilizzare un progetto esistente o crearne uno nuovo per questo tutorial.
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
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.
Abilita le API
Abilita le API Artifact Registry, Compute Engine, GKE, Credenziali account di servizio IAM, Cloud Functions, Cloud Build, Amministratore di Cloud Run, Cloud Logging, Accesso VPC serverless, BigQuery, Dataform, Vertex AI.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che
contiene l'autorizzazione serviceusage.services.enable. Scopri come concedere
i ruoli.
Configura Cloud Shell
In questo tutorial, utilizzerai Cloud Shell per
eseguire gcloud e kubectl comandi. Cloud Shell è un ambiente shell per la gestione di
risorse ospitate su Google Cloud. È preinstallato con la
Google Cloud CLI e lo strumento a riga di comando kubectl.
Nella Google Cloud console, attiva Cloud Shell.
Una sessione di Cloud Shell si apre in un frame nella parte inferiore della console.
Prima di eseguire i comandi in questo tutorial, assicurati che il progetto predefinito sia impostato sull'ID progetto in cui vuoi eseguire il deployment dell'app di esempio. Se non è già impostato, esegui il comando seguente in Cloud Shell:
gcloud config set project PROJECT_ID
Sostituisci PROJECT_ID con l'ID progetto.
Concedi ruoli IAM
Assicurati che il tuo account utente e il account di servizio Compute Engine predefinito nel tuo progetto dispongano dei ruoli Identity and Access Management (IAM) richiesti per questo tutorial.
Concedi i ruoli al tuo account utente. Esegui il comando seguente una volta per ciascuno dei seguenti
ruoli 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
Sostituisci quanto segue:
PROJECT_ID: il tuo ID progetto.USER_IDENTIFIER: l'identificatore del tuo account utente. Ad esempio,myemail@example.com.ROLE: il ruolo IAM che concedi al tuo account utente.
Concedi i ruoli al account di servizio Compute Engine predefinito. Esegui il comando seguente una volta per ciascuno dei seguenti ruoli 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
- Sostituisci
PROJECT_IDcon l'ID progetto. - Sostituisci
PROJECT_NUMBERcon il numero del progetto per creare il dominio del account di servizio Compute Engine predefinito per il tuo progetto. Ad esempio,123456789012-compute@developer.gserviceaccount.com. - Sostituisci
ROLEcon ogni singolo ruolo.
Esegui il deployment di un modello Gemma
Vai al tutorial Gestisci i modelli aperti di Gemma utilizzando le 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 correttamente e che tu possa interagire con esso.
Per 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 funzione remota possa connettersi al cluster GKE.
In questo tutorial, utilizza il Default VPC.
Per assicurarti che il set di dati BigQuery, la funzione remota e le funzioni Cloud Run sottostanti vengano eseguite 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
località per il set di dati, che per impostazione predefinita è la regione us-central1 per le
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 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: 8000Apri un nuovo terminale Cloud Shell ed esegui il comando seguente per applicare il manifest:
kubectl apply -f tgi-2b-lb-service.yamlOttieni l'indirizzo IP del bilanciatore del carico. Potresti dover attendere 1-2 minuti prima di poter recuperare questo indirizzo IP:
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
Utilizza 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ù, consulta Accesso VPC serverless.
In questo tutorial creerai un connettore con una nuova subnet dedicata per evitare
conflitti di indirizzi IP con le risorse esistenti nel VPC. Per istruzioni,
consulta la sezione Crea un connettore
e segui le istruzioni gcloud per la sezione Crea un connettore e una nuova subnet.
In alternativa, se vuoi utilizzare una subnet esistente, segui le istruzioni nella sezione Crea un connettore utilizzando una subnet esistente.
Per saperne di più, consulta Requisiti delle subnet dei connettori.
Crea un notebook
In questo tutorial, utilizzerai 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 Google Cloud console, vai alla pagina Notebook Colab Enterprise:
Nel menu Regione, seleziona
us-central1. Questa è la 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 nel notebook per ogni comando o snippet di codice che vuoi eseguire.
Crea una funzione remota BigQuery
Uno dei modi per definire una funzione remota BigQuery è utilizzare la libreria bigframes. In questa sezione, utilizza bigframes per creare una funzione remota denominata 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 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 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 visualizza il nome della funzione in modo simile al seguente:
The function name is: PROJECT_ID.ga_demo.ga_explain_example
Analizza il comportamento degli utenti
In questa sezione, analizzerai 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
bqper 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 | results | axis |
|---|---|---|---|---|---|---|
| 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... |
Utilizza 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_IDcon l'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 | 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 store di merchandising 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"} |
Libera spazio
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina le singole risorse.
- Elimina il notebook Colab Enterprise.
- Elimina il runtime Colab Enterprise.
- Elimina la funzione BigQuery.
Assicurati che il service account disponga dell'autorizzazione
bigquery.routines.delete. Per saperne di più, consulta Autorizzazioni BigQuery. - Elimina la connessione esterna BigQuery.
- Elimina le funzioni Cloud Run.
- Elimina il cluster GKE.
- Elimina il connettore VPC.
Passaggi successivi
- Prova un codelab pratico per un caso d'uso di analisi dei dati strutturati e non strutturati.
- Consulta Best practice per l'esecuzione di workload in batch su GKE.
- Scopri di più sui casi d'uso di AI/ML in BigQuery.
- Scopri di più sui casi d'uso di AI/ML in GKE.