本教學課程說明如何使用 BigQuery、Cloud Run 和 Gemma LLM,從大型資料集擷取洞察資訊。在本教學課程中,您會將範例應用程式部署至 Google Kubernetes Engine (GKE)。範例應用程式會使用 BigQuery 儲存及處理資料、Cloud Run 處理要求,以及 Gemma LLM 分析資料,並根據傳入的提示生成預測結果。
本教學課程適用於雲端平台管理員和架構師、資料和 AI 專家、機器學習工程師,以及機器學習運作 (DevOps) 專業人員。閱讀本頁內容前,請先熟悉 Kubernetes 和 Jupyter 等筆記本環境。
完成「透過 Hugging Face TGI 在 GKE 上使用 GPU 提供 Gemma 開放式模型」教學課程,是本教學課程的先決條件。TGI 架構可簡化提供模型程序。
為何選擇 GKE 和 BigQuery
BigQuery 是平台即服務 (PaaS),提供全代管無伺服器資料倉儲,可對 PB 級資料進行可擴充的分析。BigQuery 可讓您專注於分析資料,找出有意義的洞察資訊,同時使用熟悉的 SQL 和內建機器學習功能。
在 GKE 上搭配 TGI 使用 GPU,即可部署 Gemma 語言模型,以自然語言分析及摘要使用者互動。隨後,只要將 BigQuery 與 GKE 整合,就能使用 BigQuery 有效率地處理龐大的資料集 (例如 Google Analytics),並運用模型的自然語言理解功能產生有意義的洞察資料。
舉例來說,如果您是電子商務公司的資料科學家、分析師或業務決策者,可能會想瞭解網站或應用程式的使用者行為。這類洞察資料有助於最佳化及個人化使用者歷程,並做出明智的業務決策來提高銷售量。
在這種情況下,您可以從 BigQuery 取得原始 Google Analytics 資料,提供給 Gemma 模型,然後以自然語言取得網頁造訪摘要和洞察資料。Gemma 模型在 GKE 的 GPU 加速可擴充基礎架構上執行,可快速處理使用者歷程資料,找出模式和趨勢。您可以取得洞察資料,找出熱銷產品組合、揭露結帳程序中常見的流失點,以及醒目顯示可將流量帶往特定到達網頁的成功行銷廣告活動。
優點
這項解決方案提供精簡的工作流程,並具備下列優點:
- BigQuery 整合:使用 BigQuery 儲存及處理大型資料集 (例如本教學課程中的 Google Analytics 資料)。您可以查詢及彙整模型分析所需的資料。
- GPU 加速:在支援 GPU 的 GKE 叢集上執行 Gemma 模型,加快推論程序,預測速度遠比 CPU 型處理器快。
- 降低成本和時間:使用開放原始碼、預先訓練的 Gemma 語言模型,節省時間和資源,不必從頭建構自訂模型。
目標
在本教學課程中,您將瞭解以下內容:
- 部署模型並公開:建立服務 YAML 檔案,定義內部負載平衡器,以便存取 Gemma 模型。
- 建立 BigQuery 遠端函式:執行 Python 程式碼,定義遠端函式,該函式會接收 Google Analytics 資料、建構模型提示、使用負載平衡器將要求傳送至模型端點,並傳回模型的回覆。
- 設定虛擬私有雲 (VPC) 網路:設定虛擬私有雲網路和 VPC 連接器,在 BigQuery 和 GKE 叢集之間建立安全通訊。這項設定對遠端函式存取模型端點至關重要。
- 分析資料:使用 BigQuery DataFrames 分析資料,或使用
bq指令列工具直接在 SQL 中分析資料。在 Colab Enterprise 筆記本中執行提供的程式碼片段,即可:- 使用 SQL 查詢 BigQuery 中的 Google Analytics 資料。
- 將遠端函式套用至資料,從 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
您可以使用 Pricing Calculator,根據預測用量估算費用。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。
事前準備
請務必完成下列事前準備工作:
選取或建立專案
您可以使用現有專案,或為本教學課程建立新專案。
- 登入 Google Cloud 帳戶。如果您未曾使用過 Google Cloud,歡迎 建立帳戶,親自體驗實際使用我們產品的成效。新客戶還能獲得價值 $300 美元的免費抵免額,能用於執行、測試及部署工作負載。
-
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.
啟用 API
啟用 Artifact Registry、Compute Engine、GKE、IAM 服務帳戶憑證、Cloud Functions、Cloud Build、Cloud Run Admin、Cloud Logging、無伺服器 VPC 存取權、BigQuery、Dataform、Vertex AI API (如有尚未啟用的項目)。
啟用 API 時所需的角色
如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
設定 Cloud Shell
在本教學課程中,您會使用 Cloud Shell 執行 gcloud 和 kubectl 指令。Cloud Shell 是一種殼層環境,可用來管理託管於 Google Cloud的資源。這個環境已預先安裝 Google Cloud CLI 和 kubectl 指令列工具。
在 Google Cloud 控制台啟用 Cloud Shell。
此時 Cloud Shell 工作階段會在控制台底部的頁框中開啟。
在本教學課程中執行指令之前,請務必將預設專案設為要部署範例應用程式的專案 ID。如果尚未設定,請在 Cloud Shell 中執行下列指令:
gcloud config set project PROJECT_ID
將 PROJECT_ID 替換為專案 ID。
授予 IAM 角色
請確認您的使用者帳戶和專案中的 Compute Engine 預設服務帳戶,都具備本教學課程所需的身分與存取權管理 (IAM) 角色。
將角色授予使用者帳戶。針對下列每個 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
更改下列內容:
PROJECT_ID:專案 ID。USER_IDENTIFIER:使用者帳戶的 ID。 例如:myemail@example.com。ROLE:授予使用者帳戶的 IAM 角色。
將角色授予 Compute Engine 預設服務帳戶。針對下列每個 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
- 將
PROJECT_ID替換為專案 ID。 - 將
PROJECT_NUMBER換成您的專案編號,即可為專案建構 Compute Engine 預設服務帳戶網域。例如:123456789012-compute@developer.gserviceaccount.com。 - 將
ROLE替換為每個角色。
提供 Gemma 模型服務
前往「使用 Hugging Face TGI 在 GKE 上透過 GPU 提供 Gemma 開放模型」教學課程,並按照「事前準備」到「使用 curl 與模型互動」的指示操作,確保 Gemma 模型部署成功,且您可以與模型互動。
為了配合本教學課程,請部署 Gemma 2B-it 模型。
設定虛擬私有雲網路
在 us-central1 區域建立或使用虛擬私有雲網路,讓遠端函式連線至 GKE 叢集。在本教學課程中,請使用 Default 虛擬私有雲。
為確保 BigQuery 資料集、遠端函式和基礎 Cloud Run 函式部署在相容的位置,VPC 網路必須與 BigQuery 遠端函式位於相同區域。在本教學課程中,您建立遠端函式時設定 BigQuery DataFrame 選項,並指定 US 做為資料集的位置,預設為 Cloud Run 函式的 us-central1 區域。因此,請在 us-central1 區域建立或使用虛擬私有雲。
建立負載平衡器
請按照下列操作說明,在 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 位址。您可能需要等待 1 到 2 分鐘,才能擷取這個 IP 位址:
kubectl get service llm-lb-service --output yaml | grep ip:
您將使用這個 IP 位址,與負載平衡器後方執行的 gemma-server 應用程式通訊。
建立連接器
您可以使用無伺服器 VPC 存取連接器,透過虛擬私有雲網路傳送及接收要求,而不使用公開網際網路。詳情請參閱「無伺服器 VPC 存取」。
在本教學課程中,您會建立具有新專屬子網路的連接器,避免與虛擬私有雲中的現有資源發生 IP 位址衝突。如需操作說明,請參閱「建立連接器」一節,並按照「建立連接器和新的子網路」一節的 gcloud 操作說明進行操作。
或者,如要使用現有子網路,請按照「使用現有子網路建立連接器」一節的指示操作。
詳情請參閱「連接器子網路需求」。
建立筆記本
在本教學課程中,您將使用 Colab Enterprise 筆記本執行所有程式碼,定義 BigQuery 遠端函式並執行分析。
如要透過 Google Cloud 控制台建立 Colab Enterprise 筆記本,請按照下列步驟操作:
前往 Google Cloud 控制台的「Colab Enterprise Notebooks」頁面:
在「區域」選單中選取「
us-central1」。您在本教學課程中建立的所有服務,都位於這個區域。按一下「Files」(檔案) 旁的「Create a notebook」(建立筆記本)。
新的筆記本就會出現在「My notebooks」(我的筆記本) 分頁中。
如要在新筆記本中執行程式碼,請在筆記本中為每個指令或程式碼片段插入新的程式碼儲存格。
建立 BigQuery 遠端函式
定義 BigQuery 遠端函式的方法之一,是使用 bigframes 程式庫。在本節中,請使用 bigframes 建立名為 process_incoming 的遠端函式。這項遠端函式會將 Google Analytics 資料做為輸入內容、建構提示,並傳送至 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://docs.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}")更改下列內容:
LOADBALANCER_IP_ADDRESS:您先前建立的內部負載平衡器的 IP 位址和通訊埠,例如10.128.05:8000。PROJECT_ID:您的專案 ID。VPC_CONNECTOR_NAME:您先前建立的無伺服器 VPC 存取連接器名稱。
在本教學課程中,BigQuery 資料集的位置設為
US,預設為us-central1區域。按一下「執行儲存格」。
輸出內容會顯示函式名稱,大致如下:
The function name is: PROJECT_ID.ga_demo.ga_explain_example
分析使用者行為
在本節中,您將使用 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 '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 指令列工具
或者,您也可以使用 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":"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 \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 叢集。
- 刪除虛擬私有雲連接器。
後續步驟
- 試用程式碼實驗室,實際操作結構化和非結構化資料分析。
- 請參閱「在 GKE 上執行批次工作負載的最佳做法」。
- 進一步瞭解 BigQuery 中的 AI/ML 用途。
- 進一步瞭解 GKE 中的 AI/機器學習用途。