Este tutorial demonstra como obter estatísticas a partir de grandes conjuntos de dados através do BigQuery, do Cloud Run e do LLM Gemma. Neste tutorial, implementa uma aplicação de exemplo no Google Kubernetes Engine (GKE). A app de exemplo tira partido do BigQuery para o armazenamento e o tratamento de dados, do Cloud Run para o tratamento de pedidos e do MDG Gemma para analisar dados e gerar previsões com base em comandos recebidos.
Este tutorial destina-se a administradores e arquitetos da plataforma na nuvem, especialistas em dados e IA, engenheiros de ML> e profissionais de MLOps (DevOps). Antes de ler esta página, certifique-se de que conhece o Kubernetes e um ambiente de bloco de notas como o Jupyter.
Como pré-requisito para este tutorial, tem de concluir o tutorial Publicar modelos abertos Gemma com GPUs no GKE com o TGI do Hugging Face. A framework TGI facilita o processo de publicação de modelos.
Porquê o GKE e o BigQuery
O BigQuery é uma plataforma como serviço (PaaS), um armazém de dados sem servidor totalmente gerido que permite a análise escalável de petabytes de dados. O BigQuery permite-lhe focar-se na análise de dados para encontrar estatísticas significativas enquanto usa o SQL familiar e a aprendizagem automática integrada.
Ao usar GPUs no GKE com a TGI, pode implementar um modelo de linguagem Gemma para analisar e resumir as interações dos utilizadores em linguagem natural. Posteriormente, ao integrar o BigQuery com o GKE, pode usar o BigQuery para processar eficientemente conjuntos de dados massivos (como o Google Analytics) e as capacidades de compreensão da linguagem natural do modelo para gerar estatísticas significativas.
Por exemplo, como cientista de dados ou analista, ou como decisor empresarial numa empresa de comércio eletrónico, pode querer compreender o comportamento dos utilizadores no seu Website ou app. Esta estatística pode ajudar a otimizar e personalizar os percursos dos utilizadores, bem como a tomar decisões empresariais informadas para aumentar as vendas.
Neste cenário, pode usar dados não tratados do Google Analytics do BigQuery, introduzi-los no modelo Gemma e receber resumos de visitas às páginas e estatísticas em linguagem natural. O modelo Gemma, que é executado numa infraestrutura escalável com aceleração de GPU do GKE, processa rapidamente os dados do percurso do utilizador, identificando padrões e tendências. Pode obter informações para identificar combinações de produtos populares, revelar pontos de abandono comuns no processo de pagamento e realçar campanhas de marketing bem-sucedidas que geram tráfego para páginas de destino específicas.
Vantagens
Esta 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). Isto permite-lhe consultar e agregar os dados necessários para a análise do modelo.
- Aceleração de GPU: execute o modelo Gemma num cluster do GKE com suporte de GPU para acelerar o processo de inferência, gerando previsões muito mais rapidamente do que com os processadores baseados na CPU.
- Redução do custo e do tempo: poupe tempo e recursos usando o modelo de linguagem Gemma pré-preparado de código aberto, o que elimina a necessidade de criar um modelo personalizado de raiz.
Objetivos
Neste tutorial, vai aprender a:
- Implemente o modelo e exponha-o: crie um ficheiro YAML de serviço para definir um equilibrador de carga interno para aceder ao modelo Gemma.
- Crie uma função remota do BigQuery: execute código Python para definir uma função remota que recebe dados do Google Analytics, cria comandos para o modelo, envia pedidos para o ponto final do modelo através do equilibrador de carga e devolve a resposta do modelo.
- Configure a rede da nuvem virtual privada (VPC): configure uma rede da VPC e um conetor da VPC para permitir a comunicação segura entre o BigQuery e o cluster do GKE. Isto é fundamental para que a função remota aceda ao ponto final do modelo.
- Analisar dados: analise os dados através de DataFrames do BigQuery ou diretamente em SQL através da ferramenta de linha de comandos
bq
. Executar fragmentos de código fornecidos num bloco de notas do Colab Enterprise para:- Consultar dados do Google Analytics a partir do BigQuery através do SQL.
- Aplique a função remota aos dados para gerar estatísticas a partir do modelo Gemma.
- Apresentar os resultados.
Arquitetura
O diagrama de arquitetura seguinte mostra os componentes envolvidos e como interagem:
- Use um bloco de notas do Colab Enterprise para executar o seu código Python. Com o Python, pode usar a biblioteca bigframes para simplificar as suas interações SQL.
- O BigQuery funciona como o seu motor de processamento de grandes volumes de dados, permitindo a utilização do 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 para o GKE para inferência.
- Os resultados são enviados de volta para o BigQuery e apresentados numa tabela.
Custos
Neste documento, usa 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 custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
Certifique-se de que cumpre os seguintes pré-requisitos:
Selecione ou crie um projeto
Pode usar um projeto existente ou criar um novo para este tutorial.
- 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.
-
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
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.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
-
In the Google Cloud console, go to the IAM page.
Aceder ao IAM - Selecione o projeto.
- Clique em Conceder acesso.
-
No campo Novos responsáveis, introduza o identificador do utilizador. Normalmente, este é o endereço de email de uma Conta Google.
- Na lista Selecionar uma função, selecione uma função.
- Para conceder funções adicionais, clique em Adicionar outra função e adicione cada função adicional.
- Clique em Guardar.
- Substitua
PROJECT_ID
pelo ID do seu projeto. - Substitua
PROJECT_NUMBER
pelo número do seu projeto para criar o domínio da conta de serviço predefinida do Compute Engine para o seu projeto. Por exemplo,123456789012-compute@developer.gserviceaccount.com
. - Substitua
ROLE
por cada função individual. 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: 8000
Abra um novo terminal do Cloud Shell e execute o seguinte comando para aplicar o manifesto:
kubectl apply -f tgi-2b-lb-service.yaml
Obtenha o endereço IP do balanceador de carga. Pode ter de aguardar 1 a 2 minutos antes de poder obter este endereço IP:
kubectl get service llm-lb-service --output yaml | grep ip:
Na Google Cloud consola, aceda à página Blocos de notas do Colab Enterprise:
No menu Região, selecione
us-central1
. Esta é a mesma região onde cria todos os seus serviços neste tutorial.Junto a Ficheiros, clique em Criar um bloco de notas.
- Clique em + Código para inserir uma nova célula de código.
Copie o código seguinte 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 o seguinte:
LOADBALANCER_IP_ADDRESS
: o endereço IP e a porta do balanceador de carga interno que criou anteriormente, por exemplo,10.128.05:8000
.PROJECT_ID
: o ID do seu projeto.VPC_CONNECTOR_NAME
: o nome do conetor do Acesso a VPC sem servidor que criou anteriormente.
Neste tutorial, a localização do seu conjunto de dados do BigQuery está definida como
US
,us-central1
que é predefinida para a regiãous-central1
.Clique em
Executar célula.- usando DataFrames do BigQuery
- Usando a ferramenta de linha de comandos
bq
para executar uma consulta diretamente em SQL. - Clique em + Código para inserir uma nova célula de código.
- Copie o seguinte código na nova célula de código e clique em Executar célula.
- Clique em + Código para inserir uma nova célula de código.
Copie o código seguinte na nova célula de código e substitua
PROJECT_ID
pelo ID do seu 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.- Elimine o seu bloco de notas do Colab Enterprise.
- Elimine o tempo de execução do Colab Enterprise.
- Elimine a função do BigQuery.
Certifique-se de que a sua conta de serviço tem a autorização
bigquery.routines.delete
. Para mais informações, consulte as autorizações do BigQuery. - Elimine a ligação externa do BigQuery.
- Elimine as suas funções do Cloud Run.
- Elimine o cluster do GKE.
- Elimine o conetor de VPC.
- Experimente um codelab prático para um exemplo de utilização de análise de dados estruturados e não estruturados.
- Consulte as práticas recomendadas para executar cargas de trabalho em lote no GKE.
- Saiba mais sobre os exemplos de utilização de IA/ML no BigQuery.
- Saiba mais acerca dos exemplos de utilização da IA/ML no GKE.
Ative as APIs
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin
), which
contains the serviceusage.services.enable
permission. Learn how to grant
roles.
Configure o Cloud Shell
Neste tutorial, vai usar o Cloud Shell para executar comandos gcloud
e kubectl
. O Cloud Shell é um ambiente de shell para gerir recursos alojados no Google Cloud. Vem pré-instalado com a
CLI do Google Cloud e a ferramenta de linha de comandos kubectl.
In the Google Cloud console, activate Cloud Shell.
É aberta uma sessão do Cloud Shell num frame na parte inferior da consola.
Antes de executar comandos neste tutorial, certifique-se de que o projeto predefinido está definido como o ID do projeto onde quer implementar a app de exemplo. Se ainda não estiver definido, execute o seguinte comando no Cloud Shell:
gcloud config set project PROJECT_ID
Substitua PROJECT_ID
pelo seu ID do projeto.
Conceda funções de IAM
Certifique-se de que a sua conta de utilizador e a conta de serviço predefinida do Compute Engine no seu projeto têm as funções de gestão de identidade e de acesso (IAM) necessárias para este tutorial.
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
Grant the roles
Conceda funções à conta de serviço predefinida do Compute Engine. Execute o seguinte comando uma vez para cada uma das seguintes funções 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
Implemente um modelo Gemma
Aceda ao tutorial Apresente modelos abertos Gemma com GPUs no GKE com o TGI do Hugging Face e siga as instruções a partir de Antes de começar até Interaja com o modelo através do curl para garantir que o seu modelo Gemma é implementado com êxito e que pode interagir com ele.
Para efeitos deste tutorial, implemente o modelo Gemma 2B-it.
Configure a rede de VPC
Crie ou use a rede VPC
na região us-central1
para que a sua função remota possa ligar-se ao cluster do GKE.
Neste tutorial, use a VPC Default
.
Para garantir que o conjunto de dados do BigQuery, a função remota e as funções do Cloud Run subjacentes são implementados em localizações compatíveis, a rede VPC tem de estar na mesma região que a função remota do BigQuery.
Neste tutorial, quando define as opções dos DataFrames do BigQuery
ao criar uma função remota, especifica US
como
uma localização para o seu conjunto de dados, que é predefinida para a região us-central1
para as suas
funções do Cloud Run. Por conseguinte, crie ou use a VPC na região us-central1
.
Crie um balanceador de carga
Siga estas instruções para criar um balanceador de carga interno no seu cluster do GKE:
Vai usar este endereço IP para comunicar com a sua aplicação gemma-server
que está a ser executada atrás do equilibrador de carga.
Crie um conetor
Usa um conetor do Acesso a VPC sem servidor para enviar e receber pedidos através da sua rede VPC sem usar a Internet pública. Para mais informações, consulte o artigo Acesso a VPC sem servidor.
Neste tutorial, cria um conector com uma sub-rede nova e dedicada para evitar conflitos de endereços IP com recursos existentes na VPC. Para ver instruções,
consulte a secção Crie um conetor
e siga as instruções gcloud
da secção Crie um conetor e uma nova sub-rede.
Em alternativa, se quiser usar uma sub-rede existente, siga as instruções na secção Crie um conector com uma sub-rede existente.
Para mais informações, consulte os requisitos da sub-rede do conetor.
Crie um notebook
Neste tutorial, vai usar um bloco de notas 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 bloco de notas do Colab Enterprise através da Google Cloud consola:
O novo bloco de notas é apresentado no separador Os meus blocos de notas.
Para executar código no novo bloco de notas, insira uma nova célula de código no bloco de notas para cada comando ou fragmento de código que quer executar.
Crie uma função remota do BigQuery
Uma das formas de definir uma função remota do BigQuery é usar a biblioteca bigframes
. Nesta secção, use bigframes
para criar uma função remota
denominada process_incoming
. Esta função remota usa os dados do Google Analytics como entrada, cria um comando e envia-o para o seu modelo Gemma para análise.
No bloco de notas do Colab Enterprise que criou:
O resultado apresenta o nome da função de forma semelhante ao seguinte:
The function name is: PROJECT_ID.ga_demo.ga_explain_example
Analise o comportamento dos utilizadores
Nesta secção, analisa o comportamento do utilizador no seu Website através da process_incoming
função remota de uma das seguintes duas formas:
Use DataFrames do BigQuery
Para executar a função remota através de DataFrames do BigQuery no bloco de notas do Colab Enterprise que criou:
# 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 seguinte mostra os resultados de exemplo 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... |
Use a ferramenta de linha de comandos bq
Em alternativa, pode usar a ferramenta de linha de comandos bq
para fazer a análise diretamente
com SQL.
Para executar a função remota através da ferramenta de linha de comandos bq
no bloco de notas do Colab Enterprise que criou:
A saída seguinte mostra os resultados de exemplo da consulta:
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":"Resposta:\n A página mais popular foi https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee\n A página seguinte mais popular foi a página de origem.\n\n Explicação:\n\nOs dados fornecidos mostram que o utilizador atual visitou a loja de merchandise da Google especificamente para o produto "Google Dino Game Tee". \n \nConsiderações importantes:\n\n* Interpretação de dados: não pode afirmar definitivamente que o"} |
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 incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste tutorial, elimine os recursos individuais.