Menganalisis data di GKE menggunakan BigQuery, Cloud Run, dan Gemma


Tutorial ini menunjukkan cara mendapatkan insight dari set data besar menggunakan BigQuery, Cloud Run, dan Gemma LLM. Dalam tutorial ini, Anda akan men-deploy aplikasi contoh ke Google Kubernetes Engine (GKE). Aplikasi contoh memanfaatkan BigQuery untuk penyimpanan dan pemrosesan data, Cloud Run untuk penanganan permintaan, dan Gemma LLM untuk menganalisis data dan membuat prediksi berdasarkan perintah yang masuk.

Tutorial ini ditujukan untuk administrator dan arsitek platform cloud, Spesialis data dan AI, engineer ML, dan profesional MLOps (DevOps). Sebelum membaca halaman ini, pastikan Anda sudah memahami Kubernetes dan lingkungan notebook seperti Jupyter.

Sebagai prasyarat untuk tutorial ini, Anda harus menyelesaikan tutorial Menyajikan model terbuka Gemma menggunakan GPU di GKE dengan Hugging Face TGI. Framework TGI memfasilitasi proses penayangan model.

Alasan menggunakan GKE dan BigQuery

BigQuery adalah Platform as a Service (PaaS), data warehouse tanpa server yang terkelola sepenuhnya dan memungkinkan analisis yang skalabel pada data berukuran petabyte. BigQuery memungkinkan Anda berfokus pada analisis data untuk menemukan insight yang bermakna sekaligus menggunakan SQL yang sudah dikenal dan machine learning bawaan.

Dengan menggunakan GPU di GKE dengan TGI, Anda dapat men-deploy model bahasa Gemma untuk menganalisis dan merumuskan interaksi pengguna dalam bahasa alami. Selanjutnya, dengan mengintegrasikan BigQuery dengan GKE, Anda dapat menggunakan BigQuery untuk menangani set data besar secara efisien (seperti Google Analytics) dan kemampuan pemahaman bahasa alam model untuk menghasilkan insight yang bermakna.

Misalnya, sebagai ilmuwan data atau analis, atau pengambil keputusan bisnis di perusahaan e-commerce, Anda mungkin ingin memahami perilaku pengguna di situs atau aplikasi Anda. Insight ini dapat membantu Anda mengoptimalkan dan mempersonalisasi perjalanan pengguna serta membuat keputusan bisnis yang tepat untuk meningkatkan penjualan.

Dalam skenario ini, Anda dapat mengambil data Google Analytics mentah dari BigQuery, memasukkannya ke model Gemma, dan menerima ringkasan kunjungan halaman serta insight dalam bahasa alami. Model Gemma, yang berjalan di infrastruktur skalabel dengan akselerasi GPU dari GKE, memproses data perjalanan pengguna dengan cepat, mengidentifikasi pola dan tren. Anda dapat memperoleh insight untuk menentukan kombinasi produk populer, mengungkapkan titik penurunan umum dalam proses checkout, dan menyoroti kampanye pemasaran yang berhasil mendorong traffic ke halaman landing tertentu.

Manfaat

Solusi ini menawarkan alur kerja yang disederhanakan dengan keuntungan berikut:

  • Integrasi BigQuery: gunakan BigQuery untuk menyimpan dan memproses set data besar (seperti data Google Analytics dalam tutorial ini). Tindakan ini memungkinkan Anda membuat kueri dan menggabungkan data yang diperlukan untuk analisis model.
  • Akselerasi GPU: jalankan model Gemma di cluster GKE dengan dukungan GPU untuk mempercepat proses inferensi, sehingga menghasilkan prediksi jauh lebih cepat daripada dengan prosesor berbasis CPU.
  • Mengurangi biaya dan waktu: menghemat waktu dan resource dengan menggunakan model bahasa Gemma terlatih dan open source, sehingga Anda tidak perlu membuat model kustom dari awal.

Tujuan

Dalam tutorial ini, Anda akan mempelajari cara:

  1. Men-deploy model dan mengeksposnya: buat file YAML layanan untuk menentukan load balancer internal guna mengakses model Gemma.
  2. Buat fungsi jarak jauh BigQuery: jalankan kode Python untuk menentukan fungsi jarak jauh yang mengambil data Google Analytics, membuat perintah untuk model, mengirim permintaan ke endpoint model menggunakan load balancer, dan menampilkan respons model.
  3. Mengonfigurasi jaringan Virtual Private Cloud (VPC): menyiapkan jaringan VPC dan konektor VPC untuk memungkinkan komunikasi yang aman antara BigQuery dan cluster GKE. Hal ini sangat penting agar fungsi jarak jauh dapat mengakses endpoint model.
  4. Menganalisis data: menganalisis data menggunakan BigQuery DataFrames, atau langsung di SQL menggunakan alat command line bq. Jalankan cuplikan kode yang disediakan di Notebook Colab Enterprise untuk:
    • Buat kueri data Google Analytics dari BigQuery menggunakan SQL.
    • Terapkan fungsi jarak jauh ke data untuk menghasilkan insight dari model Gemini.
    • Tampilkan hasilnya.

Arsitektur

Diagram arsitektur berikut menunjukkan komponen yang terlibat dan cara komponen tersebut berinteraksi:

Arsitektur analisis data

  • Gunakan notebook Colab Enterprise untuk mengeksekusi kode Python Anda. Dengan Python, Anda dapat menggunakan library bigframes untuk menyederhanakan interaksi SQL.
  • BigQuery berfungsi sebagai mesin pemrosesan big data, yang mendukung penggunaan SQL untuk berinteraksi dengan data.
  • Fungsi jarak jauh memanggil fungsi Cloud Run. Data secara otomatis dirutekan ke fungsi jarak jauh tempat data disiapkan dan dikirim ke GKE untuk inferensi.
  • Hasilnya dikirim kembali ke BigQuery dan ditampilkan dalam tabel.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

Pastikan untuk menyelesaikan prasyarat berikut:

Pilih atau buat project

Anda dapat menggunakan project yang ada, atau membuat project baru untuk tutorial ini.

  1. 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.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Make sure that billing is enabled for your Google Cloud project.

Mengaktifkan API

Aktifkan API 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 .

Mengaktifkan API

Menyiapkan Cloud Shell

Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk menjalankan perintah gcloud dan kubectl. Cloud Shell adalah lingkungan shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal lebih dulu dengan alat command line Google Cloud CLI dan kubectl.

Di konsol Google Cloud, aktifkan Cloud Shell.

Aktifkan Cloud Shell

Sesi Cloud Shell akan terbuka di dalam frame yang lebih rendah di konsol.

Sebelum menjalankan perintah dalam tutorial ini, pastikan project default Anda ditetapkan ke project ID tempat Anda ingin men-deploy aplikasi contoh. Jika belum ditetapkan, jalankan perintah berikut di Cloud Shell:

gcloud config set project PROJECT_ID

Ganti PROJECT_ID dengan project ID Anda.

Memberikan peran IAM

Pastikan akun pengguna dan akun layanan default Compute Engine di project Anda memiliki peran Identity and Access Management (IAM) yang diperlukan untuk tutorial ini.

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.

Berikan peran ke akun layanan default Compute Engine Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: 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
  • Ganti PROJECT_ID dengan project ID Anda.
  • Ganti PROJECT_NUMBER dengan nomor project Anda untuk membuat domain akun layanan default Compute Engine untuk project Anda. Contoh, 123456789012-compute@developer.gserviceaccount.com.
  • Ganti ROLE dengan setiap peran individual.

Menayangkan model Gemma

Buka tutorial Menayangkan model terbuka Gemma menggunakan GPU di GKE dengan Hugging Face TGI dan ikuti petunjuk mulai dari Sebelum memulai hingga Berinteraksi dengan model menggunakan curl untuk memastikan model Gemma Anda berhasil di-deploy dan Anda dapat berinteraksi dengannya.

Untuk tujuan tutorial ini, deploy model Gemma 2B-it.

Menyiapkan jaringan VPC

Buat atau gunakan jaringan VPC di region us-central1 agar fungsi jarak jauh Anda dapat terhubung ke cluster GKE. Dalam tutorial ini, gunakan VPC Default.

Untuk memastikan set data BigQuery, fungsi jarak jauh, dan fungsi Cloud Run yang mendasarinya di-deploy di lokasi yang kompatibel, jaringan VPC harus berada di region yang sama dengan fungsi jarak jauh BigQuery Anda. Dalam tutorial ini, saat menetapkan opsi BigQuery DataFrames saat membuat fungsi jarak jauh, Anda menentukan US sebagai lokasi untuk set data, yang secara default ditetapkan ke region us-central1 untuk fungsi Cloud Run Anda. Oleh karena itu, buat atau gunakan VPC di region us-central1.

Membuat load balancer

Ikuti petunjuk berikut untuk membuat load balancer internal di cluster GKE Anda:

  1. Buat manifes tgi-2b-lb-service.yaml berikut:

    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
    
  2. Buka terminal Cloud Shell baru dan jalankan perintah berikut untuk menerapkan manifes:

    kubectl apply -f tgi-2b-lb-service.yaml
    
  3. Dapatkan alamat IP load balancer. Anda mungkin perlu menunggu 1-2 menit sebelum alamat IP ini dapat diambil:

    kubectl get service llm-lb-service --output yaml | grep ip:
    

Anda akan menggunakan alamat IP ini untuk berkomunikasi dengan aplikasi gemma-server yang berjalan di balik load balancer.

Buat konektor

Anda menggunakan konektor Akses VPC Serverless untuk mengirim dan menerima permintaan melalui jaringan VPC tanpa menggunakan internet publik. Untuk mengetahui informasi selengkapnya, lihat Akses VPC Serverless.

Dalam tutorial ini, Anda akan membuat konektor dengan subnet khusus yang baru untuk menghindari konflik alamat IP dengan resource yang ada di VPC. Untuk mengetahui petunjuknya, lihat bagian Membuat konektor dan ikuti petunjuk gcloud untuk bagian Membuat konektor dan subnet baru.

Atau, jika Anda ingin menggunakan subnet yang ada, ikuti petunjuk untuk bagian Membuat konektor menggunakan subnet yang ada.

Untuk mengetahui informasi selengkapnya, lihat Persyaratan subnet konektor.

Membuat notebook

Dalam tutorial ini, Anda akan menggunakan notebook Colab Enterprise untuk menjalankan semua kode untuk menentukan fungsi jarak jauh BigQuery dan melakukan analisis.

Untuk membuat notebook Colab Enterprise menggunakan Konsol Google Cloud:

  1. Di konsol Google Cloud, buka halaman Colab Enterprise Notebooks:

    Buka Notebooks

  2. Di menu Region, pilih us-central1. Ini adalah region yang sama tempat Anda membuat semua layanan dalam tutorial ini.

  3. Di samping File, klik Buat notebook.

Notebook baru Anda akan muncul di tab Notebook saya.

Untuk menjalankan kode di notebook baru, masukkan sel kode baru di notebook untuk setiap perintah atau cuplikan kode yang ingin Anda jalankan.

Membuat fungsi jarak jauh BigQuery

Salah satu cara untuk menentukan fungsi jarak jauh BigQuery adalah dengan menggunakan library bigframes. Di bagian ini, gunakan bigframes untuk membuat fungsi jarak jauh yang disebut process_incoming. Fungsi jarak jauh ini menggunakan data Google Analytics sebagai input, membuat perintah, dan mengirimkannya ke model Gemma Anda untuk analisis.

Di notebook Colab Enterprise yang Anda buat:

  1. Klik + Kode untuk menyisipkan sel kode baru.
  2. Salin kode berikut di sel kode baru:

    # 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}")
    
    

    Ganti kode berikut:

    Dalam tutorial ini, lokasi set data BigQuery Anda ditetapkan ke US, yang secara default ditetapkan ke region us-central1.

  3. Klik Run cell.

Output akan menampilkan nama fungsi yang mirip dengan berikut ini:

The function name is: PROJECT_ID.ga_demo.ga_explain_example

Menganalisis perilaku pengguna

Di bagian ini, Anda akan menganalisis perilaku pengguna di situs menggunakan fungsi jarak jauh process_incoming dengan salah satu dari dua cara berikut:

  • menggunakan BigQuery DataFrames
  • menggunakan alat command line bq untuk menjalankan kueri langsung di SQL.

Menggunakan BigQuery DataFrames

Untuk menjalankan fungsi jarak jauh menggunakan BigQuery DataFrames di notebook Colab Enterprise yang Anda buat:

  1. Klik + Kode untuk menyisipkan sel kode baru.
  2. Salin kode berikut di sel kode baru, lalu klik Jalankan sel.
# 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)

Output berikut menunjukkan contoh hasil kueri:

user_pseudo_id string_value event_timestamp reverse_event_number ga_history results sumbu
0 2342103247.0307162928 https://shop.googlemerchandisestore.com/Google... 1612096237169825 2 {"user_pseudo_id":"2342103247.0307162928","str... {"generated_text":"\n 'Berikut adalah...
1 48976087,6959390698 https://www.googlemerchandisestore.com/ 1612056537823270 2 {"user_pseudo_id":"48976087.6959390698","strin... {"generated_text":"\n \n ```python\n imp...

Menggunakan alat command line bq

Atau, Anda dapat menggunakan alat command line bq untuk melakukan analisis langsung menggunakan SQL.

Untuk menjalankan fungsi jarak jauh menggunakan alat command line bq di notebook Colab Enterprise yang Anda buat:

  1. Klik + Kode untuk menyisipkan sel kode baru.
  2. Salin kode berikut di sel kode baru, dan ganti PROJECT_ID dengan project ID Anda.

    # 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}
    
  3. Klik Run cell.

Output berikut menunjukkan contoh hasil kueri:

user_pseudo_id string_value event_timestamp reverse_event_number hasil
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 \nPertimbangan Penting:\n\n* Interpretasi Data: Anda tidak dapat mengatakan dengan pasti bahwa"}
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"}

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus resource individual.

  1. Hapus notebook Colab Enterprise Anda.
  2. Hapus runtime Colab Enterprise Anda.
  3. Hapus fungsi BigQuery Anda. Pastikan Akun Layanan Anda memiliki izin bigquery.routines.delete. Untuk informasi selengkapnya, lihat Izin BigQuery.
  4. Hapus koneksi eksternal BigQuery Anda.
  5. Hapus fungsi Cloud Run Anda.
  6. Hapus cluster GKE Anda.
  7. Hapus konektor VPC Anda.

Langkah selanjutnya