In dieser Anleitung wird gezeigt, wie Sie mit BigQuery, Cloud Run und dem Gemma LLM Erkenntnisse aus großen Datasets gewinnen. In dieser Anleitung stellen Sie eine Beispielanwendung in Google Kubernetes Engine (GKE) bereit. Die Beispiel-App nutzt BigQuery für die Datenspeicherung und -verarbeitung, Cloud Run für die Verarbeitung von Anfragen und das Gemma-LLM für die Analyse von Daten und die Generierung von Vorhersagen auf Grundlage eingehender Prompts.
Diese Anleitung richtet sich an Cloud Platform-Administratoren und -Architekten, Data & AI-Spezialisten, ML-Entwickler und MLOps-Experten (DevOps). Machen Sie sich vor dem Lesen dieser Seite mit Kubernetes und einer Notebook-Umgebung wie Jupyter vertraut.
Als Voraussetzung für diese Anleitung müssen Sie die Anleitung Offene Gemma-Modelle mit GPUs in GKE mit Hugging Face TGI bereitstellen durcharbeiten. Das TGI-Framework erleichtert die Bereitstellung von Modellen.
Warum GKE und BigQuery?
BigQuery ist ein vollständig verwaltetes, serverloses Data Warehouse Platform as a Service (PaaS)), das skalierbare Analysen von Petabytes an Daten ermöglicht. Mit BigQuery können Sie sich auf die Datenanalyse konzentrieren und wichtige Informationen erhalten. Dabei können Sie vertraute SQL-Funktionen und integriertes maschinelles Lernen nutzen.
Wenn Sie GPUs in GKE mit TGI verwenden, können Sie ein Gemma-Sprachmodell bereitstellen, um Nutzerinteraktionen in natürlicher Sprache zu analysieren und zusammenzufassen. Wenn Sie BigQuery in GKE einbinden, können Sie BigQuery verwenden, um riesige Datasets (z. B. Google Analytics) effizient zu verarbeiten und die Funktionen des Modells zur Verarbeitung natürlicher Sprache zu nutzen, um aussagekräftige Statistiken zu generieren.
Als Data Scientist, Analyst oder Entscheidungsträger in einem E-Commerce-Unternehmen möchten Sie beispielsweise das Nutzerverhalten auf Ihrer Website oder in Ihrer App analysieren. Diese Informationen können Ihnen helfen, Nutzerpfade zu optimieren und zu personalisieren und fundierte Geschäftsentscheidungen zu treffen, um den Umsatz zu steigern.
In diesem Szenario könnten Sie Google Analytics-Rohdaten aus BigQuery verwenden, sie in das Gemma-Modell einfügen und Zusammenfassungen von Seitenbesuchen und Statistiken in natürlicher Sprache erhalten. Das Gemma-Modell, das auf einer skalierbaren Infrastruktur mit GPU-Beschleunigung von GKE ausgeführt wird, verarbeitet schnell Daten zum Nutzerverhalten und identifiziert Muster und Trends. Sie können beliebte Produktkombinationen ermitteln, häufige Abbruchpunkte im Kaufvorgang aufdecken und erfolgreiche Marketingkampagnen hervorheben, mit denen Traffic auf bestimmte Landingpages gelenkt wird.
Vorteile
Diese Lösung bietet einen optimierten Workflow mit den folgenden Vorteilen:
- BigQuery-Integration: Mit BigQuery können Sie große Datasets (wie die Google Analytics-Daten in diesem Tutorial) speichern und verarbeiten. So können Sie die Daten abfragen und zusammenfassen, die für die Analyse des Modells erforderlich sind.
- GPU-Beschleunigung: Führen Sie das Gemma-Modell in einem GKE-Cluster mit GPU-Unterstützung aus, um den Inferenzprozess zu beschleunigen. So werden Vorhersagen viel schneller als mit CPU-basierten Prozessoren generiert.
- Geringere Kosten und weniger Zeitaufwand: Mit dem Open-Source-Sprachmodell Gemma, das bereits vortrainiert ist, sparen Sie Zeit und Ressourcen, da Sie kein benutzerdefiniertes Modell von Grund auf neu erstellen müssen.
Gemma-Modell bereitstellen
Rufen Sie das Tutorial Offene Gemma-Modelle mit GPUs in GKE mit Hugging Face TGI bereitstellen auf und folgen Sie der Anleitung von Vorbereitung bis Mit dem Modell über curl interagieren, um sicherzustellen, dass Ihr Gemma-Modell erfolgreich bereitgestellt wurde und Sie damit interagieren können.
Stellen Sie für diese Anleitung das Modell Gemma 2B-it bereit.
VPC-Netzwerk einrichten
VPC-Netzwerk in der Region us-central1
erstellen oder verwenden, damit Ihre Remote-Funktion eine Verbindung zum GKE-Cluster herstellen kann.
Verwenden Sie in dieser Anleitung die VPC Default
.
Damit Ihr BigQuery-Dataset, Ihre Remote-Funktion und die zugrunde liegenden Cloud Run-Funktionen an kompatiblen Standorten bereitgestellt werden, muss sich das VPC-Netzwerk in derselben Region wie Ihre BigQuery-Remote-Funktion befinden.
In diesem Tutorial geben Sie beim Festlegen von BigQuery DataFrames-Optionen beim Erstellen einer Remote-Funktion US
als Speicherort für Ihr Dataset an. Dies ist standardmäßig die Region us-central1
für Ihre Cloud Run-Funktionen. Erstellen oder verwenden Sie die VPC daher in der Region us-central1
.
Load-Balancer erstellen
So erstellen Sie einen internen Load-Balancer in Ihrem GKE-Cluster:
Erstellen Sie das folgende
tgi-2b-lb-service.yaml
-Manifest: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
Öffnen Sie ein neues Cloud Shell-Terminal und führen Sie den folgenden Befehl aus, um das Manifest anzuwenden:
kubectl apply -f tgi-2b-lb-service.yaml
Rufen Sie die IP-Adresse des Load-Balancers ab. Es kann 1 bis 2 Minuten dauern, bis diese IP-Adresse abgerufen werden kann:
kubectl get service llm-lb-service --output yaml | grep ip:
Sie verwenden diese IP-Adresse, um mit Ihrer gemma-server
-Anwendung zu kommunizieren, die hinter dem Load-Balancer ausgeführt wird.
Connector erstellen
Sie verwenden einen Connector für Serverloser VPC-Zugriff, um Anfragen über Ihr VPC-Netzwerk zu senden und zu empfangen, ohne das öffentliche Internet zu verwenden. Weitere Informationen finden Sie unter Serverless VPC Access.
In dieser Anleitung erstellen Sie einen Connector mit einem neuen, dedizierten Subnetz, um IP-Adresskonflikte mit vorhandenen Ressourcen in der VPC zu vermeiden. Eine Anleitung finden Sie im Abschnitt Connector erstellen. Folgen Sie der Anleitung gcloud
im Abschnitt Connector und neues Subnetz erstellen.
Wenn Sie ein vorhandenes Subnetz verwenden möchten, folgen Sie der Anleitung im Abschnitt Connector mit einem vorhandenen Subnetz erstellen.
Weitere Informationen finden Sie unter Anforderungen an Connector-Subnetze.
Notebook erstellen
In dieser Anleitung verwenden Sie ein Colab Enterprise-Notebook, um den gesamten Code zum Definieren der BigQuery-Remote-Funktion und zum Ausführen der Analyse auszuführen.
So erstellen Sie ein Colab Enterprise-Notebook mithilfe der Google Cloud Console:
Rufen Sie in der Google Cloud Console die Seite Colab Enterprise-Notebooks auf:
Wählen Sie im Menü Region die Option
us-central1
aus. Dies ist dieselbe Region, in der Sie alle Ihre Dienste in dieser Anleitung erstellen.Klicken Sie neben Dateien auf Notebook erstellen.
Ihr neues Notebook wird auf dem Tab Meine Notebooks angezeigt.
Wenn Sie Code in Ihrem neuen Notebook ausführen möchten, fügen Sie für jeden Befehl oder jedes Code-Snippet, das Sie ausführen möchten, eine neue Codezelle in Ihr Notebook ein.
BigQuery-Remote-Funktion erstellen
Eine Möglichkeit, eine BigQuery-Remote-Funktion zu definieren, ist die Verwendung der bigframes
-Bibliothek. In diesem Abschnitt verwenden Sie bigframes
, um eine Remote-Funktion namens process_incoming
zu erstellen. Diese Remote-Funktion verwendet Google Analytics-Daten als Eingabe, erstellt einen Prompt und sendet ihn zur Analyse an Ihr Gemma-Modell.
Gehen Sie in dem von Ihnen erstellten Colab Enterprise-Notebook so vor:
- Klicken Sie auf + Code, um eine neue Codezelle einzufügen.
Kopieren Sie den folgenden Code in die neue Codezelle:
# 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}")
Ersetzen Sie Folgendes:
LOADBALANCER_IP_ADDRESS
: die IP-Adresse und der Port des internen Load-Balancers, den Sie zuvor erstellt haben, z. B.10.128.05:8000
.PROJECT_ID
: Ihre Projekt-ID.VPC_CONNECTOR_NAME
: der Name des Connectors für serverlosen VPC-Zugriff, den Sie zuvor erstellt haben.
In dieser Anleitung ist der Speicherort Ihres BigQuery-Datasets auf
US
festgelegt, was standardmäßig der Regionus-central1
entspricht.Klicken Sie auf
Zelle ausführen.
In der Ausgabe wird der Name der Funktion in etwa so angezeigt:
The function name is: PROJECT_ID.ga_demo.ga_explain_example
Nutzerverhalten analysieren
In diesem Abschnitt analysieren Sie das Nutzerverhalten auf Ihrer Website mit der process_incoming
-Remote-Funktion. Dazu haben Sie zwei Möglichkeiten:
- BigQuery DataFrames verwenden
- mit dem
bq
-Befehlszeilentool eine Abfrage direkt in SQL ausführen.
BigQuery DataFrames verwenden
So führen Sie die Remote-Funktion mit BigQuery DataFrames im erstellten Colab Enterprise-Notebook aus:
- Klicken Sie auf + Code, um eine neue Codezelle einzufügen.
- Kopieren Sie den folgenden Code in die neue Codezelle und klicken Sie auf Zelle ausführen.
# 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)
Die folgende Ausgabe zeigt die Beispielergebnisse der Abfrage:
user_pseudo_id | string_value | event_timestamp | reverse_event_number | ga_history | Ergebnisse | Achse |
---|---|---|---|---|---|---|
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... |
bq
-Befehlszeilentool verwenden
Alternativ können Sie das bq
-Befehlszeilentool verwenden, um Analysen direkt mit SQL durchzuführen.
So führen Sie die Remote-Funktion mit dem bq
-Befehlszeilentool im erstellten Colab Enterprise-Notebook aus:
- Klicken Sie auf + Code, um eine neue Codezelle einzufügen.
Kopieren Sie den folgenden Code in die neue Codezelle und ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.# 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}
Klicken Sie auf
Zelle ausführen.
Die folgende Ausgabe zeigt die Beispielergebnisse der Abfrage:
user_pseudo_id | string_value | event_timestamp | reverse_event_number | Ergebnis |
---|---|---|---|---|
86037838.0267811614 | https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee | 1612128627715585 | 1 | {"generated_text":"Answer:\n The most popular page was https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee\n The next most popular page was the page they came from.\n\n Explanation:\n\nThe provided data shows that the current user visited Google's merchandise store specifically for the product "Google Dino Game Tee." \n \nWichtige Überlegungen:\n\n* Dateninterpretation:Sie können nicht definitiv sagen, dass die"} |
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"} |