Utilizzare l'ottimizzazione e la valutazione per migliorare le prestazioni del modello
Questo documento mostra come creare un modello BigQuery ML
modello remoto
che fa riferimento a un
Modello gemini-1.0-pro-002
Vertex AI.
Quindi utilizzi
ottimizzazione supervisionata
per ottimizzare il modello con nuovi dati di addestramento, per poi valutare il modello
con
Funzione ML.EVALUATE
.
In questo modo puoi risolvere gli scenari in cui devi personalizzare modello Vertex AI, ad esempio quando il comportamento previsto del modello è difficile da definire in modo conciso in un prompt, o quando i prompt non producono risultati i risultati in modo coerente. L'ottimizzazione supervisionata influisce anche sul modello nei seguenti modi:
- Indica al modello di restituire stili di risposta specifici, ad esempio più concisi o più descrittivi.
- Insegna al modello nuovi comportamenti, ad esempio rispondendo ai prompt come un utente tipo specifico.
- Fai in modo che il modello si aggiorni con nuove informazioni.
Autorizzazioni obbligatorie
Per creare una connessione, è necessario quanto segue Identity and Access Management (IAM) ruolo:
roles/bigquery.connectionAdmin
Per concedere le autorizzazioni all'account di servizio della connessione, è necessario il seguente autorizzazione:
resourcemanager.projects.setIamPolicy
Per creare il modello utilizzando BigQuery ML, è necessario quanto segue 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, Vertex AI, and Compute Engine APIs.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
- 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-pro-002
model.
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 tuo progetto.
Fai clic su
Visualizza azioni > Crea set di dati.Nella pagina Crea set di dati:
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 sono archiviati nella
US
multiregione. Per semplicità, per archiviare il set di dati nella stessa posizione.Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
Crea una connessione
Crea una connessione risorsa Cloud e recupera l'ID account di servizio della connessione. Crea la connessione nella stessa posizione 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 una 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 regione di connessionePROJECT_ID
: l'ID del tuo progetto Google CloudCONNECTION_ID
: un ID per la connessione
Quando crei una risorsa di connessione, BigQuery crea un account di servizio di sistema unico e lo associa alla connessione.
Risoluzione dei problemi: se ricevi 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 secondo momento passaggio:
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 seguente sezione 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 {} }
CONNECTION_ID
: un ID per connessionePROJECT_ID
: il tuo ID progetto Google CloudREGION
: il tuo regione di connessione
Concedi l'accesso all'account di servizio della connessione
Concedi al tuo account di servizio il ruolo Agente di servizio Vertex AI in modo che possa accedere a Vertex AI. Errore per concedere questo ruolo genera un errore. Seleziona una delle seguenti opzioni:
Console
Vai alla pagina IAM e amministrazione.
Fai clic su
Concedi 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 la
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 dell'account di servizio che copiato in precedenza
L'account di servizio associato alla connessione è un'istanza dell'agente di servizio di delega della connessione BigQuery, pertanto è accettabile assegnargli un ruolo di agente di servizio.
Concedi all'account di servizio predefinito di Compute Engine l'accesso
Quando attivi l'API Compute Engine, al service account predefinito di Compute Engine viene concesso automaticamente il ruolo Editor sul progetto, a meno che non lo abbia disattivato per il progetto. In questo caso, devi concedere nuovamente il ruolo Editor a l'accesso all'account di servizio predefinito di Compute Engine, in modo che abbia autorizzazioni necessarie per creare e ottimizzare un modello remoto.
Console
Vai alla sezione IAM e Console di amministrazione.
Fai clic su
Concedi l'accesso.In Nuove entità, inserisci l'ID account di servizio, ovvero
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 progetto.MEMBER
: l'ID account di servizio, ovveroPROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Crea un agente di servizio di ottimizzazione
Crea un'istanza del metodo Agente di servizio di ottimizzazione sicura di Vertex AI:
Utilizza il comando
gcloud beta services identity create
per creare l'agente di servizio di ottimizzazione:gcloud beta services identity create --service=aiplatform.googleapis.com --project=PROJECT_NUMBER
Sostituisci
PROJECT_NUMBER
con il numero del tuo progetto.Utilizza la Comando
gcloud projects add-iam-policy-binding
per concedere all'agente di servizio di ottimizzazione Ruolo Agente di servizio ottimizzazione Vertex AI (roles/aiplatform.tuningServiceAgent
):gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-vertex-tune.iam.gserviceaccount.com' --role='roles/aiplatform.tuningServiceAgent'
Sostituisci
PROJECT_NUMBER
con il numero del tuo progetto.
Creare tabelle di test
Crea tabelle di dati di addestramento e valutazione in base al set di dati pubblico MTSamples di referti medici trascritti.
Questo set di dati ha una colonna input_text
che contiene la trascrizione medica
e una colonna output_text
che contiene l'etichetta che meglio descrive
categoria della trascrizione, ad esempio Allergy/Immunology
, Dentistry
,
o Cardiovascular/Pulmonary
. Inoltre, crea una tabella che contiene il prompt
dati per la classificazione del certificato medico.
Importa i dati della trascrizione medica da un bucket Cloud Storage pubblico.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di 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 di 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 di query, esegui la seguente istruzione per creare una tabella di 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 Vertex AI gemini-1.0-pro-002
che puoi utilizzare per classificare
trascrizioni mediche.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, esegui la seguente istruzione per creare un modello remoto:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini-baseline` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT ='gemini-1.0-pro-002');
Sostituisci quanto segue:
LOCATION
: posizione della connessione.CONNECTION_ID
: l'ID della connessione BigQuery.Quando visualizzi i dettagli della connessione nella console Google Cloud,
CONNECTION_ID
è il valore nell'ultima sezione l'ID connessione completo mostrato Connection ID (ID connessione), ad esempioprojects/myproject/locations/connection_location/connections/myconnection
,
Il completamento della query richiede diversi secondi, dopodiché Il modello
gemini-baseline
compare nel set di datibqml_tutorial
nella sezione Riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per creare un modello, non ci sono risultati della query.
Controllare le prestazioni del modello di riferimento
Esegui l'
Funzione ML.GENERATE_TEXT
con il modello remoto per vedere le prestazioni sui dati di valutazione senza
dell'ottimizzazione.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, esegui la seguente istruzione:
SELECT * FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini-baseline`, ( 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
, noterai che, sebbene il modello di riferimento preveda correttamente molte classificazioni delle trascrizioni, classifica alcune trascrizioni in modo errato. Quello che segue è un esempio rappresentativo un output errato. In questo esempio, la classificazione corretta èAutopsy
, nonPulmonary Embolism
.+------------------------------------+---------------------------------+-------------------------------------------------------------------------+--------------+ | ml_generate_text_llm_result | ml_generate_text_rai_result | ml_generate_text_status | prompt | label | +------------------------------------+---------------------------------+-------------------------------------------------------------------------+--------------+ | ## Label:Pulmonary Embolism | [{"category":1,"probability":1 | | Please assign a label for the given medical | Autopsy | | | ,"probability_score":0.19433 | | transcript from among these labels [Allergy / | | | | "594,"severity":2,... | | 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: | | | | | | SUMMARY OF CLINICAL HISTORY:, | | | | | | OF The patient was a 35-year-old | | | | | | African-American male with no | | | | | | significant past medical history | | | | | | a who called EMS with shortness of breath | | | | | | had and chest pain. Upon EMS | | | | | | arrival, patient was... | | +------------------------------------+---------------------------------+-------------------------------------------------------------------------+--------------+
Valutare 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 di query, esegui la seguente istruzione:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini-baseline`, ( 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 | +---------------------+---------------------+---------------------+----------------------------+--------------------------------------------+ | 0.0 | 0.0 | 0.0 | Allergy / Immunology | { | | | | | | "num_successful_rows": 474, | | | | | | "num_total_rows": 492 | | | | | | } | +---------------------+---------------------+ --------------------+----------------------------+--------------------------------------------+ | 0.0 | 0.0 | 0.0 | Autopsy | { | | | | | | "num_successful_rows": 474, | | | | | | "num_total_rows": 492 | | | | | | } | +---------------------+---------------------+--------------- -----+----------------------------+--------------------------------------------+ | 0.0 | 0.0 | 0.0 | Bariatrics | { | | | | | | "num_successful_rows": 474, | | | | | | "num_total_rows": 492 | | | | | | } | +---------------------+---------------------+---------------------+----------------------------+--------------------------------------------+
Puoi vedere che il modello di riferimento non ha un buon rendimento per questi dati, in base ai punteggi f1
bassi. Ciò indica che vale la pena eseguire
l'ottimizzazione supervisionata per capire 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 in Creare un modello, ma questa volta specificando la clausola AS SELECT
per fornire i dati di addestramento al fine di 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 questa istruzione per creare modello remoto:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini-tuned` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS ( endpoint = 'gemini-1.0-pro-002', 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
: posizione della connessione.CONNECTION_ID
: l'ID della connessione BigQuery.Quando visualizzi i dettagli della connessione nella console Google Cloud,
CONNECTION_ID
è il valore nell'ultima sezione l'ID connessione completo mostrato Connection ID (ID connessione), ad esempioprojects/myproject/locations/connection_location/connections/myconnection
,
Il completamento della query potrebbe richiedere diverse ore, dopodiché il
gemini-tuned
modello verrà visualizzato nelbqml_tutorial
set di dati nel riquadro Esplorazione. 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 sul
di valutazione.
Nella console Google Cloud, vai alla pagina BigQuery.
Esegui la seguente istruzione nell'editor query:
SELECT * FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini-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, noterai che il modello ottimizzato classifica più trascrizioni correttamente. 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 | +-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+ | Autopsy | [{"category":1,"probability":1 | | Please assign a label for the given medical | Autopsy | | | ,"probability_score":0.19335938 | | transcript from among these labels [Allergy / | | | | ,"severity":2,"severity_scor... | | 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: | | | | | | SUMMARY OF CLINICAL HISTORY:, | | | | | | The patient was a 35-year-old | | | | | | African-American male with no | | | | | | significant past medical history | | | | | | a who called EMS with shortness of breath | | | | | | had and chest pain. Upon EMS | | | | | | arrival, patient was... | | +-----------------------------+---------------------------------+-------------------------------------------------------------------------+----------------------------+
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 di query, esegui la seguente istruzione:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini-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.5 | 0.66666666666666663 | 0.5714285714285714 | Allergy/Immunology | { | | | | | | "num_successful_rows": 439, | | | | | | "num_total_rows": 492 | | | | | | } | +---------------------+---------------------+ --------------------+----------------------------+--------------------------------------------+ | 1.0 | 1.0 | 1.0 | Autopsy | { | | | | | | "num_successful_rows": 439, | | | | | | "num_total_rows": 492 | | | | | | } | +---------------------+---------------------+--------------- -----+----------------------------+--------------------------------------------+ | 0.5 | 1.0 | 0.66666666666666663 | Bariatrics | { | | | | | | "num_successful_rows": 439, | | | | | | "num_total_rows": 492 | | | | | | } | +---------------------+---------------------+---------------------+----------------------------+--------------------------------------------+
Puoi notare che, anche se il set di dati di addestramento ha utilizzato solo 519 esempi,
si è verificato un netto miglioramento del rendimento, come indicato dai punteggi f1
più elevati.
Esegui la pulizia
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.