Usa l'ottimizzazione e la valutazione per migliorare le prestazioni dei modelli LLM
Questo documento mostra come creare un modello remoto BigQuery ML che faccia riferimento a un modello di base text-bison
di Vertex AI.
Successivamente, utilizzerai l'ottimizzazione supervisionata per ottimizzare il modello con nuovi dati di addestramento, seguita dalla valutazione del modello con la funzione ML.EVALUATE
.
Questo può aiutarti a gestire gli scenari in cui devi personalizzare il modello Vertex AI ospitato, ad esempio quando il comportamento previsto del modello è difficile da definire in modo conciso in un prompt o quando i prompt non producono risultati attesi in modo abbastanza coerente. L'ottimizzazione supervisionata influenza il modello anche nei seguenti modi:
- Indica al modello di restituire stili di risposta specifici, ad esempio più concisi o dettagliati.
- Insegna al modello nuovi comportamenti, ad esempio rispondendo ai prompt come utente tipo specifico.
- Causa l'aggiornamento del modello con nuove informazioni.
Autorizzazioni obbligatorie
Per creare una connessione, devi avere il seguente ruolo di Identity and Access Management (IAM):
roles/bigquery.connectionAdmin
Per concedere le autorizzazioni all'account di servizio della connessione, devi disporre della seguente autorizzazione:
resourcemanager.projects.setIamPolicy
Per creare il modello utilizzando BigQuery ML, devi disporre delle seguenti autorizzazioni IAM:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:
bigquery.tables.getData
sul tavolobigquery.models.getData
sul modellobigquery.jobs.create
Prima di iniziare
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API BigQuery, BigQuery Connection, Vertex AI, and Compute Engine.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- BigQuery: ti vengono addebitati dei costi per le query eseguite in BigQuery.
- BigQuery ML: ti vengono addebitati dei costi per il modello che hai creato e per l'elaborazione che esegui in BigQuery ML.
- Vertex AI: ti sono addebitati costi per le chiamate e l'ottimizzazione supervisionata del modello
text-bison
.
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Per maggiori informazioni, consulta le seguenti risorse:
crea un set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML:
Nella console Google Cloud, vai alla pagina BigQuery.
Nel riquadro Explorer, fai clic sul nome del progetto.
Fai clic su
Visualizza azioni > Crea set di dati.Nella pagina Crea set di dati, segui questi passaggi:
In ID set di dati, inserisci
bqml_tutorial
.Per Tipo di località, seleziona Più regioni e poi Stati Uniti (più regioni negli Stati Uniti).
I set di dati pubblici vengono archiviati in
US
più regioni. Per semplicità, memorizza il set di dati nella stessa posizione.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Creazione di una connessione
Crea una connessione alle risorse cloud e recupera l'ID dell'account di servizio della connessione. Crea la connessione nella stessa località del set di dati creato nel passaggio precedente.
Seleziona una delle seguenti opzioni:
Console
Vai alla pagina BigQuery.
Per creare una connessione, fai clic su
Aggiungi e poi su Connessioni a origini dati esterne.Nell'elenco Tipo di connessione, seleziona Modelli remoti Vertex AI, funzioni remote e BigLake (risorsa Cloud).
Nel campo ID connessione, inserisci un nome per la connessione.
Fai clic su Crea connessione.
Fai clic su Vai alla connessione.
Nel riquadro Informazioni sulla connessione, copia l'ID account di servizio da utilizzare in un passaggio successivo.
bq
In un ambiente a riga di comando, crea una connessione:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
Il parametro
--project_id
sostituisce il progetto predefinito.Sostituisci quanto segue:
REGION
: la tua regione di connessionePROJECT_ID
: l'ID del tuo progetto Google CloudCONNECTION_ID
: un ID per la tua connessione
Quando crei una risorsa di connessione, BigQuery crea un account di servizio di sistema univoco e lo associa alla connessione.
Risoluzione dei problemi: se visualizzi il seguente errore di connessione, aggiorna Google Cloud SDK:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Recupera e copia l'ID account di servizio per utilizzarlo in un passaggio successivo:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
L'output è simile al seguente:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
Aggiungi la sezione seguente al file main.tf
.
## 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 {} }Sostituisci quanto segue:
CONNECTION_ID
: un ID per la tua connessionePROJECT_ID
: l'ID del tuo progetto Google CloudREGION
: la tua regione di connessione
Concedere l'accesso all'account di servizio
Concedi al tuo account di servizio il ruolo Agente di servizio Vertex AI in modo che possa accedere a Vertex AI. La mancata concessione di questo ruolo genera un errore. Seleziona una delle seguenti opzioni:
Console
Vai alla pagina IAM e amministrazione.
Fai clic su
Concedi l'accesso.Viene visualizzata la finestra di dialogo Aggiungi entità.
Nel campo Nuove entità, inserisci l'ID account di servizio che hai copiato in precedenza.
Fai clic su Seleziona un ruolo.
In Filtro, digita
Vertex AI Service Agent
e seleziona il ruolo.Fai clic su Salva.
gcloud
Utilizza il comando gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None
Sostituisci quanto segue:
PROJECT_NUMBER
: il numero del tuo progettoMEMBER
: l'ID account di servizio che hai copiato in precedenza
L'account di servizio associato alla connessione è un'istanza dell'agente di servizio per la delega di connessioni BigQuery, quindi è accettabile assegnare un ruolo di agente di servizio.
Concedere l'accesso all'account di servizio predefinito di Compute Engine
Quando abiliti l'API Compute Engine, all'account di servizio predefinito di Compute Engine viene automaticamente concesso il ruolo Editor sul progetto, a meno che tu non abbia disabilitato questo comportamento per il progetto. In questo caso, devi concedere nuovamente il ruolo Editor all'accesso all'account di servizio predefinito di Compute Engine in modo che abbia autorizzazioni sufficienti per creare e ottimizzare un modello remoto.
Console
Vai alla pagina IAM e amministrazione.
Fai clic su
Concedi l'accesso.In Nuove entità, inserisci l'ID account di servizio, che è
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.Fai clic su Seleziona un ruolo.
In Seleziona un ruolo, scegli Di base e poi seleziona Editor.
Fai clic su Salva.
gcloud
Utilizza il comando gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/editor' --condition=None
Sostituisci quanto segue:
PROJECT_NUMBER
: il numero del tuo progetto.MEMBER
: l'ID account di servizio, che èPROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Creazione di tabelle di test
Crea tabelle di dati di addestramento e valutazione basati sul set di dati pubblico MTSamples di referti medici trascritti.
Questo set di dati ha una colonna input_text
contenente la trascrizione medica e una colonna output_text
che contiene l'etichetta che meglio descrive la categoria della trascrizione, ad esempio Allergy/Immunology
, Dentistry
, o Cardiovascular/Pulmonary
. Crea anche una tabella che contiene i dati
dei prompt per la classificazione dei certificati medici.
Importerai i dati della trascrizione medica da un bucket Cloud Storage pubblico.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor query, esegui la seguente istruzione per creare una tabella di dati di valutazione:
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']);
Nell'editor query, esegui la seguente istruzione per creare una tabella di dati di addestramento:
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']);
Nell'editor query, esegui la seguente istruzione per creare una tabella dei prompt:
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);
Crea un modello di riferimento
Crea un modello remoto sul modello text-bison
di Vertex AI che puoi usare per classificare le trascrizioni mediche.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor query, esegui la seguente istruzione per creare un modello remoto:
CREATE OR REPLACE MODEL `bqml_tutorial.text_bison_001` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT ='text-bison@001');
Sostituisci quanto segue:
LOCATION
: la località della connessione.CONNECTION_ID
: l'ID della tua connessione BigQuery.Quando visualizza i dettagli della connessione nella console Google Cloud,
CONNECTION_ID
è il valore nell'ultima sezione dell'ID connessione completo mostrato in ID connessione, ad esempioprojects/myproject/locations/connection_location/connections/myconnection
.
Il completamento della query richiede alcuni secondi, dopodiché il modello
text_bison_001
viene visualizzato nel set di datibqml_tutorial
nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non ci sono risultati della query.
Controlla le prestazioni del modello di riferimento
Esegui la funzione ML.GENERATE_TEXT
con il modello remoto per vedere le sue prestazioni sui dati di valutazione senza alcuna ottimizzazione.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'Editor query, esegui la seguente istruzione:
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;
Se esamini i dati di output e confronti i valori
ml_generate_text_llm_result
elabel
, noti che, anche se il modello di riferimento prevede correttamente molte classificazioni di trascrizioni, alcune trascrizioni vengono classificate in modo errato. Di seguito è riportato un esempio rappresentativo di output non corretto. In questo esempio, la classificazione corretta èCardiovascular / Pulmonary
, nonRadiology
.+-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+ | 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... | | +-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+
Valuta il modello di riferimento
Per eseguire una valutazione più dettagliata delle prestazioni del modello, utilizza la funzione ML.EVALUATE
.
Questa funzione calcola le metriche del modello, come precisione, richiamo e punteggio F1, per confrontare le risposte del modello con quelle ideali.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'Editor query, esegui la seguente istruzione:
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;
L'output è simile al seguente:
+------------------------------+----------------------------------+-------------------------------------------------------------------------+ | 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 | | | | | | } | +---------------------+---------------------+---------------------+----------------------------+--------------------------------------------+
Se esamini i risultati nella colonna f1_score
, puoi vedere che le prestazioni del modello variano tra le classi di trascrizione. Valori di punteggio F1 più alti
indicano prestazioni migliori. Il modello di riferimento funziona bene per la maggior parte delle classi,
ma ha un rendimento scarso per altre, ad esempio per le
classi Cardiovascular / Pulmonary
e
Chiropractic
. Sulla base di questi dati, puoi vedere che vale la pena eseguire l'ottimizzazione supervisionata per vedere se puoi migliorare le prestazioni del modello per questo caso d'uso.
Crea un modello ottimizzato
Crea un modello remoto molto simile a quello creato nella sezione Crea un modello, ma questa volta specifica la clausola AS SELECT
per fornire i dati di addestramento e ottimizzare il modello.
Il completamento di questa query potrebbe richiedere un paio d'ore.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor query, esegui la seguente istruzione per creare un modello remoto:
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`;
Sostituisci quanto segue:
LOCATION
: la località della connessione.CONNECTION_ID
: l'ID della tua connessione BigQuery.Quando visualizza i dettagli della connessione nella console Google Cloud,
CONNECTION_ID
è il valore nell'ultima sezione dell'ID connessione completo mostrato in ID connessione, ad esempioprojects/myproject/locations/connection_location/connections/myconnection
.
Il completamento della query potrebbe richiedere diverse ore, dopodiché il modello
text_bison_001_medical_transcript_tuned
viene visualizzato nel set di datibqml_tutorial
nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non ci sono risultati della query.
Controlla le prestazioni del modello ottimizzato
Esegui la funzione ML.GENERATE_TEXT
per vedere le prestazioni del modello ottimizzato sui dati di valutazione.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'Editor query, esegui la seguente istruzione:
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;
Se esamini i dati di output, noti che il modello ottimizzato classifica correttamente più trascrizioni. L'esempio che hai esaminato in precedenza è ora classificato correttamente come
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... | | +-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+
Valuta il modello ottimizzato
Utilizza la funzione ML.EVALUATE
per confrontare le risposte del modello ottimizzato con quelle ideali.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'Editor query, esegui la seguente istruzione:
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;
L'output è simile al seguente:
+------------------------------+----------------------------------+-------------------------------------------------------------------------+ | 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 | | | | | | } | +---------------------+---------------------+---------------------+----------------------------+--------------------------------------------+
Puoi notare che anche se il set di dati di addestramento ha utilizzato solo 519 esempi, il rendimento è migliorato in modo netto. I punteggi F1 nelle etichette in cui il modello di riferimento non ha funzionato altrettanto bene sono migliorati, con la media dei punteggi F1 in tutte le etichette che è aumentata da 0,54 a 0,63.
Esegui la pulizia
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.