Menggunakan penyesuaian dan evaluasi untuk meningkatkan performa model

Dokumen ini menunjukkan cara membuat model jarak jauh BigQuery ML yang merujuk pada model gemini-1.5-flash-002 Vertex AI. Kemudian, Anda menggunakan penyesuaian terpandu untuk menyesuaikan model dengan data pelatihan baru, diikuti dengan mengevaluasi model dengan fungsi ML.EVALUATE.

Penyesuaian dapat membantu Anda mengatasi skenario saat Anda perlu menyesuaikan model Vertex AI yang dihosting, seperti saat perilaku yang diharapkan dari model sulit ditentukan secara ringkas dalam perintah, atau saat perintah tidak menghasilkan hasil yang diharapkan secara cukup konsisten. Penyesuaian yang diawasi juga memengaruhi model dengan cara berikut:

  • Memandu model untuk menampilkan gaya respons tertentu—misalnya lebih ringkas atau lebih panjang.
  • Mengajari model perilaku baru—misalnya merespons perintah sebagai persona tertentu.
  • Menyebabkan model memperbarui dirinya sendiri dengan informasi baru.

Dalam tutorial ini, sasarannya adalah membuat model menghasilkan teks yang gaya dan kontennya sesuai sedekat mungkin dengan konten ground truth yang diberikan.

Izin yang diperlukan

  • Untuk membuat koneksi, Anda memerlukan peran Identity and Access Management (IAM) berikut:

    • roles/bigquery.connectionAdmin
  • Untuk memberikan izin ke akun layanan koneksi, Anda memerlukan izin berikut:

    • resourcemanager.projects.setIamPolicy
  • Untuk membuat model menggunakan BigQuery ML, Anda memerlukan izin IAM berikut:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • Untuk menjalankan inferensi, Anda memerlukan izin berikut:

    • bigquery.tables.getData pada tabel
    • bigquery.models.getData pada model
    • bigquery.jobs.create

Sebelum memulai

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

    Go to project selector

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

  3. Enable the BigQuery, BigQuery Connection, Vertex AI, and Compute Engine APIs.

    Enable the APIs

Biaya

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

  • BigQuery: You incur costs for the queries that you run in BigQuery.
  • BigQuery ML: You incur costs for the model that you create and the processing that you perform in BigQuery ML.
  • Vertex AI: You incur costs for calls to and supervised tuning of the gemini-1.0-flash-002 model.

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

Untuk informasi selengkapnya, lihat referensi berikut:

Membuat set data

Buat set data BigQuery untuk menyimpan model ML Anda:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka halaman BigQuery

  2. Di panel Explorer, klik nama project Anda.

  3. Klik View actions > Create dataset.

    Buat set data.

  4. Di halaman Create dataset, lakukan hal berikut:

    • Untuk Dataset ID, masukkan bqml_tutorial.

    • Untuk Location type, pilih Multi-region, lalu pilih US (multiple regions in United States).

      Set data publik disimpan di US multi-region. Untuk mempermudah, simpan set data Anda di lokasi yang sama.

    • Jangan ubah setelan default yang tersisa, lalu klik Create dataset.

      Halaman Create dataset.

Membuat koneksi

Buat koneksi resource Cloud dan dapatkan ID akun layanan koneksi. Buat koneksi di lokasi yang sama dengan set data yang Anda buat pada langkah sebelumnya.

Pilih salah satu opsi berikut:

Konsol

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Untuk membuat koneksi, klik Tambahkan, lalu klik Koneksi ke sumber data eksternal.

  3. Dalam daftar Connection type, pilih Vertex AI remote models, remote functions and BigLake (Cloud Resource).

  4. Di kolom Connection ID, masukkan nama untuk koneksi Anda.

  5. Klik Create connection.

  6. Klik Go to connection.

  7. Di panel Connection info, salin ID akun layanan untuk digunakan di langkah berikutnya.

bq

  1. Di lingkungan command line, buat koneksi:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    Parameter --project_id akan mengganti project default.

    Ganti kode berikut:

    • REGION: region koneksi Anda
    • PROJECT_ID: project ID Google Cloud Anda
    • CONNECTION_ID: ID untuk koneksi Anda

    Saat Anda membuat resource koneksi, BigQuery akan membuat akun layanan sistem unik dan mengaitkannya dengan koneksi.

    Pemecahan masalah: Jika Anda mendapatkan error koneksi berikut, update Google Cloud SDK:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Ambil dan salin ID akun layanan untuk digunakan di langkah berikutnya:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    Outputnya mirip dengan hal berikut ini:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Gunakan resource google_bigquery_connection.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

Contoh berikut membuat koneksi resource Cloud bernama my_cloud_resource_connection di region US:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.

Menyiapkan Cloud Shell

  1. Luncurkan Cloud Shell.
  2. Tetapkan project Google Cloud default tempat Anda ingin menerapkan konfigurasi Terraform.

    Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.

Menyiapkan direktori

Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).

  1. Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki ekstensi .tf—misalnya main.tf. Dalam tutorial ini, file ini disebut sebagai main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.

    Salin kode contoh ke dalam main.tf yang baru dibuat.

    Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.

  3. Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
  4. Simpan perubahan Anda.
  5. Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
    terraform init

    Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi -upgrade:

    terraform init -upgrade

Menerapkan perubahan

  1. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:
    terraform plan

    Koreksi konfigurasi jika diperlukan.

  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply

    Tunggu hingga Terraform menampilkan pesan "Apply complete!".

  3. Buka project Google Cloud Anda untuk melihat hasilnya. Di Konsol Google Cloud, buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.

Memberikan akses akun layanan koneksi

Berikan peran Agen Layanan Vertex AI ke akun layanan Anda agar akun layanan dapat mengakses Vertex AI. Kegagalan memberikan peran ini akan menyebabkan error. Pilih salah satu opsi berikut:

Konsol

  1. Buka halaman IAM & Admin.

    Buka IAM & Admin

  2. Klik Grant access.

    Dialog Add principals akan terbuka.

  3. Di kolom New principals, masukkan ID akun layanan yang Anda salin sebelumnya.

  4. Klik Pilih peran.

  5. Di Filter, ketik Vertex AI Service Agent, lalu pilih peran tersebut.

  6. Klik Simpan.

gcloud

Gunakan perintah gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None

Ganti kode berikut:

  • PROJECT_NUMBER: nomor project Anda
  • MEMBER: ID akun layanan yang Anda salin sebelumnya

Akun layanan yang terkait dengan koneksi Anda adalah instance dari BigQuery Connection Delegation Service Agent, sehingga Anda dapat menetapkan peran agen layanan ke akun tersebut.

Membuat tabel pengujian

Buat tabel data pelatihan dan evaluasi berdasarkan set data task955_wiki_auto_style_transfer publik dari Hugging Face.

  1. Buka Cloud Shell.

  2. Di Cloud Shell, jalankan perintah berikut untuk membuat tabel data pengujian dan evaluasi:

    python3 -m pip install pandas pyarrow fsspec huggingface_hub
    
    python3 -c "import pandas as pd; df_train = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/train-00000-of-00001.parquet').drop('id', axis=1); df_train['output'] = [x[0] for x in df_train['output']]; df_train.to_json('wiki_auto_style_transfer_train.jsonl', orient='records', lines=True);"
    
    python3 -c "import pandas as pd; df_valid = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/valid-00000-of-00001.parquet').drop('id', axis=1); df_valid['output'] = [x[0] for x in df_valid['output']]; df_valid.to_json('wiki_auto_style_transfer_valid.jsonl', orient='records', lines=True);"
    
    bq rm -t bqml_tutorial.wiki_auto_style_transfer_train
    
    bq rm -t bqml_tutorial.wiki_auto_style_transfer_valid
    
    bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_train wiki_auto_style_transfer_train.jsonl input:STRING,output:STRING
    
    bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_valid wiki_auto_style_transfer_valid.jsonl input:STRING,output:STRING
    

Membuat model dasar pengukuran

Buat model jarak jauh di atas model gemini-1.0-flash-002 Vertex AI.

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut untuk membuat model jarak jauh:

    CREATE OR REPLACE MODEL `bqml_tutorial.gemini_baseline`
    REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID`
    OPTIONS (ENDPOINT ='gemini-1.5-flash-002');

    Ganti kode berikut:

    • LOCATION: lokasi koneksi.
    • CONNECTION_ID: ID koneksi BigQuery Anda.

      Saat Anda melihat detail koneksi di konsol Google Cloud, CONNECTION_ID adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi, misalnya projects/myproject/locations/connection_location/connections/myconnection.

    Kueri memerlukan waktu beberapa detik untuk diselesaikan, setelah itu model gemini_baseline akan muncul di set data bqml_tutorial di panel Explorer. Karena kueri menggunakan pernyataan CREATE MODEL untuk membuat model, tidak ada hasil kueri.

Memeriksa performa model dasar pengukuran

Jalankan fungsi ML.GENERATE_TEXT dengan model jarak jauh untuk melihat performanya pada data evaluasi tanpa penyesuaian apa pun.

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

    SELECT ml_generate_text_llm_result, ground_truth
    FROM
      ML.GENERATE_TEXT(
        MODEL `bqml_tutorial.gemini_baseline`,
        (
          SELECT
            input AS prompt, output AS ground_truth
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
          LIMIT 10
        ),
        STRUCT(TRUE AS flatten_json_output));

    Jika Anda memeriksa data output dan membandingkan nilai ml_generate_text_llm_result dan ground_truth, Anda akan melihat bahwa meskipun model dasar pengukuran menghasilkan teks yang secara akurat mencerminkan fakta yang diberikan dalam konten ground truth, gaya teksnya cukup berbeda.

Mengevaluasi model dasar pengukuran

Untuk melakukan evaluasi performa model yang lebih mendetail, gunakan fungsi ML.EVALUATE. Fungsi ini menghitung metrik model yang mengukur akurasi dan kualitas teks yang dihasilkan, untuk melihat perbandingan respons model dengan respons ideal.

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

    SELECT *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.gemini_baseline`,
        (
          SELECT
            input AS input_text, output AS output_text
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
        ),
        STRUCT('text_generation' AS task_type));

Outputnya terlihat mirip dengan yang berikut ini:

   +---------------------+---------------------+-------------------------------------------+--------------------------------------------+
   | bleu4_score         | rouge-l_precision   | rouge-l_recall      | rouge-l_f1_score    | evaluation_status                          |
   +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+
   | 0.15289758194680161 | 0.24925921915413246 | 0.44622484204944518 | 0.30851122211104348 | {                                          |
   |                     |                     |                     |                     |  "num_successful_rows": 176,               |
   |                     |                     |                     |                     |  "num_total_rows": 176                     |
   |                     |                     |                     |                     | }                                          |
   +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
   

Anda dapat melihat bahwa performa model dasar pengukuran tidak buruk, tetapi kemiripan teks yang dihasilkan dengan kebenaran dasar rendah, berdasarkan metrik evaluasi. Hal ini menunjukkan bahwa sebaiknya Anda melakukan penyesuaian terpandu untuk melihat apakah Anda dapat meningkatkan performa model untuk kasus penggunaan ini.

Membuat model yang di-tuning

Buat model jarak jauh yang sangat mirip dengan yang Anda buat di Membuat model, tetapi kali ini tentukan klausa AS SELECT untuk memberikan data pelatihan guna menyesuaikan model.

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut untuk membuat model jarak jauh:

    CREATE OR REPLACE MODEL `bqml_tutorial.gemini_tuned`
      REMOTE
        WITH CONNECTION `LOCATION.CONNECTION_ID`
      OPTIONS (
        endpoint = 'gemini-1.5-flash-002',
        max_iterations = 500,
        data_split_method = 'no_split')
    AS
    SELECT
      input AS prompt, output AS label
    FROM `bqml_tutorial.wiki_auto_style_transfer_train`;

    Ganti kode berikut:

    • LOCATION: lokasi koneksi.
    • CONNECTION_ID: ID koneksi BigQuery Anda.

      Saat Anda melihat detail koneksi di konsol Google Cloud, CONNECTION_ID adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi, misalnya projects/myproject/locations/connection_location/connections/myconnection.

    Kueri memerlukan waktu beberapa menit untuk diselesaikan, setelah itu model gemini_tuned akan muncul di set data bqml_tutorial di panel Explorer. Karena kueri menggunakan pernyataan CREATE MODEL untuk membuat model, tidak akan ada hasil kueri.

Memeriksa performa model yang disesuaikan

Jalankan fungsi ML.GENERATE_TEXT untuk melihat performa model yang disesuaikan pada data evaluasi.

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

    SELECT ml_generate_text_llm_result, ground_truth
    FROM
      ML.GENERATE_TEXT(
        MODEL `bqml_tutorial.gemini_tuned`,
        (
          SELECT
            input AS prompt, output AS ground_truth
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
          LIMIT 10
        ),
        STRUCT(TRUE AS flatten_json_output));

    Jika memeriksa data output, Anda akan melihat bahwa model yang dioptimalkan menghasilkan teks yang gayanya jauh lebih mirip dengan konten ground truth.

Mengevaluasi model yang dioptimalkan

Gunakan fungsi ML.EVALUATE untuk melihat perbandingan respons model yang disesuaikan dengan respons ideal.

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

    SELECT *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.gemini_tuned`,
        (
          SELECT
            input AS prompt, output AS label
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
        ),
        STRUCT('text_generation' AS task_type));

Outputnya terlihat mirip dengan yang berikut ini:

   +---------------------+---------------------+-------------------------------------------+--------------------------------------------+
   | bleu4_score         | rouge-l_precision   | rouge-l_recall      | rouge-l_f1_score    | evaluation_status                          |
   +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+
   | 0.19391708685890585 | 0.34170970869469058 | 0.46793189219384496 | 0.368190192211538   | {                                          |
   |                     |                     |                     |                     |  "num_successful_rows": 176,               |
   |                     |                     |                     |                     |  "num_total_rows": 176                     |
   |                     |                     |                     |                     | }                                          |
   +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
   

Anda dapat melihat bahwa meskipun set data pelatihan hanya menggunakan 1.408 contoh, ada peningkatan performa yang signifikan seperti yang ditunjukkan oleh metrik evaluasi yang lebih tinggi.

Pembersihan

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.