Sfruttando qLoRA per il Fine-Tuning di Modelli Ottimizzati per Attività Senza Oblio Catastrofico Uno Studio di Caso con LLaMA2(-chat)

Using qLoRA for Fine-Tuning Catastrophic Forgetting-Free Optimized Models A Case Study with LLaMA2(-chat)

Scopri come infondere conoscenza nei modelli sintonizzati sullo scopo, mantenendo la loro natura specifica del compito

Foto di StableDiffusionXL su Amazon Web Services

Di cosa si tratta e perché è importante?

I modelli di linguaggio di grandi dimensioni (LLM) come Claude di Anthropic o LLaMA2 di Meta hanno dimostrato capacità impressionanti in una varietà di compiti di linguaggio naturale. Tuttavia, la loro conoscenza e le loro competenze specifiche del compito rimangono relativamente generiche – se si desidera eseguire compiti più specializzati e specifici del dominio che richiedono conoscenze esplicite, è necessario trovare modi per infondere nei modelli conoscenze e insegnare loro un comportamento specifico del compito. Le applicazioni alimentate da LLM devono funzionare correttamente nel loro dominio di destinazione, fornire risposte accurate invece di creare allucinazioni e garantire sicurezza, privacy e contenuti appropriati.

Queste sfide sono comunemente denominate le “tre H”: utilità, onestà e innocuità. Superare queste sfide si è rivelato particolarmente importante durante la progettazione di applicazioni alimentate da FM di qualità di livello aziendale. Ci sono diverse opzioni per trasmettere conoscenze di dominio nei modelli di base:

Illustrazione di Author
  • Conoscenza di origine: È possibile fornire conoscenza in modo dinamico attraverso l’ingegneria delle prompt e la generazione basata su esempi o contesto. Questa opzione si presenta in forme relativamente semplici come l’ingaggio a zero o a poche riprese. Tuttavia, esistono anche approcci più sofisticati di integrazione di fonti di conoscenza esterne in evoluzione. L’infusione di conoscenza attraverso la composizione dinamica della prompt e quindi la conoscenza di origine mediante l’acquisizione di informazioni da vari “strumenti” esterni (generazione con recupero migliorato, recupero di database, recupero di data lake, sistemi in tempo reale tramite API REST-ful, …) sta diventando sempre più popolare.
  • Conoscenza parametrica: È possibile aggiornare direttamente i parametri del modello tramite il fine-tuning. In questo modo, i pesi preaddestrati vengono regolati su un dataset più piccolo (rispetto al preaddestramento), specifico del dominio e quindi verso una base di conoscenza o un compito specifico del dominio.

Come spiega Heiko Hotz nel suo post sul blog, la scelta dell’approccio giusto (o una combinazione di entrambi) comporta dei compromessi. In questo blog, ci concentreremo sull’approccio parametrico e mostreremo come eseguire il fine-tuning del modello LLaMA2 utilizzando PEFT (fine-tuning dei parametri efficiente) su Amazon SageMaker.

Il nostro obiettivo è adattare LLaMA2 a un dominio specifico, acquisendo conoscenze recenti per superare il problema del “taglio della conoscenza” in cui i modelli non sono consapevoli delle informazioni recenti che non fanno parte dei loro dati di addestramento. A differenza del fine-tuning specifico del compito, questo è un compito molto più realizzabile per molti professionisti, poiché possono semplicemente utilizzare corpora di testo contenenti informazioni specifiche del dominio come dataset di addestramento anziché creare manualmente o raccogliere dataset specifici del compito come dataset di conversazione o istruzioni.

Dato che per molti casi d’uso rilevanti alimentati da LLM i modelli specifici del compito sono vantaggiosi, mostreremo anche che l’impostazione proposta può essere applicata allo stesso modo a modelli come LLaMA2-chat che hanno già subito un fine-tuning specifico del compito senza perdere la loro natura specifica del compito (ad esempio, seguire le istruzioni, comportamento conversazionale, …).

Attraverso questa workflow completa di infusione di conoscenza, forniamo una guida pratica per sintonizzare i modelli di base in base alle tue esigenze specifiche.

Modello

I modelli LLaMA2 sono stati rilasciati nel luglio 2023 insieme a una pubblicazione di ricerca. Nel documento, Touvron et al. affermano che LLaMA2 è “una collezione di modelli di linguaggio di grandi dimensioni (LLM) preaddestrati e sintonizzati sullo scopo, con un numero di parametri che varia da 7 miliardi a 70 miliardi. I nostri LLM sintonizzati sullo scopo, chiamati Llama 2-Chat, sono ottimizzati per casi di utilizzo del dialogo. I nostri modelli superano i modelli di chat open-source nella maggior parte dei benchmark che abbiamo testato e, sulla base delle nostre valutazioni umane per utilità e sicurezza, possono essere un sostituto adatto per i modelli closed-source”.

Come indicato, i modelli LLaMA2 sono disponibili in tre dimensioni: 7B, 13B e 70B. Sono disponibili come modelli di completamento puri ottimizzati per casi di utilizzo del dialogo. Preaddestrati con circa 2 trilioni di token, supportano lunghezze di contesto fino a 4096 token. Il fine-tuning per i casi di utilizzo del dialogo è stato effettuato con oltre 100.000 esempi e ulteriormente ottimizzato con oltre 1 milione di campioni di addestramento che rappresentano le preferenze umane.

All’interno di AWS i modelli LLaMA2 possono essere distribuiti facilmente con un solo clic tramite SageMaker JumpStart o ottenuti dal model hub di HuggingFace tramite AWSxHuggingFace LLM DLC.

Fine-tuning

Il fine-tuning sfrutta il transfer learning per iniettare efficientemente competenze specifiche in un modello base come LLaMA2. Il processo consiste nell’aggiornare i pesi del modello attraverso una continuazione del pre-training su dati specifici del dominio, mantenendo invariata l’architettura complessiva della rete. A differenza del pre-training completo, che richiede grandi quantità di dati e risorse di calcolo, il fine-tuning è altamente efficiente in termini di campioni e risorse di calcolo. Tecniche di fine-tuning efficienti in termini di parametri, come l’approccio (q)LoRA, consentono l’inserimento leggero di conoscenze specialistiche in un modello di linguaggio generale come LLaMA2 con un impatto minimo.

Parlando di fine-tuning, sono possibili due approcci differenti:

  1. Attraverso il fine-tuning dell’architettura del solo decoder di LLaMA2 su corpora specifici del dominio utilizzando l’approccio di language modeling causale auto-regressivo (CLM), è possibile inserire competenze specialistiche o linguaggio o vocabolario specifici (ad esempio, terminologia/linguaggio di ricerca medica) nel LLM, mantenendo al contempo le sue capacità linguistiche generali.
  2. D’altro canto, utilizzando corpora specifici di compiti, un modello può essere sottoposto a fine-tuning per un compito specifico, ad esempio per seguire istruzioni o per un comportamento conversazionale.

I modelli utilizzano un approccio di addestramento auto-supervisionato ottimizzato per una funzione di perdita specifica del language modeling (LM). I modelli basati solo sul decoder, come LLaMA2, sono legati a un approccio di language modeling causale (CLM) con un contesto unidirezionale. In parole semplici, ciò significa che vengono addestrati per predire il token successivo in modo auto-regressivo in base ai token precedenti come contesto semantico.

Come accennato in precedenza, le tecniche di fine-tuning efficienti in termini di parametri consentono l’inserimento leggero di conoscenze specialistiche in un LLM con un impatto minimo, poiché viene aggiornato solo un sottoinsieme dei parametri del modello. Approcci di adattamento a basso rango (LoRA) o adattamento a basso rango quantizzato (QLoRA) congelano i pesi del modello pre-addestrato e inseriscono matrici di decomposizione del rango addestrabili in ogni livello dell’architettura del Transformer, riducendo notevolmente il numero di parametri addestrabili per i compiti successivi. Se desideri approfondire LoRA, ti consiglio di dare un’occhiata al post del blog di Mariano Kamp.

Scenario

Il 26 luglio, AWS ha annunciato diverse funzionalità nel campo dell’IA generativa al summit AWS di NYC. Per condividere ulteriori dettagli, sono stati pubblicati diversi post di blog di annunci:

· Agenti per Amazon Bedrock

· Risoluzione entità AWS match

· Ruolo degli store di vettori nelle applicazioni di IA generativa

· Motore vettoriale per Amazon OpenSearch Serverless

· Blocco note AWS Glue Studio alimentato da Amazon CodeWhisperer

· Amazon EC2 P5

Tenendo conto della data di taglio delle conoscenze di LLaMA2, purtroppo questo modello nella sua forma pura non sarà in grado di fornire informazioni su questi annunci. Vogliamo cambiare questa situazione sfruttando il fine-tuning per inserire queste conoscenze nel Modello di Base (FM) ed elevare le sue conoscenze per renderlo in grado di farlo.

Dal momento che non miriamo a sottoporre il modello a un fine-tuning per un compito specifico, ma semplicemente vogliamo assimilare conoscenze specifiche del dominio, possiamo optare per un approccio basato su CLM classico (Opzione 1 nella sezione precedente). Philipp Schmid descrive nel suo blog molto esaustivo come eseguire il fine-tuning dei modelli LLaMA2 con QLoRA, concentrandosi tuttavia sul fine-tuning specifico del compito delle istruzioni. Prenderemo i suoi esempi di codice condivisi nel post del blog come punto di partenza e adatteremo il codice di conseguenza.

Per essere responsabili nei confronti del consumo di risorse, condurremo il fine-tuning per i modelli LLaMA2–13b e LLaMA2–13b-chat. Il fine-tuning delle versioni 7b e 70b funzionerà di conseguenza con una configurazione del cluster di addestramento adeguata (vedi nel blog di Philipp). Dopo il fine-tuning stesso, distribuiremo i modelli di base insieme ai modelli sottoposti a fine-tuning e faremo un confronto delle prestazioni a livello generale.

In seguito, faremo una panoramica passo passo dei singoli passaggi del fine-tuning dei modelli. Se desideri accedere al repository completo del codice, puoi trovarlo qui.

Caricamento dati

Per il caricamento dei dati utilizziamo WebBaseLoader di LangChain per caricare un array di siti web identificati tramite il loro URL.

Accordo di licenza e accesso a HuggingFace

Accettazione dell'accordo di licenza per i modelli LLaMA2

Prima di poter iniziare con la preparazione dei dati e l’addestramento, è necessario accettare l’accordo di licenza dei modelli LLaMA2. Ciò include la registrazione sul sito Meta con l’indirizzo email corrispondente al tuo account HuggingFace.

Successivamente, effettuiamo l’autenticazione con l’HuggingFace hub dal nostro runtime.

Preparazione dei dati

Prima di tutto, effettuiamo una pre-elaborazione sui siti web grezzi. In un caso d’uso reale potrebbe essere data maggiore importanza a questa fase. Per scopi dimostrativi, ci limitiamo a eliminare tutte le concatenazioni di spazi più ampie in modo da ottenere un corpus di testo coerente e fluido. Successivamente, carichiamo l’elenco dei documenti in un Dataset di HuggingFace.

Nel passaggio successivo, tokenizziamo il nostro corpus di testo per renderlo digeribile per il LLM. A tal fine, utilizziamo il tokenizzatore LLaMA2 caricato dall’HuggingFace hub. Dopo essere stati raggruppati in batch in base alla finestra di contesto del modello (2048 token), il tokenizzatore caricato può essere utilizzato per la tokenizzazione dei batch creati.

Poi salviamo il dataset su S3 per l’utilizzo all’interno di un job di addestramento.

Addestramento

Ora possiamo avviare un job di addestramento Amazon SageMaker per eseguire uno script di fine-tuning QLoRA legato a CLM basato sui dati pre-elaborati.

Gli iperparametri e lo script di addestramento sono adattati dal blogpost di Philipp. L’unica eccezione è il numero di epoche di addestramento eseguite, dove con 20 scegliamo un numero relativamente alto di epoche. Ciò è dovuto al fatto che il nostro dataset di addestramento è piuttosto piccolo (~32k token). Nei casi d’uso reali si consiglia il fine-tuning con dataset più grandi. Lo script di addestramento stesso può essere trovato qui.

Si prega anche di notare: poiché l’accordo di licenza del modello accettato è legato al tuo account HuggingFace, è necessario specificare un token di accesso HuggingFace.

La configurazione del job di addestramento, ad esempio la configurazione del cluster di addestramento, è anch’essa adattata dal blogpost di Philipp.

Possiamo quindi eseguire il job di addestramento, che eseguirà il fine-tuning e salverà i nostri artefatti di modello su S3.

Deployment

I due modelli base LLaMA2-13b e LLaMA2-13b-chat possono essere comodamente distribuiti tramite SageMaker JumpStart. Questo blogpost fornisce istruzioni dettagliate in merito.

I due modelli fine-tuned possono essere distribuiti utilizzando il DLC LLM di AWSxHuggingFace. A tal scopo, indirizziamo il parametro model_data della classe HuggingFaceModel al percorso s3 degli artefatti del modello. Quindi possiamo indirizzare la variabile d’ambiente HF_MODEL_ID impostata nel contenitore di hosting al percorso predefinito del modello all’interno di un DLC (“/opt/ml/model”).

Testing

Dopo aver distribuito tutti e quattro i modelli, vogliamo testarne le prestazioni su una domanda di esempio. Il blogpost di annunci su Amazon EC2 P5 instances afferma: “Le istanze P5 forniscono 8 x NVIDIA H100 Tensor Core GPUs con 640 GB di memoria GPU ad alta larghezza di banda, processori AMD EPYC di terza generazione, 2 TB di memoria di sistema e 30 TB di storage NVMe locale. Le istanze P5 forniscono anche 3200 Gbps di larghezza di banda di rete aggregata con supporto per GPUDirect RDMA, consentendo una latenza ridotta e prestazioni di scale-out efficienti bypassando la CPU nella comunicazione internode”.

Formuliamo la seguente domanda: “Cosa sono le istanze Amazon EC2 P5? Con quali tipi di GPU sono equipaggiate?” I modelli chat rispondono come segue con una configurazione di inferenza di max_new_tokens = 200, top_p = 0.9, temperature = 0.01:

  • LLaMA2-13b-chat: “Le istanze Amazon Elastic Compute Cloud (EC2) P5 sono un tipo di istanza che fornisce risorse di calcolo ad alte prestazioni per applicazioni che richiedono una potenza di calcolo intensa. Queste istanze sono equipaggiate con GPU NVIDIA Tesla V100, progettate per l’apprendimento automatico, le simulazioni scientifiche e altre carichi di lavoro di calcolo ad alte prestazioni.\n\nLe GPU NVIDIA Tesla V100 nelle istanze P5 sono basate sull’architettura Volta e offrono numerose funzionalità che le rendono adatte a carichi di lavoro impegnativi, tra cui:\n\n* 5120 core CUDA per il calcolo ad alte prestazioni\n* 640 core tensoriali per l’accelerazione dell’apprendimento profondo e altri carichi di lavoro basati su matrici\n* 16 GB di memoria GDDR6 per il trasferimento e l’elaborazione rapida dei dati\n* Supporto per le librerie e i framework accelerati da GPU di NVIDIA, come CU…”
  • LLaMA2-13b-chat-nyc-finetuned: “Le istanze Amazon EC2 P5 sono istanze a uso generale che offrono prestazioni estreme per applicazioni che richiedono un intenso processamento grafico e modelli di apprendimento automatico complessi (ML). Sono alimentate da GPU NVIDIA H100 Tensor Core e processori AMD EPYC di terza generazione. Le GPU H100 forniscono 640 GB di memoria GPU ad alta larghezza di banda, consentendoti di eseguire le tue applicazioni più esigenti con dataset massicci in tempo reale. Le istanze P5 forniscono anche 2000 GB di memoria CPU ad alta velocità, consentendoti di elaborare grandi quantità di dati in memoria senza dover accedere all’archiviazione su disco. Ciò riduce il tempo di elaborazione e migliora il tempo di risposta. Puoi utilizzare queste istanze per applicazioni come computer vision, codifica video, analisi genetica e addestramento di modelli di linguaggio.”

Possiamo chiaramente vedere che mentre il modello di base fa delle allucinazioni sul tipo di GPU (V100), il modello fine-tuned ci fornisce la risposta corretta (H100). Vediamo anche che attraverso qLoRA possiamo preservare la natura chat-fine-tuned del modello di base e mitigare così il fenomeno del dimenticamento catastrofico. Ciò significa che possiamo infondere conoscenza in un LLM senza dover fare un fine-tuning completo di istruzioni/chat successivamente utilizzando un modello di base rispettivamente task-fine-tuned. Il motivo per cui ciò funziona è la natura di LoRA in cui ampie parti di ogni layer della rete neurale rimangono intatte mentre i layer vengono estesi.

Per la versione di completamento puro dei modelli dobbiamo riformulare la domanda poiché questi modelli non sono in grado di capire le istruzioni o comportarsi in modo conversazionale. Invece completano semplicemente sequenze di token attraverso la previsione del prossimo token auto-regressivo.

Formuliamo la seguente domanda: “Le istanze Amazon EC2 P5 sono dotate di GPU del tipo”. I modelli di completamento rispondono come segue con una configurazione di inferenza di max_new_tokens = 200, top_p = 0.9, temperature = 0.01:

  • LLaMA2–13b: “NVIDIA Tesla V100.\nLa NVIDIA Tesla V100 è una GPU progettata per il calcolo ad alte prestazioni. Si basa sull’architettura NVIDIA Volta ed è dotata di 32GB di memoria HBM2. La V100 è in grado di fornire fino a 100 teraflop di prestazioni ed è progettata per l’uso in data center e supercomputer.\nLa NVIDIA Tesla V100 è una potente GPU progettata per il calcolo ad alte prestazioni. Si basa sull’architettura NVIDIA Volta ed è dotata di 32GB di memoria HBM2. La V100 è in grado di fornire fino a 100 teraflop di prestazioni ed è progettata per l’uso in data center e supercomputer.\nLa NVIDIA Tesla V1…”
  • LLaMA2–13b-nyc-finetuned: “NVIDIA A100 per carichi di lavoro intensivi di calcolo, come l’IA generativa, il calcolo ad alte prestazioni (HPC) e l’analisi dei dati. Le istanze P5 sono ideali per l’addestramento e l’esecuzione dell’inferezza in modelli con trilioni di parametri e per l’esecuzione di analisi di dati su vasti set di dati. Forniscono 8 volte la memoria GPU e 64 volte le prestazioni di calcolo nelle operazioni in virgola mobile (FLOPs) rispetto alle istanze P4.\nPuoi utilizzare le istanze P5 in Amazon Elastic Container Service (ECS) con gli strumenti e i framework di container più comuni, come Docker, PyTorch, TensorFlow, Jupyter Notebook, R Studio e Venv, oppure puoi utilizzare le istanze P5 tramite Amazon Elastic MapReduce (EMR) o Amazon DeepSense con framework e strumenti di ML e AI forniti da Amazon o da altre aziende. Per rendere più semplice la creazione di applicazioni IA generative su istanze P5,…”

Anche se il fine-tuning del modello chat-fine-tuned con questa piccola quantità di dati ha portato all’eliminazione delle allucinazioni del modello con il modello di base LLaMA2, questo sembra non funzionare nel nostro setup. Ciò potrebbe essere dovuto alla dimensione limitata del nostro dataset di fine-tuning. Inoltre, una progettazione più sofisticata delle prompt e l’ottimizzazione della configurazione dei parametri di inferenza potrebbero essere utili.

Conclusioni

In conclusione, questo post del blog approfondisce il processo critico di infondere conoscenze specifiche del dominio nei grandi modelli di linguaggio (LLM) come LLaMA2, evidenziando l’importanza di affrontare sfide legate all’utilità, all’onestà e all’innocuità quando si progettano applicazioni alimentate da LLM di qualità aziendale. Il focus principale qui è sull’approccio parametrico al fine-tuning, che inietta efficientemente competenze di nicchia nei modelli di base senza compromettere le loro capacità linguistiche generali.

L’articolo sottolinea i passaggi coinvolti nel fine-tuning di LLaMA2 utilizzando tecniche di fine-tuning efficienti in termini di parametri, come l’approccio qLoRA, e come questo processo possa essere condotto su Amazon SageMaker. Adottando questo approccio, i professionisti possono adattare LLaMA2 a domini specifici, garantendo che i modelli rimangano aggiornati con le conoscenze recenti anche al di là dei dati di addestramento originali.

L’articolo sottolinea anche la versatilità di questo approccio, mostrando che può essere applicato a modelli come LLaMA2-chat, che hanno già subito un fine-tuning specifico per il compito. Ciò apre opportunità per infondere conoscenza nei LLM senza la necessità di un esteso fine-tuning basato su istruzioni o chat, preservando la loro natura specifica per il compito.