Menggunakan tuning dan evaluasi untuk meningkatkan performa LLM
Dokumen ini menunjukkan cara membuat
model jarak jauh
BigQuery ML yang mereferensikan model dasar text-bison
Vertex AI.
Selanjutnya, Anda menggunakan supervised tuning untuk menyesuaikan model dengan data pelatihan baru, yang diikuti dengan mengevaluasi model menggunakan fungsi ML.EVALUATE
.
Hal ini dapat membantu Anda mengatasi skenario yang mengharuskan Anda menyesuaikan model Vertex AI yang dihosting, seperti saat perilaku model yang diharapkan sulit untuk ditentukan secara ringkas dalam perintah, atau saat perintah tidak memberikan hasil yang diharapkan secara konsisten. Tuning yang diawasi juga memengaruhi model dengan cara berikut:
- Memandu model untuk menampilkan gaya respons tertentu, misalnya lebih ringkas atau lebih panjang.
- Mengajarkan model perilaku baru, misalnya merespons perintah sebagai persona tertentu.
- Menyebabkan model memperbarui dirinya sendiri dengan informasi baru.
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 tabelbigquery.models.getData
pada modelbigquery.jobs.create
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API BigQuery, BigQuery Connection, Vertex AI, and Compute Engine.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- BigQuery: Anda akan dikenai biaya untuk kueri yang dijalankan di BigQuery.
- BigQuery ML: Anda dikenai biaya untuk model yang Anda buat dan pemrosesan yang Anda lakukan di BigQuery ML.
- Vertex AI: Anda dikenai biaya untuk panggilan ke dan penyesuaian yang diawasi pada model
text-bison
.
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Untuk informasi selengkapnya, lihat resource berikut:
Membuat set data
Buat set data BigQuery untuk menyimpan model ML Anda:
Di konsol Google Cloud, buka halaman BigQuery.
Di panel Explorer, klik nama project Anda.
Klik
View actions > Create dataset.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.
Membuat koneksi
Buat koneksi resource Cloud dan dapatkan ID akun layanan koneksi tersebut. Buat koneksi di lokasi yang sama dengan set data yang Anda buat di langkah sebelumnya.
Pilih salah satu opsi berikut:
Konsol
Buka halaman BigQuery.
Untuk membuat koneksi, klik
Add, lalu klik Connections to external data sources.Dalam daftar Connection type, pilih Vertex AI remote models, remote functions and BigLake (Cloud Resource).
Di kolom Connection ID, masukkan nama untuk koneksi Anda.
Klik Create connection.
Klik Go to connection.
Di panel Connection info, salin ID akun layanan untuk digunakan di langkah berikutnya.
bq
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 AndaPROJECT_ID
: project ID Google Cloud AndaCONNECTION_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...
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
Tambahkan bagian berikut ke dalam file main.tf
Anda.
## This creates a cloud resource connection. ## Note: The cloud resource nested object has only one output only field - serviceAccountId. resource "google_bigquery_connection" "connection" { connection_id = "CONNECTION_ID" project = "PROJECT_ID" location = "REGION" cloud_resource {} }Ganti kode berikut:
CONNECTION_ID
: ID untuk koneksi AndaPROJECT_ID
: project ID Google Cloud AndaREGION
: region koneksi Anda
Memberikan akses pada akun layanan
Berikan peran Agen Layanan Vertex AI kepada akun layanan Anda agar akun layanan tersebut dapat mengakses Vertex AI. Kegagalan memberikan peran ini akan menyebabkan error. Pilih salah satu opsi berikut:
Konsol
Buka halaman IAM & Admin.
Klik
Grant access.Dialog Add principals akan terbuka.
Di kolom New principals, masukkan ID akun layanan yang Anda salin sebelumnya.
Klik Select a role.
Di Filter, ketik
Vertex AI Service Agent
, lalu pilih peran tersebut.Klik Save.
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 AndaMEMBER
: ID akun layanan yang Anda salin sebelumnya
Akun layanan yang terkait dengan koneksi Anda adalah instance BigQuery Connection Delegation Service Agent, sehingga Anda dapat menetapkan peran agen layanan ke akun tersebut.
Memberikan akses akun layanan default Compute Engine
Saat Anda mengaktifkan Compute Engine API, akun layanan default Compute Engine otomatis diberi peran Editor pada project, kecuali jika Anda telah menonaktifkan perilaku ini untuk project Anda. Jika demikian, Anda harus memberikan kembali peran Editor ke akses akun layanan default Compute Engine agar memiliki izin yang memadai untuk membuat dan menyesuaikan model jarak jauh.
Konsol
Buka halaman IAM & Admin.
Klik
Berikan Akses.Untuk Akun utama baru, masukkan ID akun layanan, yaitu
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.Klik Select a role.
Pada bagian Pilih peran, pilih Dasar, lalu pilih Editor.
Klik Save.
gcloud
Gunakan
perintah gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/editor' --condition=None
Ganti kode berikut:
PROJECT_NUMBER
: nomor project Anda.MEMBER
: ID akun layanan, yaituPROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Membuat tabel pengujian
Buat tabel data pelatihan dan evaluasi berdasarkan set data MTSamples publik dari laporan medis yang ditranskripsikan.
Set data ini memiliki kolom input_text
yang berisi transkrip medis dan kolom output_text
yang berisi label yang paling menggambarkan kategori transkrip, misalnya Allergy/Immunology
, Dentistry
, atau Cardiovascular/Pulmonary
. Buat tabel yang berisi data {i>prompt <i}
untuk klasifikasi transkrip medis.
Anda mengimpor data transkripsi medis dari bucket Cloud Storage publik.
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut untuk membuat tabel data evaluasi:
LOAD DATA INTO `bqml_tutorial.medical_transcript_eval` FROM FILES(format='NEWLINE_DELIMITED_JSON', uris = ['gs://cloud-samples-data/vertex-ai/model-evaluation/peft_eval_sample.jsonl']);
Di editor kueri, jalankan pernyataan berikut untuk membuat tabel data pelatihan:
LOAD DATA INTO `bqml_tutorial.medical_transcript_train` FROM FILES(format='NEWLINE_DELIMITED_JSON', uris = ['gs://cloud-samples-data/vertex-ai/model-evaluation/peft_train_sample.jsonl']);
Di editor kueri, jalankan pernyataan berikut untuk membuat tabel perintah:
CREATE OR REPLACE TABLE `bqml_tutorial.transcript_classification` AS (SELECT 'Please assign a label for the given medical transcript from among these labels [Allergy / Immunology, Autopsy, Bariatrics, Cardiovascular / Pulmonary, Chiropractic, Consult - History and Phy., Cosmetic / Plastic Surgery, Dentistry, Dermatology, Diets and Nutritions, Discharge Summary, ENT - Otolaryngology, Emergency Room Reports, Endocrinology, Gastroenterology, General Medicine, Hematology - Oncology, Hospice - Palliative Care, IME-QME-Work Comp etc., Lab Medicine - Pathology, Letters, Nephrology, Neurology, Neurosurgery, Obstetrics / Gynecology, Office Notes, Ophthalmology, Orthopedic, Pain Management, Pediatrics - Neonatal, Physical Medicine - Rehab, Podiatry, Psychiatry / Psychology, Radiology, Rheumatology, SOAP / Chart / Progress Notes, Sleep Medicine, Speech - Language, Surgery, Urology].' AS prompt);
Membuat model dasar pengukuran
Buat
model jarak jauh
melalui model text-bison
Vertex AI yang dapat Anda gunakan untuk mengklasifikasi
transkrip medis.
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut untuk membuat model jarak jauh:
CREATE OR REPLACE MODEL `bqml_tutorial.text_bison_001` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT ='text-bison@001');
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 Connection ID, misalnyaprojects/myproject/locations/connection_location/connections/myconnection
.
Kueri memerlukan waktu beberapa detik untuk diselesaikan, setelah itu model
text_bison_001
akan muncul di set databqml_tutorial
di panel Explorer. Karena kueri tersebut menggunakan pernyataanCREATE MODEL
untuk membuat model, tidak ada hasil kueri.
Memeriksa performa model dasar
Jalankan fungsi ML.GENERATE_TEXT
dengan model jarak jauh untuk melihat performanya pada data evaluasi tanpa perlu melakukan penyesuaian.
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
SELECT * FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.text_bison_001`, ( SELECT CONCAT( (SELECT prompt from `bqml_tutorial.transcript_classification`), ' ', input_text) AS prompt, output_text AS label FROM `bqml_tutorial.medical_transcript_eval` ), STRUCT(TRUE AS flatten_json_output)) ORDER BY ml_generate_text_llm_result;
Jika Anda memeriksa data output dan membandingkan nilai
ml_generate_text_llm_result
danlabel
, Anda akan melihat bahwa meskipun model dasar pengukuran memprediksi banyak klasifikasi transkrip dengan benar, model ini salah mengklasifikasikan beberapa transkrip. Berikut adalah contoh representatif dari output yang salah. Dalam contoh ini, klasifikasi yang benar adalahCardiovascular / Pulmonary
, bukanRadiology
.+-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+ | ml_generate_text_llm_result | ml_generate_text_rai_result | ml_generate_text_status | prompt | label | +-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+ | Radiology | {"blocked":false,"categories": | | Please assign a label for the given medical | Cardiovascular / Pulmonary | | | ["Derogatory","Health", | | transcript from among these labels [Allergy / | | | | "Insult","Public Safety",... | | Immunology, Autopsy, Bariatrics, | | | | | | Cardiovascular / Pulmonary, Chiropractic, | | | | | | Consult - History and Phy., Cosmetic / | | | | | | Plastic Surgery, Dentistry, Dermatology, | | | | | | Diets and Nutritions, Discharge Summary, ENT | | | | | | - Otolaryngology, Emergency Room Reports, | | | | | | Endocrinology, Gastroenterology, General | | | | | | Medicine, Hematology - Oncology, Hospice - | | | | | | Palliative Care, IME-QME-Work Comp etc., | | | | | | Lab Medicine - Pathology, Letters, | | | | | | Nephrology, Neurology, Neurosurgery, | | | | | | Obstetrics / Gynecology, Office Notes, | | | | | | Ophthalmology, Orthopedic, Pain Management, | | | | | | Pediatrics - Neonatal, Physical Medicine - | | | | | | Rehab, Podiatry, Psychiatry / Psychology, | | | | | | Radiology, Rheumatology, SOAP / Chart / | | | | | | Progress Notes, Sleep Medicine, Speech - | | | | | | Language, Surgery, Urology]. | | | | | | TRANSCRIPT: | | | | | | INDICATIONS FOR PROCEDURE:, The patient has | | | | | | presented with atypical type right arm | | | | | | discomfort and neck discomfort. She had | | | | | | noninvasive vascular imaging demonstrating | | | | | | suspected right subclavian stenosis. Of note, | | | | | | there was bidirectional flow in the right | | | | | | vertebral artery, as well as 250 cm... | | +-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+
Mengevaluasi model dasar
Untuk melakukan evaluasi performa model yang lebih mendetail, gunakan
fungsi ML.EVALUATE
.
Fungsi ini menghitung metrik model, seperti presisi, perolehan, dan skor F1, untuk melihat perbandingan respons model dengan respons yang ideal.
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.text_bison_001`, ( SELECT CONCAT( (SELECT prompt FROM `bqml_tutorial.transcript_classification`), ' ', input_text) AS input_text, output_text FROM `bqml_tutorial.medical_transcript_eval` ), STRUCT('classification' AS task_type)) ORDER BY label;
Outputnya terlihat mirip dengan yang berikut ini:
+------------------------------+----------------------------------+-------------------------------------------------------------------------+ | precision | recall | f1_score | label | evaluation_status | +---------------------+---------------------+---------------------+----------------------------+--------------------------------------------+ | 1.0 | 0.66666666666666663 | 0.8 | Allergy / Immunology | { | | | | | | "num_successful_rows": 164, | | | | | | "num_total_rows": 164 | | | | | | } | +---------------------+---------------------+ --------------------+----------------------------+--------------------------------------------+ | 1.0 | 1.0 | 1.0 | Autopsy | { | | | | | | "num_successful_rows": 164, | | | | | | "num_total_rows": 164 | | | | | | } | +---------------------+---------------------+--------------- -----+----------------------------+--------------------------------------------+ | 1.0 | 0.66666666666666663 | 0.8 | Bariatrics | { | | | | | | "num_successful_rows": 164, | | | | | | "num_total_rows": 164 | | | | | | } | +---------------------+---------------------+---------------------+----------------------------+--------------------------------------------+
Jika melihat hasil di kolom f1_score
, Anda dapat melihat bahwa performa model bervariasi antar-class transkrip. Nilai skor F1 yang lebih tinggi
menunjukkan performa yang lebih baik. Model dasar pengukuran berperforma baik untuk sebagian besar class,
tetapi memiliki performa buruk di class lainnya, misalnya class Cardiovascular / Pulmonary
dan
Chiropractic
. Berdasarkan hal ini, Anda dapat melihat bahwa perlu melakukan penyesuaian yang diawasi untuk mengetahui apakah performa model dapat ditingkatkan 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.
Kueri ini mungkin memakan waktu beberapa jam untuk diselesaikan.
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut untuk membuat model jarak jauh:
CREATE OR REPLACE MODEL `bqml_tutorial.text_bison_001_medical_transcript_tuned` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS ( endpoint = 'text-bison@001', max_iterations = 300, data_split_method = 'no_split') AS SELECT CONCAT( (SELECT prompt FROM `bqml_tutorial.transcript_classification`), ' ', input_text) AS prompt, output_text AS label FROM `bqml_tutorial.medical_transcript_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 Connection ID, misalnyaprojects/myproject/locations/connection_location/connections/myconnection
.
Kueri mungkin memerlukan waktu beberapa jam untuk diselesaikan, setelah itu model
text_bison_001_medical_transcript_tuned
akan muncul di set databqml_tutorial
di panel Explorer. Karena kueri tersebut menggunakan pernyataanCREATE MODEL
untuk membuat model, tidak ada hasil kueri.
Memeriksa performa model yang telah disesuaikan
Jalankan fungsi ML.GENERATE_TEXT
untuk melihat performa model yang telah disesuaikan pada data evaluasi.
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
SELECT * FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.text_bison_001_medical_transcript_tuned`, ( SELECT CONCAT( (SELECT prompt from `bqml_tutorial.transcript_classification`), ' ', input_text) AS prompt, output_text AS label FROM `bqml_tutorial.medical_transcript_eval` ), STRUCT(TRUE AS flatten_json_output)) ORDER BY ml_generate_text_llm_result;
Jika memeriksa data output, Anda akan melihat bahwa model yang disesuaikan mengklasifikasikan lebih banyak transkripsi dengan benar. Contoh yang Anda lihat sebelumnya kini diklasifikasikan dengan benar sebagai
Cardiovascular/ Pulmonary
.+-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+ | ml_generate_text_llm_result | ml_generate_text_rai_result | ml_generate_text_status | prompt | label | +-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+ | Cardiovascular/Pulmonary | {"blocked":false,"categories": | | Please assign a label for the given medical | Cardiovascular / Pulmonary | | | ["Derogatory","Health", | | transcript from among these labels [Allergy / | | | | "Insult","Public Safety",... | | Immunology, Autopsy, Bariatrics, | | | | | | Cardiovascular / Pulmonary, Chiropractic, | | | | | | Consult - History and Phy., Cosmetic / | | | | | | Plastic Surgery, Dentistry, Dermatology, | | | | | | Diets and Nutritions, Discharge Summary, ENT | | | | | | - Otolaryngology, Emergency Room Reports, | | | | | | Endocrinology, Gastroenterology, General | | | | | | Medicine, Hematology - Oncology, Hospice - | | | | | | Palliative Care, IME-QME-Work Comp etc., | | | | | | Lab Medicine - Pathology, Letters, | | | | | | Nephrology, Neurology, Neurosurgery, | | | | | | Obstetrics / Gynecology, Office Notes, | | | | | | Ophthalmology, Orthopedic, Pain Management, | | | | | | Pediatrics - Neonatal, Physical Medicine - | | | | | | Rehab, Podiatry, Psychiatry / Psychology, | | | | | | Radiology, Rheumatology, SOAP / Chart / | | | | | | Progress Notes, Sleep Medicine, Speech - | | | | | | Language, Surgery, Urology]. | | | | | | TRANSCRIPT: | | | | | | INDICATIONS FOR PROCEDURE:, The patient has | | | | | | presented with atypical type right arm | | | | | | discomfort and neck discomfort. She had | | | | | | noninvasive vascular imaging demonstrating | | | | | | suspected right subclavian stenosis. Of note, | | | | | | there was bidirectional flow in the right | | | | | | vertebral artery, as well as 250 cm... | | +-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+
Mengevaluasi model yang di-tuning
Gunakan fungsi ML.EVALUATE
untuk melihat perbandingan respons model yang telah disesuaikan dengan respons yang ideal.
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.text_bison_001_medical_transcript_tuned`, ( SELECT CONCAT( (SELECT prompt from `bqml_tutorial.transcript_classification`), ' ', input_text) AS prompt, output_text AS label FROM `bqml_tutorial.medical_transcript_eval` ), STRUCT('classification' AS task_type)) ORDER BY label;
Outputnya terlihat mirip dengan yang berikut ini:
+------------------------------+----------------------------------+-------------------------------------------------------------------------+ | precision | recall | f1_score | label | evaluation_status | +---------------------+---------------------+---------------------+----------------------------+--------------------------------------------+ | 0.8571428571428571 | 0.66666666666666663 | 0.75 | Dermatology | { | | | | | | "num_successful_rows": 164, | | | | | | "num_total_rows": 164 | | | | | | } | +---------------------+---------------------+ --------------------+----------------------------+--------------------------------------------+ | 0.54545454545454541 | 0.4 | 0.46153846153846156 | Discharge Summary | { | | | | | | "num_successful_rows": 164, | | | | | | "num_total_rows": 164 | | | | | | } | +---------------------+---------------------+--------------- -----+----------------------------+--------------------------------------------+ | 1.0 | 1.0 | 1.0 | Diets and Nutritions | { | | | | | | "num_successful_rows": 164, | | | | | | "num_total_rows": 164 | | | | | | } | +---------------------+---------------------+---------------------+----------------------------+--------------------------------------------+
Anda dapat melihat bahwa meskipun set data pelatihan hanya menggunakan 519 contoh, terdapat peningkatan performa yang signifikan. Skor F1 untuk label-label dengan model dasar pengukuran yang tidak berperforma baik juga meningkat, dengan rata-rata skor F1 di semua label meningkat dari 0,54 menjadi 0,63.
Pembersihan
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.