このチュートリアルでは、BigQuery、Cloud Run、Gemma LLM を使用して、大規模なデータセットから分析情報を導き出す方法について説明します。このチュートリアルでは、サンプル アプリケーションを Google Kubernetes Engine(GKE)にデプロイします。サンプルアプリは、データの保存と処理に BigQuery、リクエスト処理に Cloud Run、データの分析と受信プロンプトに基づく予測の生成に Gemma LLM を利用します。
このチュートリアルは、クラウド プラットフォームの管理者とアーキテクト、データと AI のスペシャリスト、ML エンジニア、MLOps(DevOps)の専門家を対象としています。このページを読む前に、Kubernetes とノートブック環境(Jupyter など)に精通している必要があります。
このチュートリアルの前提条件として、GKE の GPU で Hugging Face TGI を使用して Gemma オープンモデルを提供するチュートリアルを完了する必要があります。TGI フレームワークは、モデル サービング プロセスを容易にします。
GKE と BigQuery を選ぶ理由
BigQuery は、ペタバイト規模のデータに対するスケーラブルな分析を実現する、Platform as a Service(PaaS)のフルマネージド サーバーレス データ ウェアハウスです。BigQuery では、使い慣れた SQL と組み込みの ML を使用して、有用な分析情報を得るためのデータ分析に集中できます。
GKE の GPU で TGI を使用すると、Gemma 言語モデルをデプロイして、ユーザー操作を自然言語で分析して要約できます。その後、BigQuery を GKE と統合することで、BigQuery を使用して大量のデータセット(Google アナリティクスなど)を効率的に処理し、モデルの自然言語理解機能を使用して有意な分析情報を生成できます。
たとえば、データ サイエンティスト、アナリスト、または e コマース企業のビジネス上の意思決定者であれば、ウェブサイトやアプリでのユーザー行動を把握したいと考えるでしょう。この分析情報は、ユーザー ジャーニーを最適化してパーソナライズし、情報に基づいたビジネス上の意思決定を行って売り上げを伸ばすのに役立ちます。
このシナリオでは、BigQuery から未加工の Google アナリティクス データを取得し、Gemma モデルにフィードして、ページ訪問の概要と分析情報を自然言語で受け取ることができます。Gemma モデルは、GKE の GPU アクセラレーションを備えたスケーラブルなインフラストラクチャで実行され、ユーザー ジャーニー データを迅速に処理してパターンとトレンドを特定します。インサイトを活用して、人気のある商品の組み合わせを特定したり、購入手続きの一般的な離脱ポイントを明らかにしたり、特定のランディング ページにトラフィックを誘導している成功したマーケティング キャンペーンをハイライトしたりできます。
利点
このソリューションは、次のメリットがある効率的なワークフローを提供します。
- BigQuery との統合: BigQuery を使用して、大規模なデータセット(このチュートリアルの Google アナリティクス データなど)を保存、処理します。これにより、モデルの分析に必要なデータをクエリして集計できます。
- GPU アクセラレーション: GPU をサポートする GKE クラスタで Gemma モデルを実行すると、推論プロセスが高速化され、CPU ベースのプロセッサよりもはるかに高速に予測を生成できます。
- 費用と時間を削減: オープンソースの事前トレーニング済み Gemma 言語モデルを使用して時間とリソースを節約し、カスタムモデルをゼロから構築する必要がなくなります。
目標
このチュートリアルでは、以下の方法について学習します。
- モデルをデプロイして公開する: サービス YAML ファイルを作成して、Gemma モデルにアクセスする内部ロードバランサを定義します。
- BigQuery リモート関数を作成する: Python コードを実行して、Google アナリティクス データを取得し、モデルのプロンプトを構築し、ロードバランサを使用してモデルのエンドポイントにリクエストを送信し、モデルのレスポンスを返すリモート関数を定義します。
- Virtual Private Cloud(VPC)ネットワークを構成する: VPC ネットワークと VPC コネクタを設定して、BigQuery と GKE クラスタ間の安全な通信を可能にします。これは、リモート関数がモデル エンドポイントにアクセスするために重要です。
- データを分析する: BigQuery DataFrame を使用してデータを分析するか、
bq
コマンドライン ツールを使用して SQL で直接データを分析します。提供されたコード スニペットを Colab Enterprise ノートブックで実行して、次の操作を行います。- SQL を使用して BigQuery から Google アナリティクス データをクエリする。
- リモート関数をデータに適用して、Gemma モデルから分析情報を生成します。
- 結果を表示します。
アーキテクチャ
次のアーキテクチャ図は、関係するコンポーネントとそれらの相互作用を示しています。
- Colab Enterprise ノートブックを使用して Python コードを実行します。Python では、bigframes ライブラリを使用して SQL の操作を簡素化できます。
- BigQuery はビッグデータ処理エンジンとして機能し、SQL を使用してデータとやり取りできます。
- リモート関数は Cloud Run 関数を呼び出します。データは自動的にリモート関数に転送され、そこで準備されて GKE に送信され、推論されます。
- 結果は BigQuery に戻され、表に表示されます。
料金
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- Compute Engine instances used by GKE
- GPU resources used by GKE
- BigQuery
- Cloud Load Balancing
- Cloud Run functions
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
次の前提条件を満たしていることを確認してください。
プロジェクトの選択または作成
既存のプロジェクトを使用することも、このチュートリアル用の新しいプロジェクトを作成することもできます。
- 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.
-
Make sure 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.
-
Make sure that billing is enabled for your Google Cloud project.
API を有効にする
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.
Cloud Shell を設定する
このチュートリアルでは、Cloud Shell を使用して gcloud
コマンドと kubectl
コマンドを実行します。Google Cloud Shell は、Google Cloud でホストされているリソースを管理するためのシェル環境です。Google Cloud CLI と kubectl コマンドライン ツールがプリインストールされています。
In the Google Cloud console, activate Cloud Shell.
コンソールの下部にあるフレーム内で Cloud Shell セッションが開きます。
このチュートリアルでコマンドを実行する前に、デフォルト プロジェクトがサンプルアプリをデプロイするプロジェクト ID に設定されていることを確認します。まだ設定していない場合は、Cloud Shell で次のコマンドを実行します。
gcloud config set project PROJECT_ID
PROJECT_ID
を実際のプロジェクト ID に置き換えます。
IAM ロールを付与する
ユーザー アカウントとプロジェクト内の Compute Engine のデフォルトのサービス アカウントに、このチュートリアルに必要な Identity and Access Management(IAM)ロールがあることを確認します。
Grant roles to your user account. Run the following command once for each of the following
IAM roles:
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
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
Compute Engine のデフォルト サービス アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。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
PROJECT_ID
を実際のプロジェクト ID に置き換えます。PROJECT_NUMBER
はプロジェクト番号に置き換えて、プロジェクトの Compute Engine のデフォルトのサービス アカウント ドメインを作成します。(例:123456789012-compute@developer.gserviceaccount.com
)です。ROLE
は、個々のロールに置き換えます。
Gemma モデルを提供する
チュートリアルの GKE の GPU で Hugging Face TGI を使用して Gemma オープンモデルを提供するに移動し、始める前にから curl を使用してモデルを操作するまで手順に沿って操作し、Gemma モデルが正常にデプロイされ、操作できることを確認します。
このチュートリアルでは、Gemma 2B-it モデルをデプロイします。
VPC ネットワークを設定する
リモート関数が GKE クラスタに接続できるように、us-central1
リージョンに VPC ネットワークを作成または使用します。このチュートリアルでは、Default
VPC を使用します。
BigQuery データセット、リモート関数、基盤となる Cloud Run 関数が互換性のあるロケーションにデプロイされるようにするには、VPC ネットワークが BigQuery リモート関数と同じリージョンにある必要があります。このチュートリアルでは、リモート関数を作成するときに BigQuery DataFrames オプションを設定するときに、データセットのロケーションとして US
を指定します。これは、デフォルトで Cloud Run 関数の us-central1
リージョンになります。したがって、us-central1
リージョンに VPC を作成するか、VPC を使用します。
ロードバランサの作成
GKE クラスタに内部ロードバランサを作成するには、次の操作を行います。
次の
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
新しい Cloud Shell ターミナルを開き、次のコマンドを実行してマニフェストを適用します。
kubectl apply -f tgi-2b-lb-service.yaml
ロードバランサの IP アドレスを取得します。この IP アドレスを取得できるようになるまで 1 ~ 2 分ほどかかることがあります。
kubectl get service llm-lb-service --output yaml | grep ip:
この IP アドレスを使用して、ロードバランサの背後で実行されている gemma-server
アプリケーションと通信します。
コネクタを作成
サーバーレス VPC アクセス コネクタを使用すると、公共のインターネットを使用せずに VPC ネットワークを介してリクエストを送受信できます。詳細については、サーバーレス VPC アクセスをご覧ください。
このチュートリアルでは、VPC 内の既存のリソースとの IP アドレスの競合を回避するために、新しい専用サブネットを持つコネクタを作成します。手順については、コネクタを作成するセクションを参照し、コネクタと新しいサブネットを作成するセクションの gcloud
の手順に沿って操作します。
既存のサブネットを使用する場合は、既存のサブネットを使用してコネクタを作成するの手順に沿って操作します。
詳細については、コネクタのサブネットの要件をご覧ください。
ノートブックを作成する
このチュートリアルでは、Colab Enterprise ノートブックを使用して、BigQuery リモート関数を定義し、分析を実行するすべてのコードを実行します。
Google Cloud コンソールを使用して Colab Enterprise ノートブックを作成するには:
Google Cloud コンソールで、[Colab Enterprise の [ノートブック]] ページに移動します。
[リージョン] メニューで [
us-central1
] を選択します。これは、このチュートリアルですべてのサービスを作成するリージョンと同じです。[ファイル] の横にある [ノートブックを作成] をクリックします。
新しいノートブックが [マイ ノートブック] タブに表示されます。
新しいノートブックでコードを実行するには、実行するコマンドまたはコード スニペットごとにノートブックに新しいコードセルを挿入します。
BigQuery リモート関数を作成する
BigQuery リモート関数を定義する方法の一つは、bigframes
ライブラリを使用する方法です。このセクションでは、bigframes
を使用して process_incoming
というリモート関数を作成します。このリモート関数は、Google アナリティクスのデータを入力として受け取り、プロンプトを作成して Gemma モデルに送信し、分析を行います。
作成した Colab Enterprise ノートブックで、次の操作を行います。
- [+ コード] をクリックして、新しいコードセルを挿入します。
新しいコードセルに次のコードをコピーします。
# 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( [str], str, dataset="ga_demo", name="ga_explain_example", bigquery_connection="bigframes-rf-conn", reuse=True, packages=["requests"], cloud_function_vpc_connector=VPC_CONNECTOR_NAME ) def process_incoming(data): 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}")
次のように置き換えます。
LOADBALANCER_IP_ADDRESS
: 前に作成した内部ロードバランサの IP アドレスとポート(例:10.128.05:8000
)。PROJECT_ID
: プロジェクト ID。VPC_CONNECTOR_NAME
: 前に作成したサーバーレス VPC アクセス コネクタの名前。
このチュートリアルでは、BigQuery データセットのロケーションは
US
に設定されています。これはデフォルトでus-central1
リージョンになります。[ Run cell] をクリックします。
出力には、次のような関数名が表示されます。
The function name is: PROJECT_ID.ga_demo.ga_explain_example
ユーザー行動を分析する
このセクションでは、次の 2 つの方法のいずれかで process_incoming
リモート関数を使用して、ウェブサイト上のユーザーの行動を分析します。
- BigQuery DataFrames を使用する
bq
コマンドライン ツールを使用して SQL で直接クエリを実行する。
BigQuery DataFrames を使用する
作成した Colab Enterprise ノートブックで BigQuery DataFrames を使用してリモート関数を実行するには:
- [+ コード] をクリックして、新しいコードセルを挿入します。
- 新しいコードセルに次のコードをコピーし、[ セルを実行] をクリックします。
# 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)
次の出力は、クエリのサンプル結果を示しています。
user_pseudo_id | string_value | event_timestamp | reverse_event_number | ga_history | 結果 | 軸 |
---|---|---|---|---|---|---|
0 | 2342103247.0307162928 | https://shop.googlemerchandisestore.com/Google... | 1612096237169825 | 2 | {"user_pseudo_id":"2342103247.0307162928","str... | {"generated_text":"\n '次の項目... |
1 | 48976087.6959390698 | https://www.googlemerchandisestore.com/ | 1612056537823270 | 2 | {"user_pseudo_id":"48976087.6959390698","strin... | {"generated_text":"\n \n ```python\n imp... |
bq
コマンドライン ツールを使用する
または、bq
コマンドライン ツールを使用して、SQL を使用して直接分析を実行することもできます。
作成した Colab Enterprise ノートブックで bq
コマンドライン ツールを使用してリモート関数を実行するには:
- [+ コード] をクリックして、新しいコードセルを挿入します。
新しいコードセルに次のコードをコピーし、
PROJECT_ID
をプロジェクト 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}
[ Run cell] をクリックします。
次の出力は、クエリのサンプル結果を示しています。
user_pseudo_id | string_value | event_timestamp | reverse_event_number | 結果 |
---|---|---|---|---|
86037838.0267811614 | https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee | 1612128627715585 | 1 | {"generated_text":"回答:\n 最もアクセスされたページは https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee でした。\n 次にアクセスされたページは、ユーザーがアクセスしてきたページです。\n\n 説明:\n\n 提供されたデータから、現在のユーザーは「Google Dino Game Tee」の商品を目的として Google のグッズストアにアクセスしたことがわかります。\n \n重要な考慮事項:\n\n* データの解釈: 以下のことは明言できません。"} |
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"} |
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
このチュートリアルで使用したリソースについて、Google Cloud アカウントに料金を請求されないようにするには、個々のリソースを削除します。
- Colab Enterprise ノートブックを削除します。
- Colab Enterprise ランタイムを削除します。
- BigQuery 関数を削除します。サービス アカウントに
bigquery.routines.delete
権限があることを確認します。詳細については、BigQuery の権限をご覧ください。 - BigQuery の外部接続を削除します。
- Cloud Run 関数を削除します。
- GKE クラスタを削除する。
- VPC コネクタを削除します。
次のステップ
- 構造化データと非構造化データの分析ユースケースに関するハンズオン コードラボをお試しください。
- GKE でバッチ ワークロードを実行するためのベスト プラクティスをご覧ください。
- BigQuery での AI/ML のユースケースの詳細を確認する。
- GKE での AI/ML のユースケースの詳細を確認する。