Ottimizzazione dei modelli linguistici di grandi dimensioni: in che modo Vertex AI porta gli LLM a un livello superiore

1. Introduzione

Perché il perfezionamento è importante

I modelli di base vengono addestrati per uso generico e talvolta non eseguono le attività come previsto. Questo potrebbe essere dovuto al fatto che le attività che vuoi che il modello esegua sono attività specializzate che sono difficili da addestrare un modello utilizzando solo la progettazione di prompt. In questi casi, puoi utilizzare l'ottimizzazione per migliorarne le prestazioni per attività specifiche. L'ottimizzazione del modello consente anche di rispettare specifici requisiti di output quando le istruzioni non sono sufficienti. I modelli linguistici di grandi dimensioni (LLM) possono contenere una grande quantità di informazioni e svolgere molte attività, ma eccellono solo se ricevono un addestramento specializzato. Il perfezionamento consente di addestrare un LLM, consentendoti di adattare un LLM preaddestrato per le tue esigenze specifiche.

In questo codelab, imparerai come eseguire l'ottimizzazione mediante l'approccio supervisionato per un modello LLM.

L'ottimizzazione supervisionata migliora le prestazioni di un modello insegnando una nuova abilità. 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 etichettato 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 del modello sono disponibili qui.

Cosa creerai

Caso d'uso: generare titoli per gli articoli

Supponiamo di voler generare automaticamente i titoli per gli articoli. Utilizzando Vertex AI, puoi ottimizzare un LLM che genera un titolo riassunto 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 di BigQuery bigquery-public-data.bbc_news.fulltext).
  • Ottimizza un LLM (text-bison@002) su un nuovo modello ottimizzato chiamato "bbc-news-summary-tuned" e confrontare il risultato con la risposta del modello di base. Un file JSONL di esempio è disponibile per questo codelab nel repository. Puoi caricare il file nel tuo bucket Cloud Storage ed eseguire i seguenti passaggi di ottimizzazione:
  • Prepara i dati: inizia con un set di dati di articoli e i titoli corrispondenti, come il set di dati BBC News utilizzato nel codice di esempio.
  • Ottimizza un modello preaddestrato:scegli un modello di base come "text-bison@002" e perfezionarlo con i dati degli articoli utilizzando l'SDK Vertex AI per Python.
  • Valuta i risultati:confronta le prestazioni del modello ottimizzato con il modello di base per osservare un miglioramento della qualità della generazione di titoli.
  • Esegui il deployment e utilizza il tuo modello: rendi disponibile il tuo modello ottimizzato tramite un endpoint API e inizia a generare automaticamente i titoli per i nuovi articoli.

2. Prima di iniziare

  1. Nella pagina del selettore dei progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
  2. Assicurati che la fatturazione sia abilitata per il tuo progetto Google Cloud. Scopri come controllare se la fatturazione è abilitata per un progetto.
  3. Apri il blocco note di Colab e accedi allo stesso account del tuo attuale account Google Cloud attivo.

3. Ottimizza un modello linguistico di grandi dimensioni (LLM)

Questo codelab utilizza l'SDK Vertex AI per Python per ottimizzare il modello. Puoi eseguire l'ottimizzazione utilizzando anche le altre opzioni: HTTP, comando CURL, SDK Java, Console.

Puoi ottimizzare e valutare il modello per ottenere risposte personalizzate in cinque 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 gli altri passaggi come mostrato nel file .ipynb nel repo. 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 caricavi il file di dati di addestramento TRAIN.jsonl di esempio. È stato eseguito il provisioning dei dati di esempio per questo caso d'uso al link sopra indicato.

json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)

Il risultato di questo passaggio dovrebbe essere:

17274866af36a47c.png

6. Passaggio 3: ottimizza un modello linguistico di grandi dimensioni (LLM)

A questo punto, puoi ottimizzare qualsiasi modello linguistico di grandi dimensioni (LLM) (in base alla disponibilità del supporto) . Tuttavia, in questo snippet ottimizzeremo il modello preaddestrato "text-bison@002" con il frame contenente i dati di addestramento che abbiamo caricato 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",
)

Questo passaggio richiederà alcune ore. Puoi monitorare l'avanzamento del perfezionamento utilizzando il link al job della pipeline nel risultato.

7. Passaggio 4: effettua previsioni 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:

67061c36b7ba39b7.png

Per fare previsioni con il modello di base (text-bison@002) per il confronto, esegui questi 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:

22ec58e4261405d6.png

Anche se entrambi i titoli generati sembrano appropriati, il primo (generato con il modello perfezionato) è più in sintonia con lo stile dei titoli utilizzato nel set di dati in questione.

Carica il modello ottimizzato

Potrebbe essere più semplice caricare un modello appena perfezionato. Ricorda, però, nel passaggio 3 che viene richiamato nell'ambito del codice stesso, quindi contiene ancora il modello ottimizzato nella variabile Tune_model. E se volessi richiamare un modello ottimizzato in passato?

Per farlo, puoi richiamare il metodo get_tuned_model() sull'LLM con l'URL ENDPOINT completo del modello ottimizzato di cui è stato eseguito il deployment da Vertex AI Model Registry. Tieni presente che, in questo caso, stai inserendo il PROJECT_NUMBER e il MODEL_NUMBER al posto dei 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 della valutazione della qualità e della pertinenza della risposta generata. Implica l'esame dell'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, a ottimizzare le prestazioni del modello e a garantire che il testo generato soddisfi gli standard desiderati in termini di qualità e utilità. Scopri di più nella documentazione. Per ora, vedremo come ottenere alcune metriche di valutazione sul modello ottimizzato e confrontarlo con il modello di base.

  1. 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)
  1. Definisci la specifica di valutazione per un'attività di riepilogo del testo sul modello ottimizzato.
task_spec = EvaluationTextSummarizationSpec(
 task_name = "summarization",
 ground_truth_data=df
)

Il completamento di questo passaggio richiederà alcuni minuti. Puoi monitorare l'avanzamento utilizzando il link al job della pipeline nel risultato. Al termine, dovresti vedere il seguente risultato della valutazione:

387843d6c970e02.png

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 riepilogo e un riassunto di riferimento. Viene calcolata dividendo la sottosequenza comune più lunga (LCS) tra i due riepiloghi e per la lunghezza del riepilogo 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 riferimento, noterai che il punteggio di riepilogo è relativamente più alto per il modello ottimizzato.

Puoi trovare i risultati della valutazione nella directory di output di Cloud Storage che hai specificato durante la creazione del job di valutazione. Il file è denominato evaluation_metrics.json. Per i modelli ottimizzati, puoi visualizzare i risultati della valutazione anche nella pagina Model Registry di Vertex AI nella console Google Cloud.

9. Considerazioni importanti

  • Supporto del modello: consulta sempre la documentazione del modello per verificare 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 meno recente. La buona notizia è che puoi applicare queste tecniche di ottimizzazione ai modelli più recenti quando la funzionalità sarà disponibile.
  • LoRA: LoRA è una tecnica per ottimizzare in modo efficiente gli LLM. Ciò avviene introducendo matrici di decomposizione addestrabili e con un basso ranking negli strati del modello preaddestrato esistente. Scopri di più qui. Invece di aggiornare tutti i parametri di un LLM di grandi dimensioni, LoRA apprende matrici più piccole che vengono aggiunte o moltiplicate con le matrici di peso del modello originale. Questo riduce significativamente il numero di parametri aggiuntivi introdotti durante l'ottimizzazione.

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:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.
  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
  4. In alternativa, puoi accedere al registro dei modelli, alla scheda Deployment e test del modello, quindi annulla il deployment dell'endpoint ed elimina il modello ottimizzato di cui è stato eseguito il deployment.

11. Complimenti

Complimenti Hai utilizzato correttamente Vertex AI per ottimizzare un modello LLM. L'ottimizzazione è una tecnica potente che consente di personalizzare gli LLM in base al dominio e alle attività. Con Vertex AI, hai a disposizione gli strumenti e le risorse di cui hai bisogno per ottimizzare i tuoi modelli in modo efficiente ed efficace.

Esplora i repository GitHub e sperimenta il codice campione per sperimentare in prima persona l'ottimizzazione e la valutazione. Pensa a come i modelli 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 tuoi modelli ottimizzati con facilità.