LoRa, QLoRA e QA-LoRA Adattabilità efficiente nei modelli di lingua larga attraverso la factorization di matrici a basso rango

LoRa, QLoRA e QA-LoRA Adattabilità efficiente nei modelli di lingua larga attraverso la factorization di matrici a basso rango

I grandi modelli di linguaggio (LLM) hanno conquistato una nicchia unica, offrendo capacità senza precedenti nella comprensione e nella generazione di testi simili a quelli umani. La potenza dei LLM può essere attribuita alla loro enorme grandezza, spesso con miliardi di parametri. Mentre questa enorme scala alimenta le loro prestazioni, allo stesso tempo genera sfide, specialmente quando si tratta di adattare il modello per task o domini specifici. I tradizionali metodi di gestione dei LLM, come il fine-tuning di tutti i parametri, comportano un costo computazionale e finanziario elevato, rappresentando quindi un ostacolo significativo alla loro adozione diffusa nelle applicazioni reali.

In un articolo precedente, abbiamo approfondito il fine-tuning dei grandi modelli di linguaggio (LLM) per adeguarli a requisiti specifici. Abbiamo esplorato varie metodologie di fine-tuning come il fine-tuning basato su istruzioni, il fine-tuning per singoli task e il fine-tuning efficiente dei parametri (PEFT), ognuno con il suo approccio unico all’ottimizzazione dei LLM per task distinti. Al centro della discussione c’era l’architettura del trasformatore, la spina dorsale dei LLM, e le sfide poste dalle esigenze computazionali e di memoria necessarie per gestire un numero vasto di parametri durante il fine-tuning.

Parametri in LLM

https://huggingface.co/blog/hf-bitsandbytes-integration

L’immagine sopra rappresenta la scala di vari grandi modelli di linguaggio, ordinati in base al numero dei loro parametri. In particolare: PaLM, BLOOM, ecc.

A partire da quest’anno, sono stati fatti progressi che hanno portato a modelli ancora più grandi. Tuttavia, sintonizzare modelli così giganteschi e open-source su sistemi standard è impossibile senza tecniche di ottimizzazione specializzate.

Entra in scena Low-Rank Adaptation (LoRA), introdotta da Microsoft in questo articolo, che punta a mitigare queste sfide e rendere i LLM più accessibili e adattabili.

Il fulcro di LoRA risiede nel suo approccio all’adattamento del modello senza entrare nei dettagli del re-training dell’intero modello. A differenza del fine-tuning tradizionale, dove ogni parametro è soggetto a cambiamenti, LoRA adotta una strada più intelligente. Blocca i pesi del modello pre-addestrato e introduce matrici di decomposizione del rango addestrabile in ogni livello dell’architettura del trasformatore. Questo approccio riduce drasticamente il numero di parametri addestrabili, garantendo un processo di adattamento più efficiente.

L’evoluzione delle strategie di tuning dell’LLM

Riflettendo sul percorso del tuning dell’LLM, si possono identificare diverse strategie utilizzate dagli esperti nel corso degli anni. Inizialmente, l’attenzione era focalizzata sul fine-tuning dei modelli pre-addestrati, una strategia che comporta una modifica completa dei parametri del modello per adattarlo al task specifico. Tuttavia, all’aumentare delle dimensioni e della complessità dei modelli, aumentavano anche le richieste computazionali di questo approccio.

La strategia successiva che ha preso piede è stata il fine-tuning di un sottoinsieme, una versione più restrittiva della precedente. Qui, solo un sottoinsieme dei parametri del modello viene sintonizzato, riducendo in parte il carico computazionale. Nonostante i suoi meriti, il fine-tuning di un sottoinsieme non riusciva ancora a tenere il passo con il tasso di crescita delle dimensioni degli LLM.

Mentre gli esperti esploravano vie più efficienti, il fine-tuning completo è emerso come un approccio rigoroso ma gratificante.

Introduzione a LoRA

Il rango di una matrice ci offre un’idea delle dimensioni create dalle sue colonne, ed è determinato dal numero di righe o colonne uniche.

  • Matrice a rango completo: Il suo rango coincide con il numero più basso tra il numero di righe e il numero di colonne.
  • Matrice a basso rango: Con un rango notevolmente inferiore sia alle righe che alle colonne, cattura meno caratteristiche.

Ora, i grandi modelli comprendono ampiamente il loro dominio, come il linguaggio nei modelli di linguaggio. Ma per adattarli a tasks specifici spesso è sufficiente evidenziare solo una piccola parte di queste conoscenze. Ed è qui che brilla LoRA. Suggerisce che la matrice che mostra queste aggiustamenti dei pesi può essere a basso rango, catturando quindi meno caratteristiche.

LoRA limita intelligentemente il rango di questa matrice di aggiornamento dividendola in due matrici di rango più piccolo. Invece di modificare l’intera matrice dei pesi, ne modifica solo una parte, rendendo il task di fine-tuning più efficiente.

Applicazione di LoRA ai trasformatori

LoRA aiuta a ridurre il carico di allenamento nelle reti neurali concentrandosi su specifiche matrici di peso. Nell’architettura del Transformer, alcune matrici di peso sono collegate al meccanismo di auto-attenzione, vale a dire Wq, Wk, Wv e Wo, oltre ad altre due nel modulo Multi-Layer Perceptron (MLP).

Architettura dei Transformers

Architettura dei Transformers

Teste di attenzione dei Transformers

Teste di attenzione dei Transformers

Spiegazione matematica di LoRA

Scomponiamo la matematica dietro LoRA:

  1. Matrice di peso pre-allenata W0:
    • Parte da una matrice di peso pre-allenata W0 di dimensioni d × k. Ciò significa che la matrice ha d righe e k colonne.
  2. Decomposizione a basso rango:
    • Invece di aggiornare direttamente l’intera matrice W0, che può essere computazionalmente costoso, il metodo propone un’approccio di decomposizione a basso rango.
    • L’aggiornamento ΔW a W0 può essere rappresentato come il prodotto di due matrici: B e A.
      • B ha dimensioni d × r
      • A ha dimensioni r × k
    • Il punto chiave qui è che il rango r è molto più piccolo sia di d che di k, il che consente una rappresentazione computazionalmente più efficiente.
  3. Allenamento:
    • Durante il processo di allenamento, W0 rimane invariato. Questo viene definito come “congelamento” dei pesi.
    • D’altra parte, A e B sono i parametri addestrabili. Ciò significa che, durante l’allenamento, vengono apportate modifiche alle matrici A e B per migliorare le prestazioni del modello.
  4. Moltiplicazione e Addizione:
    • Sia W0 che l’aggiornamento ΔW (che è il prodotto di B e A) vengono moltiplicati per lo stesso input (indicato come x).
    • Le uscite di queste moltiplicazioni vengono quindi sommate insieme.
    • Questo processo viene riassunto nell’equazione: h = W0x + ΔWx = W0x + BAx. Qui, h rappresenta l’output finale dopo l’applicazione degli aggiornamenti all’input x.

In breve, questo metodo consente un modo più efficiente per aggiornare una grande matrice di peso mediante la rappresentazione degli aggiornamenti mediante una decomposizione a basso rango, che può essere vantaggiosa in termini di efficienza computazionale e utilizzo della memoria.

Animazione di LORA

LORA

Inizializzazione e Scalatura:

Nell’allenamento dei modelli, il modo in cui inizializziamo i parametri può influire significativamente sull’efficienza ed efficacia del processo di apprendimento. Nel contesto dell’aggiornamento della matrice di peso tramite A e B:

  1. Inizializzazione delle matrici A e B:
    • Matrice A: Questa matrice viene inizializzata con valori casuali gaussiani, anche noti come distribuzione normale. La ragione alla base dell’utilizzo di una inizializzazione gaussiana è rompere la simmetria: diversi neuroni nello stesso strato impareranno diverse caratteristiche quando avranno pesi iniziali diversi.
    • Matrice B: Questa matrice viene inizializzata con zeri. Facendo ciò, l’aggiornamento ΔW = BA parte da zero all’inizio dell’allenamento. Ciò garantisce che non ci sia un cambiamento repentino nel comportamento del modello all’inizio, consentendo al modello di adattarsi gradualmente mentre B impara valori appropriati durante l’allenamento.
  2. Scalatura dell’output da ΔW:
    • Dopo il calcolo dell’aggiornamento ΔW, il suo output viene scalato da un fattore di rα dove α è una costante. Attraverso la scalatura, viene controllata la magnitudine degli aggiornamenti.
    • La scalatura è particolarmente importante quando il rango r cambia. Ad esempio, se si decide di aumentare il rango per ottenere maggiore accuratezza (a discapito della computazione), la scalatura garantisce che non sia necessario regolare molti altri iperparametri nel processo. Fornisce un livello di stabilità al modello.

Impatto Pratico di LoRA

LoRA ha dimostrato il suo potenziale nel sintonizzare LLM su stili artistici specifici in modo efficiente dalla community AI. Questo è stato dimostrato in modo significativo nell’adattamento di un modello per imitare lo stile artistico di Greg Rutkowski.

Come evidenziato nel documento con GPT-3 175B come esempio. Avere istanze individuali di modelli sintonizzati con 175B parametri ciascuno è piuttosto costoso. Ma, con LoRA, i parametri addestrabili diminuiscono di 10.000 volte e l’utilizzo della memoria GPU viene ridotto di un terzo.

Impatto di LoRa su GPT-3 Tuning

Impatto di LoRA su GPT-3 Fine Tuning

La metodologia LoRA non solo rappresenta un importante passo avanti verso la resa dei LLM più accessibili, ma sottolinea anche il potenziale di colmare il divario tra sviluppi teorici e applicazioni pratiche nel campo dell’IA. Riducendo gli ostacoli computazionali e favorire un processo di adattamento del modello più efficiente, LoRA è destinato a giocare un ruolo fondamentale nell’adozione più ampia e nell’implementazione dei LLM in scenari reali.

QLoRA (Quantizzato)

Mentre LoRA rappresenta una svolta nella riduzione delle esigenze di archiviazione, richiede ancora una GPU potente per caricare il modello per l’addestramento. Qui entra in gioco QLoRA, o LoRA Quantizzato, che unisce LoRA alla quantizzazione per un approccio più intelligente.

Quantizzazione

Quantizzazione

Normalmente, i parametri di peso vengono archiviati in un formato a 32 bit (FP32), il che significa che ogni elemento della matrice occupa 32 bit di spazio. Immagina se potessimo comprimere le stesse informazioni in soli 8 o addirittura 4 bit. Questa è l’idea principale di QLoRA. La quantizzazione si riferisce al processo di mappatura di valori continui infiniti in un insieme più piccolo di valori finiti discreti. Nel contesto dei LLM, si riferisce al processo di conversione dei pesi del modello da tipi di dati a precisione maggiorata a tipi di dati a precisione ridotta.

Quantizzazione in LLM

Quantizzazione in LLM

Ecco un’ulteriore semplificazione di QLoRA:

  1. Quantizzazione Iniziale: Innanzitutto, il Large Language Model (LLM) viene quantizzato a 4 bit, riducendo significativamente l’occupazione di memoria.
  2. Addestramento LoRA: Successivamente, viene eseguito l’addestramento LoRA, ma con la precisione standard a 32 bit (FP32).

Ora potresti chiederti, perché tornare a 32 bit per l’addestramento dopo aver ridotto a 4 bit? Beh, per addestrare efficacemente gli adattatori LoRA in FP32, i pesi del modello devono tornare a FP32. Questo passaggio avanti e indietro viene eseguito in modo intelligente, passo dopo passo, per evitare di sovraccaricare la memoria GPU.

LoRA trova la sua applicazione pratica nella libreria Parameter Efficient Fine-Tuning (PEFT) di Hugging Face, semplificandone l’utilizzo. Per coloro che desiderano utilizzare QLoRA, è accessibile attraverso una combinazione delle librerie bitsandbytes e PEFT. Inoltre, la libreria HuggingFace Transformer Reinforcement Learning (TRL) facilita l’addestramento supervisionato con un supporto integrato per LoRA. Insieme, queste tre librerie forniscono gli strumenti essenziali per l’affinamento di un modello pre-addestrato selezionato, consentendo la generazione di descrizioni di prodotti persuasive e coerenti quando sollecitate con istruzioni attributive specifiche.

Dopo l’affinamento con QLoRA, i pesi devono tornare a un formato ad alta precisione, il che può comportare una perdita di accuratezza e una mancanza di ottimizzazione per velocizzare il processo.

Una soluzione proposta consiste nel raggruppare la matrice di pesi in segmenti più piccoli e applicare la quantizzazione e l’adattamento a basso rango a ciascun gruppo singolarmente. Un nuovo metodo, chiamato QA-LoRA, cerca di unire i vantaggi della quantizzazione e dell’adattamento a basso rango mantenendo il processo efficiente e il modello efficace per i compiti desiderati.

Conclusion

In questo articolo abbiamo affrontato le sfide poste dalla loro enorme dimensione dei parametri. Abbiamo approfondito le pratiche tradizionali di fine-tuning e le relative richieste computazionali e finanziarie. Il punto cruciale di LoRA risiede nella sua capacità di modificare modelli pre-addestrati senza doverli ridare completamente, riducendo così i parametri addestrabili e rendendo il processo di adattamento più conveniente dal punto di vista economico.

Abbiamo anche affrontato brevemente Quantized LoRA (QLoRA), una combinazione di LoRA e Quantizzazione che riduce la memoria occupata dal modello pur mantenendo la precisione essenziale per l’addestramento. Con queste tecniche avanzate, i professionisti sono ora dotati di librerie robuste che facilitano l’adozione e l’implementazione più semplice degli LLM in una serie di scenari reali.

Matrix

Matrix

Queste strategie sono studiate per trovare un equilibrio tra rendere gli LLM adattabili a compiti specifici e assicurarsi che i processi di fine-tuning e di implementazione non richiedano un eccessivo utilizzo di risorse computazionali e di memoria.