Analizza i dati su GKE utilizzando BigQuery, Cloud Run e Gemma


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 con un ambiente notebook come Jupyter.

Come prerequisito per questo tutorial, devi completare il tutorial Gestire 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 integrati.

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 preaddestrato, eliminando la necessità di creare un modello personalizzato da zero.

Obiettivi

In questo tutorial imparerai a:

  1. Esegui il deployment del modello ed esponilo: crea un file YAML del servizio per definire un bilanciatore del carico interno per accedere al modello Gemma.
  2. Crea una funzione remota BigQuery: esegui il codice Python per definire una funzione remota che acquisisce i dati di Google Analytics, crea prompt per il modello, invia richieste all'endpoint del modello utilizzando il bilanciamento del carico e restituisce la risposta del modello.
  3. Configura 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 consentire alla funzione remota di accedere all'endpoint del modello.
  4. Analizza 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 notebook Colab Enterprise per:
    • Esegui query sui dati di Google Analytics da BigQuery utilizzando SQL.
    • Applica la funzione remota ai dati per generare insight dal modello Gemma.
    • Visualizza i risultati.

Architettura

Il seguente diagramma dell'architettura mostra i componenti coinvolti e la loro interazione:

Architettura di analisi dei dati

  • 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 in cui 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 utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi utenti di Google Cloud potrebbero avere diritto a una prova gratuita.

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, vedi 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.

  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.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Abilita le API

  7. 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.

    Enable the APIs

  8. Configura Cloud Shell

    In questo tutorial utilizzi Cloud Shell per eseguire i comandi gcloud e kubectl. Cloud Shell è un ambiente shell per la gestione delle risorse ospitate su Google Cloud. È preinstallato con Google Cloud CLI e lo strumento a riga di comando kubectl.

  9. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  10. 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 questo comando 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 l'account di servizio predefinito di Compute Engine nel tuo progetto dispongano dei ruoli Identity and Access Management (IAM) richiesti per questo tutorial.

  11. 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

    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.

      Vai a IAM
    2. Seleziona il progetto.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo identificatore utente. In genere si tratta dell'indirizzo email di un Account Google.

    5. Nell'elenco Seleziona un ruolo, seleziona un ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
    7. Fai clic su Salva.
    8. Concedi ruoli al account di servizio Compute Engine predefinito. Esegui il seguente comando 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_ID con l'ID progetto.
      • Sostituisci PROJECT_NUMBER con il numero del tuo progetto per creare il dominio delaccount di serviziot predefinito di Compute Engine per il tuo progetto. Ad esempio, 123456789012-compute@developer.gserviceaccount.com.
      • Sostituisci ROLE con ogni singolo ruolo.

      Pubblicare un modello Gemma

      Vai al tutorial Gestire i modelli open 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 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 corrisponde alla 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:

      1. 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
        
      2. Apri un nuovo terminale Cloud Shell ed esegui il comando seguente per applicare il manifest:

        kubectl apply -f tgi-2b-lb-service.yaml
        
      3. 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 saperne di più, 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 :

      1. Nella console Google Cloud , vai alla pagina Blocchi note Colab Enterprise:

        Vai a Notebooks

      2. Nel menu Regione, seleziona us-central1. Si tratta della stessa regione in cui crei tutti i servizi in questo tutorial.

      3. 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:

      1. Fai clic su + Codice per inserire una nuova cella di codice.
      2. 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:

        In questo tutorial, la località del set di dati BigQuery è impostata su US, che per impostazione predefinita è la regione us-central1.

      3. 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 process_incoming di controllo remoto 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:

      1. Fai clic su + Codice per inserire una nuova cella di codice.
      2. 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:

      1. Fai clic su + Codice per inserire una nuova cella di codice.
      2. 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}
        
      3. 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"}

      Esegui la pulizia

      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 account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina le singole risorse.

      1. Elimina il notebook Colab Enterprise.
      2. Elimina il runtime di Colab Enterprise.
      3. Elimina la funzione BigQuery. Assicurati che il service account disponga dell'autorizzazione bigquery.routines.delete. Per ulteriori informazioni, consulta Autorizzazioni BigQuery.
      4. Elimina la connessione esterna BigQuery.
      5. Elimina le tue funzioni Cloud Run.
      6. Elimina il cluster GKE.
      7. Elimina il connettore VPC.

      Passaggi successivi