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 LLM Gemma. Dalam tutorial ini, Anda akan men-deploy aplikasi contoh ke Google Kubernetes Engine (GKE). Aplikasi contoh ini memanfaatkan BigQuery untuk penyimpanan dan pemrosesan data, Cloud Run untuk penanganan permintaan, dan LLM Gemma 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 data warehouse Platform as a Service (PaaS) tanpa server yang terkelola sepenuhnya dan memungkinkan analisis yang dapat diskalakan pada data berukuran petabyte. Dengan BigQuery, Anda dapat berfokus pada analisis data untuk menemukan insight yang bermakna sambil 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 meringkas interaksi pengguna dalam bahasa alami. Selanjutnya, dengan mengintegrasikan BigQuery dengan GKE, Anda dapat menggunakan BigQuery untuk menangani set data besar (seperti Google Analytics) secara efisien dan kemampuan pemahaman bahasa alami model untuk menghasilkan insight yang bermakna.

Misalnya, sebagai ilmuwan atau analis data, 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 mentah Google Analytics dari BigQuery, memasukkannya ke model Gemma, dan menerima ringkasan serta insight kunjungan halaman 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, mengungkap titik keluar 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 mengkueri 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: hemat waktu dan resource dengan menggunakan model bahasa Gemma terlatih yang open source, sehingga Anda tidak perlu membuat model kustom dari awal.

Tujuan

Dalam tutorial ini, Anda akan mempelajari cara:

  1. Deploy model dan ekspos model: 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. Konfigurasi jaringan Virtual Private Cloud (VPC): siapkan jaringan VPC dan konektor VPC untuk mengaktifkan komunikasi yang aman antara BigQuery dan cluster GKE. Hal ini penting agar fungsi jarak jauh dapat mengakses endpoint model.
  4. Menganalisis data: menganalisis data menggunakan BigQuery DataFrame, 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 Gemma.
    • Tampilkan hasilnya.

Arsitektur

Diagram arsitektur berikut menunjukkan komponen yang terlibat dan cara berinteraksinya:

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 Anda, yang memungkinkan 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.
  • Hasil dikirim kembali ke BigQuery dan ditampilkan dalam tabel.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  6. Mengaktifkan 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.

    Enable the APIs

    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.

    In the Google Cloud console, activate Cloud Shell.

    Activate 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 Anda 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.

    Beri 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.

Menyajikan model Gemma

Buka tutorial Menyajikan 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 DataFrame BigQuery saat membuat fungsi jarak jauh, Anda menentukan US sebagai lokasi untuk set data, yang secara default adalah region us-central1 untuk fungsi Cloud Run. 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 selama 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 di 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 Anda dalam menentukan fungsi jarak jauh BigQuery dan melakukan analisis.

Untuk membuat notebook Colab Enterprise menggunakan Google Cloud konsol:

  1. Di Google Cloud konsol, 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, sisipkan sel kode baru di notebook untuk setiap perintah atau cuplikan kode yang ingin Anda jalankan.

Membuat fungsi jarak jauh BigQuery

Salah satu cara Anda dapat 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 dianalisis.

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

    Ganti kode berikut:

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

  3. Klik Run cell.

Output 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 secara langsung di SQL.

Menggunakan BigQuery DataFrames

Untuk menjalankan fungsi jarak jauh menggunakan DataFrame BigQuery 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 Run cell.
# 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 hasil 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 secara 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":"Jawaban:\n Halaman yang paling populer adalah https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee\n Halaman berikutnya yang paling populer adalah halaman asal pengguna.\n\n Penjelasan:\n\nData yang diberikan menunjukkan bahwa pengguna saat ini mengunjungi toko merchandise Google secara khusus untuk produk "Google Dino Game Tee". \n \nPertimbangan Penting:\n\n* Interpretasi Data: Anda tidak dapat secara pasti mengatakan 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 setiap resource.

  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 mengetahui 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 berikutnya