1. Introduzione
Perché il perfezionamento è importante
I foundation model vengono addestrati per uso generico e a volte non eseguono le attività che vorresti. Ciò potrebbe essere dovuto al fatto che le attività che vuoi che il modello esegua sono specializzate e difficili da insegnare a un modello utilizzando solo la progettazione dei prompt. In questi casi, puoi utilizzare l'ottimizzazione del modello per migliorarne le prestazioni per attività specifiche. L'ottimizzazione del modello può anche aiutarti a rispettare requisiti di output specifici quando le istruzioni non sono sufficienti. I modelli linguistici di grandi dimensioni (LLM) possono contenere una grande quantità di informazioni ed eseguire molte attività, ma eccellono solo se vengono sottoposti a un addestramento specializzato. L'ottimizzazione può addestrare un LLM, consentendoti di adattare un LLM preaddestrato alle tue esigenze specifiche.
In questo codelab, imparerai a eseguire il fine-tuning utilizzando l'approccio di ottimizzazione supervisionata per un modello LLM.
L'ottimizzazione supervisionata migliora le prestazioni di un modello insegnando una nuova competenza. I dati che contengono centinaia di esempi etichettati vengono utilizzati per insegnare al modello a imitare un comportamento o un'attività desiderati. Forniremo un set di dati etichettati per il testo di input (prompt) e il testo di output (risposta) per insegnare al modello come personalizzare le risposte per il nostro caso d'uso specifico.
Ulteriori informazioni sulla personalizzazione dei modelli sono disponibili qui.
Cosa creerai
Caso d'uso: generare titoli per articoli di notizie
Supponiamo che tu voglia generare automaticamente i titoli degli articoli di notizie. Utilizzando Vertex AI, puoi ottimizzare un LLM che genera un titolo riassuntivo adatto in uno stile specifico e personalizza il titolo in base alle linee guida del canale di notizie.
In questo codelab imparerai a:
- Utilizza
BBC FULLTEXT DATA(reso disponibile dal set di dati pubblico BigQuerybigquery-public-data.bbc_news.fulltext). - Ottimizza un LLM (
text-bison@002) in un nuovo modello ottimizzato chiamato "bbc-news-summary-tuned" e confronta il risultato con la risposta del modello di base. Per questo codelab è disponibile un file JSONL di esempio nel repository. Puoi caricare il file nel bucket Cloud Storage ed eseguire i seguenti passaggi di messa a punto: - Prepara i dati:inizia con un set di dati di articoli di notizie e i relativi titoli, come il set di dati di BBC News utilizzato nel codice di esempio.
- Ottimizza un modello preaddestrato:scegli un modello di base come "
text-bison@002" e ottimizzalo con i tuoi dati di notizie utilizzando l'SDK Vertex AI per Python. - Valuta i risultati:confronta le prestazioni del modello ottimizzato con quelle del modello di base per verificare il miglioramento della qualità della generazione dei titoli.
- Esegui il deployment e utilizza il modello:rendi disponibile il modello ottimizzato tramite un endpoint API e inizia a generare automaticamente i titoli per i nuovi articoli.
2. Prima di iniziare
- Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
- Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
- Apri Colab Notebook e accedi allo stesso account del tuo account Google Cloud attivo attuale.
3. Ottimizzare un modello linguistico di grandi dimensioni
Questo codelab utilizza l'SDK Vertex AI per Python per ottimizzare il modello. Puoi eseguire l'ottimizzazione anche utilizzando le altre opzioni: HTTP, comando CURL, SDK Java, console.
Puoi ottimizzare e valutare il modello per ottenere risposte personalizzate in 5 passaggi. Puoi fare riferimento al codice completo nel file llm_fine_tuning_supervised.ipynb del repository.
4. Passaggio 1: installa e importa le dipendenze
!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components
Segui i passaggi rimanenti come mostrato nel file .ipynb nel repository. Assicurati di sostituire PROJECT_ID e BUCKET_NAME con le tue credenziali.
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec
5. Passaggio 2: prepara e carica i dati di addestramento
Sostituisci YOUR_BUCKET con il tuo bucket e carica il file di dati di addestramento di esempio TRAIN.jsonl. I dati di esempio sono stati forniti per questo caso d'uso nel link menzionato in precedenza.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
Questo passaggio dovrebbe generare questo risultato:

6. Passaggio 3: ottimizza un modello linguistico di grandi dimensioni
A questo punto puoi ottimizzare qualsiasi modello linguistico di grandi dimensioni (in base alla disponibilità del supporto) . In questo snippet, tuttavia, stiamo ottimizzando il modello preaddestrato "text-bison@002" con il frame di dati che contiene i dati di addestramento caricati nel passaggio precedente:
model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)
Il completamento di questo passaggio richiede alcune ore. Puoi monitorare l'avanzamento dell'ottimizzazione utilizzando il link del job della pipeline nel risultato.
7. Passaggio 4: esegui la previsione con il nuovo modello ottimizzato
Una volta completato il job di ottimizzazione, potrai fare previsioni con il nuovo modello. Per fare previsioni con il nuovo modello ottimizzato:
response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
Dovresti vedere il seguente risultato:

Per eseguire la previsione con il modello di base (text-bison@002) a scopo di confronto, esegui i seguenti comandi:
base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
Dovresti vedere il seguente risultato:

Anche se entrambi i titoli generati sembrano appropriati, il primo (generato con il modello ottimizzato) è più in linea con lo stile dei titoli utilizzati nel set di dati in questione.
Carica il modello ottimizzato
Potrebbe essere più facile caricare un modello che hai appena ottimizzato. Ricorda però che nel passaggio 3 viene richiamato nell'ambito del codice stesso, quindi contiene ancora il modello ottimizzato nella variabile tuned_model. Ma cosa succede se vuoi richiamare un modello ottimizzato in passato?
Per farlo, puoi richiamare il metodo get_tuned_model() sull'LLM con l'URL dell'endpoint completo del modello sottoposto a fine tuning di cui è stato eseguito il deployment da Vertex AI Model Registry. Tieni presente che in questo caso devi inserire PROJECT_NUMBER e MODEL_NUMBER anziché i rispettivi ID.
tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))
8. Passaggio 5: valuta il nuovo modello ottimizzato
La valutazione è un aspetto fondamentale per determinare la qualità e la pertinenza della risposta generata. Consiste nell'esaminare l'output di un modello linguistico generativo per determinarne la coerenza, l'accuratezza e l'allineamento con il prompt fornito. La valutazione del modello aiuta a identificare le aree di miglioramento, ottimizzare le prestazioni del modello e garantire che il testo generato soddisfi gli standard desiderati di qualità e utilità. Scopri di più nella documentazione. Per ora, vedremo come ottenere alcune metriche di valutazione sul modello ottimizzato e confrontarle con il modello di base.
- Carica il set di dati EVALUATION:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
- Definisci la specifica di valutazione per un'attività di riepilogo del testo sul modello sottoposto a fine tuning.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
Il completamento di questo passaggio richiede alcuni minuti. Puoi monitorare l'avanzamento utilizzando il link al job della pipeline nel risultato. Al termine, dovresti vedere il seguente risultato della valutazione:

La metrica rougeLSum nel risultato della valutazione specifica il punteggio ROUGE-L per il riepilogo. ROUGE-L è una metrica basata sul richiamo che misura la sovrapposizione tra un riassunto e un riassunto di riferimento. Viene calcolato prendendo la sottosequenza comune più lunga (LCS) tra i due riassunti e dividendola per la lunghezza del riassunto di riferimento.
Il punteggio rougeLSum nell'espressione fornita è 0,36600753600753694, il che significa che il riepilogo ha una sovrapposizione del 36,6% con il riepilogo di riferimento.
Se esegui il passaggio di valutazione sul modello di base, noterai che il punteggio riepilogativo è relativamente più alto per il modello ottimizzato.
Puoi trovare i risultati della valutazione nella directory di output di Cloud Storage specificata durante la creazione del job di valutazione. Il file si chiama evaluation_metrics.json. Per i modelli ottimizzati, puoi anche visualizzare i risultati della valutazione nella console Google Cloud nella pagina Model Registry di Vertex AI.
9. Considerazioni importanti
- Supporto del modello:controlla sempre la documentazione del modello per la compatibilità più recente.
- Sviluppo rapido: il campo degli LLM avanza rapidamente. Un modello più recente e potente potrebbe potenzialmente superare un modello ottimizzato basato su una base precedente. La buona notizia è che potrai applicare queste tecniche di perfezionamento ai modelli più recenti quando la funzionalità sarà disponibile.
- LoRA:LoRA è una tecnica per ottimizzare in modo efficiente gli LLM. A questo scopo, introduce matrici di decomposizione di basso rango addestrabili nei livelli del modello preaddestrato esistente. Scopri di più qui. Anziché aggiornare tutti i parametri di un LLM di grandi dimensioni, LoRA apprende matrici più piccole che vengono aggiunte o moltiplicate per le matrici dei pesi del modello originale. In questo modo, il numero di parametri aggiuntivi introdotti durante il perfezionamento viene ridotto in modo significativo.
10. Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo codelab, segui questi passaggi:
- 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 progetto, quindi fai clic su Chiudi per eliminare il progetto.
- In alternativa, puoi andare a Model Registry, accedere alla scheda di deployment e test del modello, annullare il deployment dell'endpoint ed eliminare il modello ottimizzato di cui è stato eseguito il deployment.
11. Complimenti
Complimenti! Hai utilizzato correttamente Vertex AI per eseguire il fine-tuning di un modello LLM. Il fine-tuning è una tecnica efficace che ti consente di personalizzare i modelli LLM in base al tuo dominio e alle tue attività. Con Vertex AI, hai a disposizione gli strumenti e le risorse necessari per mettere a punto i tuoi modelli in modo efficiente ed efficace.
Esplora i repository GitHub e prova il codice di esempio per sperimentare in prima persona il fine tuning e la valutazione. Valuta in che modo gli LLM ottimizzati possono soddisfare le tue esigenze specifiche, dalla generazione di testi di marketing mirati al riepilogo di documenti complessi o alla traduzione di lingue con sfumature culturali. Utilizza la suite completa di strumenti e servizi offerti da Vertex AI per creare, addestrare, valutare ed eseguire il deployment dei modelli ottimizzati con facilità.