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

Ottimizzazione dei modelli linguistici di grandi dimensioni:
come Vertex AI porta i modelli LLM a un livello superiore

Informazioni su questo codelab

subjectUltimo aggiornamento: mag 2, 2024
account_circleScritto da: Author: Abirami Sukumaran, Editor: Muthu Ganesh

1. Introduzione

Perché la messa a punto è importante

I modelli di base vengono addestrati per uso generico e a volte non eseguono le attività come vorresti. Ciò potrebbe essere dovuto al fatto che le attività che vuoi che il modello esegua sono attività specializzate che è difficile insegnare a un modello utilizzando solo il design 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 avere una vasta quantità di informazioni ed eseguire molte attività, ma eccellono solo quando viene fornito 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 l'ottimizzazione fine 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 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 dei modelli sono disponibili qui.

Cosa creerai

Caso d'uso: generazione di titoli per articoli di notizie

Supponiamo che tu voglia generare automaticamente i titoli degli articoli di notizie. Con Vertex AI, puoi ottimizzare un modello LLM che genera un titolo riepilogativo adatto in uno stile specifico e lo personalizza in base alle linee guida del canale di notizie.

In questo codelab, dovrai:

  • Utilizza BBC FULLTEXT DATA (resi disponibili dal set di dati pubblico BigQuery bigquery-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. 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 perfezionamento:
  • Prepara i dati:inizia con un set di dati di articoli di notizie e i relativi titoli corrispondenti, 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 dati delle notizie utilizzando l'SDK Vertex AI per Python.
  • Valuta i risultati:confronta le prestazioni del modello ottimizzato con quelle del modello di base per vedere 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 dei nuovi articoli.

2. Prima di iniziare

  1. Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
  2. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verificare se la fatturazione è abilitata in un progetto.
  3. Apri Colab Notebook e accedi allo stesso account del tuo attuale account Google Cloud attivo.

3. Ottimizzare un modello linguistico di grandi dimensioni

Questo codelab utilizza l'SDK Vertex AI per Python per perfezionare il modello. Puoi eseguire la messa a punto anche utilizzando le altre opzioni: HTTP, comando CURL, SDK Java, console.

Puoi ottimizzare e valutare il modello per le 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 il resto dei 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 carica il file di dati di addestramento di esempio TRAIN.jsonl. Il provisioning dei dati di esempio per questo caso d'uso è stato eseguito nel link sopra indicato.

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

Questo passaggio dovrebbe produrre il seguente risultato:

17274866af36a47c.png

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à dell'assistenza) . In questo snippet, però, stiamo ottimizzando il modello preaddestrato "text-bison@002" con il dataframe 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 dell'ottimizzazione utilizzando il link al job della pipeline nel risultato.

7. Passaggio 4: fai una previsione con il nuovo modello ottimizzato

Al termine del job di ottimizzazione, potrai fare previsioni con il nuovo modello. Per fare una previsione 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 una previsione con il modello di base (text-bison@002) per il 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:

22ec58e4261405d6.png

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

Carica il modello ottimizzato

Potrebbe essere più semplice caricare un modello appena ottimizzato. Tuttavia, ricorda 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 ENDPOINT completo del modello ottimizzato di cui è stato eseguito il deployment dal registro dei modelli di Vertex AI. Tieni presente che in questo caso inserisci 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 valutare 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, 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 il momento, vedremo come ottenere alcune metriche di valutazione sul modello ottimizzato e confrontarlo con il modello di base.

  1. Carica il set di dati di VALUTAZIONE:
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 sintesi del testo sul modello ottimizzato.
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:

387843d6c970e02.png

La metrica rougeLSum nel risultato della valutazione specifica il punteggio ROUGE-L per il riassunto. ROUGE-L è una metrica basata sul richiamo che misura la sovrapposizione tra un riassunto e un riassunto di riferimento. Viene calcolato prendendo la sottosezione comune più lunga (LCS) tra i due riepiloghi e dividendola 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 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 dei modelli: controlla sempre la documentazione del modello per verificare la compatibilità più recente.
  • Sviluppo rapido:il campo degli LLM progredisce rapidamente. Un modello più recente e potente potrebbe potenzialmente superare un modello ottimizzato creato su una base precedente. La buona notizia è che puoi applicare queste tecniche di perfezionamento ai modelli più recenti quando la funzionalità diventa disponibile.
  • LoRA: LoRA è una tecnica per ottimizzare in modo efficiente gli LLM. A tal fine, introduce matrici di decomposizione ad addestramento e a rango ridotto 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 per le matrici dei pesi del modello originale. In questo modo, il numero di parametri aggiuntivi introdotti durante la messa a punto 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:

  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 andare a Model Registry, andare 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 Vertex AI per ottimizzare un modello LLM. L'ottimizzazione fine è una tecnica efficace che ti consente di personalizzare gli LLM in base al tuo dominio e alle tue attività. Con Vertex AI hai a disposizione gli strumenti e le risorse necessari per ottimizzare i tuoi modelli in modo efficiente ed efficace.

Esplora i repository GitHub e fai esperimenti con il codice di esempio per provare la ottimizzazione e la valutazione in prima persona. Valuta in che modo gli LLM ottimizzati possono soddisfare le tue esigenze specifiche, dalla generazione di testi di marketing mirati al riassunto 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 facilmente il deployment dei tuoi modelli ottimizzati.