Este tutorial demonstra como extrair insights de grandes conjuntos de dados usando BigQuery, o Cloud Run, e o LLM do Gemma. Neste tutorial, você vai implantar um aplicativo de amostra no Google Kubernetes Engine (GKE). O app de exemplo usa o BigQuery para armazenamento e processamento de dados, o Cloud Run para processamento de solicitações e o LLM do Gemma para analisar dados e gerar previsões com base em comandos recebidos.
Este tutorial é destinado a administradores e arquitetos de plataformas de nuvem, especialistas em dados e IA, engenheiros de ML, e profissionais de MLOps (DevOps). Antes de ler esta página, você precisa ter familiaridade com Kubernetes e um ambiente de notebook, como o Jupyter.
Como pré-requisito para este tutorial, conclua o tutorial Disponibilizar modelos abertos do Gemma usando GPUs no GKE com o Hugging Face TGI. A estrutura do TGI facilita o processo de disponibilização do modelo.
Por que o GKE e o BigQuery
O BigQuery é um data warehouse sem servidor, totalmente gerenciado e de plataforma como serviço (PaaS, na sigla em inglês) que permite análises escalonáveis em petabytes de dados. Com o BigQuery, você se concentra na análise dos dados para encontrar insights relevantes usando SQL conhecido e machine learning integrado.
Usando GPUs no GKE com o TGI, é possível implantar um modelo de linguagem Gemma para analisar e resumir interações do usuário em linguagem natural. Posteriormente, ao integrar o BigQuery ao GKE, você pode usar o BigQuery para processar com eficiência conjuntos de dados enormes (como o Google Analytics) e os recursos de compreensão de linguagem natural do modelo para gerar insights relevantes.
Por exemplo, como cientista ou analista de dados ou um tomador de decisões de negócios em uma empresa de e-commerce, talvez você queira entender o comportamento do usuário no seu site ou app. Esse insight pode ajudar a otimizar e personalizar as jornadas do usuário e tomar decisões de negócios informadas para aumentar as vendas.
Nesse cenário, você pode extrair dados brutos do Google Analytics do BigQuery, enviá-los ao modelo Gemma e receber resumos e insights de visitas de página em linguagem natural. O modelo Gemma, que é executado em uma infraestrutura escalonável com aceleração de GPU do GKE, processa rapidamente os dados da jornada do usuário, identificando padrões e tendências. Você pode receber insights para identificar combinações de produtos populares, revelar pontos de desistência comuns no processo de finalização da compra e destacar campanhas de marketing bem-sucedidas que geram tráfego para páginas de destino específicas.
Benefícios
Essa solução oferece um fluxo de trabalho simplificado com as seguintes vantagens:
- Integração do BigQuery: use o BigQuery para armazenar e processar grandes conjuntos de dados (como os dados do Google Analytics neste tutorial). Isso permite consultar e agregar os dados necessários para a análise do modelo.
- Aceleração de GPU: execute o modelo Gemma em um cluster do GKE com suporte a GPU para acelerar o processo de inferência, gerando previsões muito mais rápido do que com os processadores baseados em CPU.
- Redução de custo e tempo: economize tempo e recursos usando o modelo de linguagem Gemma pré-treinado de código aberto, eliminando a necessidade de criar um modelo personalizado do zero.
Objetivos
Neste tutorial, você vai aprender a:
- Implantar e expor o modelo: crie um arquivo YAML de serviço para definir um balanceador de carga interno para acessar o modelo Gemma.
- Criar uma função remota do BigQuery: execute o código Python para definir uma função remota que extrai dados do Google Analytics, cria comandos para o modelo, envia solicitações ao endpoint do modelo usando o balanceador de carga e retorna a resposta do modelo.
- Configurar a rede de nuvem privada virtual (VPC): configure uma rede VPC e um conector de VPC para permitir a comunicação segura entre o BigQuery e o cluster do GKE. Isso é fundamental para que a função remota acesse o endpoint do modelo.
- Analisar dados: analise os dados usando BigQuery DataFrames,
ou diretamente em SQL usando a ferramenta de linha de comando
bq. Execute snippets de código fornecidos em um notebook do Colab Enterprise para:- Consultar dados do Google Analytics do BigQuery usando SQL.
- Aplicar a função remota aos dados para gerar insights do modelo Gemma.
- Mostrar os resultados.
Arquitetura
O diagrama de arquitetura a seguir mostra os componentes envolvidos e como eles interagem:
- Use um notebook do Colab Enterprise para executar o código Python. Com o Python, é possível usar a biblioteca bigframes para simplificar as interações SQL.
- O BigQuery funciona como um mecanismo de processamento de Big Data, permitindo o uso de SQL para interagir com os dados.
- A função remota invoca uma função do Cloud Run. Os dados são encaminhados automaticamente para a função remota, onde são preparados e enviados ao GKE para inferência.
- Os resultados são enviados de volta ao BigQuery e mostrados em uma tabela.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
- Compute Engine instances used by GKE
- GPU resources used by GKE
- BigQuery
- Cloud Load Balancing
- Cloud Run functions
Para gerar uma estimativa de custo baseada na projeção de uso,
use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Para mais informações, consulte Limpeza.
Antes de começar
Siga os seguintes pré-requisitos:
Escolha ou crie um projeto
Você pode usar um projeto existente ou criar um novo para fins deste tutorial.
- Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
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.
Ative as APIs
Ative as APIs do Artifact Registry, Compute Engine, GKE, IAM Service Account Credentials, Cloud Functions, Cloud Build, Cloud Run Admin, Cloud Logging, Acesso VPC sem servidor, BigQuery, Dataform e Vertex AI.
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter a permissão serviceusage.services.enable. Se você
criou o projeto, provavelmente já tem essa permissão com o
papel de proprietário (roles/owner). Caso contrário, você pode receber essa permissão com o
papel de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin).
Saiba como conceder papéis.
Configurar o Cloud Shell
Neste tutorial, use o Cloud Shell para
executar os comandos gcloud e kubectl. O Cloud Shell é um ambiente shell para gerenciar
recursos hospedados no Google Cloud. Ele vem pré-instalado com a
Google Cloud CLI e kubectl
ferramenta de linha de comando.
No Google Cloud console do, ative o Cloud Shell.
Uma sessão do Cloud Shell é aberta dentro de um quadro inferior no console.
Antes de executar comandos neste tutorial, verifique se o projeto padrão está definido como ID do projeto em que você quer implantar o aplicativo de amostra. Execute o seguinte comando no Cloud Shell, caso ele ainda não esteja definido:
gcloud config set project PROJECT_ID
Substitua PROJECT_ID pelo ID do projeto.
Conceder papéis do IAM
Verifique se a conta de usuário e a conta de serviço padrão do Compute Engine no seu projeto têm os papéis de gerenciamento de identidade e acesso (IAM, na sigla em inglês) necessários para este tutorial.
Conceda papéis à sua conta de usuário. Execute uma vez o seguinte comando para cada um dos seguintes
papéis do 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
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário. Por exemplo,myemail@example.com.ROLE: o papel do IAM que você concede à sua conta de usuário.
Conceda papéis à conta de serviço padrão do Compute Engine. Execute uma vez o seguinte comando para cada um dos seguintes papéis do 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
- Substitua
PROJECT_IDpelo ID do projeto. - Substitua
PROJECT_NUMBERpelo número do projeto para criar o domínio da conta de serviço padrão do Compute Engine. Por exemplo,123456789012-compute@developer.gserviceaccount.com. - Substitua
ROLEpor cada papel individual.
Disponibilizar um modelo Gemma
Acesse o tutorial Disponibilizar modelos abertos do Gemma usando GPUs no GKE com o Hugging Face TGI e siga as instruções em Antes de começar até Interagir com o modelo usando curl para garantir que o modelo Gemma seja implantado com sucesso e que você possa interagir com ele.
Para fins deste tutorial, implante o modelo Gemma 2B-it.
Configurar a rede VPC
Crie ou use a rede VPC
na região us-central1 para que a função remota possa se conectar ao cluster do GKE.
Neste tutorial, use a Default VPC.
Para garantir que o conjunto de dados do BigQuery, a função remota e as funções do Cloud Run subjacentes sejam implantados em locais compatíveis, a rede VPC precisa estar na mesma região que a função remota do BigQuery.
Neste tutorial, ao definir as opções do BigQuery DataFrames
ao criar uma função remota, você especifica US como
um local para o conjunto de dados, que é definido como padrão para a região us-central1 para as
funções do Cloud Run. Portanto, crie ou use a VPC na região us-central1.
Criar um balanceador de carga
Siga estas instruções para criar um balanceador de carga interno no cluster do GKE:
Crie o seguinte manifesto
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: 8000Abra um novo terminal do Cloud Shell e execute o seguinte comando para aplicar o manifesto:
kubectl apply -f tgi-2b-lb-service.yamlReceba o endereço IP do balanceador de carga. Talvez seja necessário aguardar de 1 a 2 minutos antes que esse endereço IP possa ser buscado:
kubectl get service llm-lb-service --output yaml | grep ip:
Você vai usar esse endereço IP para se comunicar com o aplicativo gemma-server que está sendo executado atrás do balanceador de carga.
Criar um conector
Você usa um conector de acesso VPC sem servidor para enviar e receber solicitações pela rede VPC sem usar a Internet pública. Para mais informações, consulte Acesso VPC sem servidor.
Neste tutorial, você cria um conector com uma sub-rede nova e dedicada para evitar
conflitos de endereço IP com recursos atuais na VPC. Para instruções,
consulte a seção Criar um conector
e siga as instruções gcloud para a seção Criar um conector e uma nova sub-rede.
Como alternativa, se você quiser usar uma sub-rede atual, siga as instruções da seção Criar um conector usando uma sub-rede atual.
Para mais informações, consulte Requisitos de sub-rede do conector.
Criar um notebook
Neste tutorial, você usa um notebook do Colab Enterprise para executar todo o código para definir a função remota do BigQuery e realizar a análise.
Para criar um notebook do Colab Enterprise usando o Google Cloud console:
No Google Cloud console, acesse a página Notebooks do Colab Enterprise:
No menu Região, selecione
us-central1. Essa é a mesma região em que você cria todos os serviços neste tutorial.Ao lado de Arquivos, clique em Criar um notebook.
O novo notebook aparece na guia Meus notebooks.
Para executar o código no novo notebook, insira uma nova célula de código no notebook para cada comando ou snippet de código que você quer executar.
Criar uma função remota do BigQuery
Uma das maneiras de definir uma função remota do BigQuery é usando a biblioteca bigframes. Nesta seção, use bigframes para criar uma função remota chamada process_incoming. Essa função remota extrai dados do Google Analytics como entrada, cria um comando e o envia ao modelo Gemma para análise.
No notebook do Colab Enterprise que você criou:
- Clique em + Código para inserir uma nova célula de código.
Copie o código a seguir na nova célula 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}")Substitua:
LOADBALANCER_IP_ADDRESS: o endereço IP e a porta do balanceador de carga interno que você criou anteriormente, por exemplo,10.128.05:8000.PROJECT_ID: o ID do projeto.VPC_CONNECTOR_NAME: o nome do conector de acesso VPC sem servidor que você criou anteriormente.
Neste tutorial, o local do conjunto de dados do BigQuery está definido como
US, que é definido como padrão para a regiãous-central1.Clique em Executar célula.
A saída mostra o nome da função semelhante ao seguinte:
The function name is: PROJECT_ID.ga_demo.ga_explain_example
Analisar o comportamento do usuário
Nesta seção, você analisa o comportamento do usuário no seu site usando a função remota process_incoming de uma das duas maneiras a seguir:
- usando BigQuery DataFrames
- usando a ferramenta de linha de comando
bqpara executar uma consulta diretamente em SQL.
Usar BigQuery DataFrames
Para executar a função remota usando BigQuery DataFrames no notebook do Colab Enterprise que você criou:
- Clique em + Código para inserir uma nova célula de código.
- Copie o código a seguir na nova célula de código e clique em Executar célula.
# 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)
A saída a seguir mostra os resultados de amostra da consulta:
| user_pseudo_id | string_value | event_timestamp | reverse_event_number | ga_history | resultados | eixo |
|---|---|---|---|---|---|---|
| 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 a ferramenta de linha de comando bq
Como alternativa, você pode usar a ferramenta de linha de comando bq para realizar análises diretamente usando SQL.
Para executar a função remota usando a ferramenta de linha de comando bq no notebook do Colab Enterprise que você criou:
- Clique em + Código para inserir uma nova célula de código.
Copie o código a seguir na nova célula de código e substitua
PROJECT_IDpelo ID do projeto.# 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}Clique em Executar célula.
A saída a seguir mostra os resultados de amostra da 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 loja de produtos oficiais 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"} |
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Para evitar cobranças na sua Google Cloud conta pelos recursos usados neste tutorial, exclua os recursos individuais.
- Exclua o notebook do Colab Enterprise.
- Exclua o ambiente de execução do Colab Enterprise.
- Exclua a função do BigQuery.
Verifique se a conta de serviço tem a permissão
bigquery.routines.delete. Para mais informações, consulte Permissões do BigQuery. - Exclua a conexão externa do BigQuery.
- Exclua as funções do Cloud Run.
- Exclua o cluster do GKE.
- Exclua o conector de VPC.
A seguir
- Faça um codelab prático para um caso de uso de análise de dados estruturados e não estruturados.
- Consulte Práticas recomendadas para executar cargas de trabalho em lote no GKE.
- Saiba mais sobre casos de uso de IA/ML no BigQuery.
- Saiba mais sobre casos de uso de IA/ML no GKE.