Intelligenza artificiale
LoRa, QLoRA e QA-LoRA: efficienti capacità di adattamento nei grandi modelli linguistici attraverso la fattorizzazione di matrici a basso rango

I grandi modelli linguistici (LLM) hanno creato una nicchia unica, offrendo capacità senza precedenti nella comprensione e nella generazione di testi simili a quelli umani. La potenza dei LLM può essere ricondotta alle loro enormi dimensioni, che spesso raggiungono miliardi di parametri. Mentre questa enorme scala alimenta le loro prestazioni, genera anche sfide, soprattutto quando si tratta di adattare il modello per compiti o domini specifici. I percorsi convenzionali di gestione dei LLM, come ad esempio il fine-tuning di tutti i parametri, presentano un onere computazionale e finanziario pesante, ponendo così un ostacolo significativo alla loro adozione generalizzata in applicazioni del mondo reale.
In un articolo precedente, ci siamo addentrati nel fine-tuning dei grandi modelli linguistici (LLM) per adattarli a requisiti specifici. Abbiamo esplorato varie metodologie di fine-tuning, come ad esempio il fine-tuning basato su istruzioni, il fine-tuning per un singolo compito e il fine-tuning efficiente dei parametri (PEFT), ognuna con il proprio approccio unico per ottimizzare i LLM per compiti distinti. Al centro della discussione c’era l’architettura del transformer, la colonna portante dei LLM, e le sfide poste dalle esigenze computazionali e di memoria della gestione di un vasto numero di parametri durante il fine-tuning.
L’immagine sopra rappresenta la scala di vari grandi modelli linguistici, ordinati per numero di parametri. Notiamo in particolare: PaLM, BLOOM, ecc.
A partire da quest’anno, ci sono stati progressi che hanno portato a modelli ancora più grandi. Tuttavia, sintonizzare tali giganteschi modelli open-source su sistemi standard è impraticabile senza tecniche di ottimizzazione specializzate.
Entra in scena l’adattamento a basso rango (LoRA), introdotto da Microsoft in questo documento, con l’obiettivo di mitigare queste sfide e rendere i LLM più accessibili e adattabili.
Il nucleo centrale di LoRA risiede nel suo approccio verso l’adattamento del modello senza addentrarsi nelle intricacies della ri-formazione dell’intero modello. A differenza del fine-tuning tradizionale, in cui ogni parametro è soggetto a modifiche, LoRA adotta una strada più intelligente. Congela i pesi del modello pre-addestrato e introduce matrici di decomposizione di rango trainable in ogni livello dell’architettura Transformer. Questo approccio riduce drasticamente il numero di parametri trainable, garantendo un processo di adattamento più efficiente.
L’evoluzione delle strategie di tuning dei LLM
Riflettendo sul percorso del tuning dei LLM, è possibile identificare diverse strategie impiegate dai pratici nel corso degli anni. Inizialmente, l’attenzione era focalizzata sul fine-tuning dei modelli pre-addestrati, una strategia che prevede una modifica globale dei parametri del modello per adattarlo al compito specifico in questione. Tuttavia, man mano che i modelli crescevano in dimensioni e complessità, aumentavano anche le esigenze computazionali di questo approccio.
La prossima strategia che ha guadagnato popolarità è stata il fine-tuning del subset, una versione più limitata del suo predecessore. Qui, solo un subset dei parametri del modello è sottoposto a fine-tuning, riducendo il carico computazionale in una certa misura. Nonostante i suoi meriti, il fine-tuning del subset non è stato in grado di stare al passo con il tasso di crescita delle dimensioni dei LLM.
Mentre i pratici si sono avventurati a esplorare vie più efficienti, il fine-tuning completo è emerso come un approccio rigoroso ma gratificante.
Introduzione a LoRA
Il rango di una matrice ci dà uno sguardo nelle dimensioni create dalle sue colonne, determinato dal numero di righe o colonne univoche che ha.
- Matrice a pieno rango: il suo rango corrisponde al numero minore tra le sue righe o colonne.
- Matrice a basso rango: con un rango notevolmente inferiore sia al numero di righe che di colonne, cattura meno caratteristiche.
Ora, i grandi modelli comprendono una vasta comprensione del loro dominio, come il linguaggio nei modelli linguistici. Tuttavia, il fine-tuning per compiti specifici spesso richiede solo l’evidenziazione di una piccola parte di queste comprensioni. Ecco dove LoRA brilla. Suggerisce che la matrice che mostra questi aggiustamenti dei pesi può essere una matrice a basso rango, catturando così meno caratteristiche.
LoRA limita intelligentemente il rango di questa matrice di aggiornamento dividendo la matrice in due matrici di rango più piccolo. Quindi, invece di modificare l’intera matrice di pesi, modifica solo una parte di essa, rendendo il compito di fine-tuning più efficiente.
Applicazione di LoRA ai Transformer
LoRA aiuta a ridurre il carico di addestramento nelle reti neurali concentrandosi su specifiche matrici di pesi. Sotto l’architettura Transformer, alcune matrici di pesi sono collegate al meccanismo di auto-attenzione, vale a dire Wq, Wk, Wv e Wo, oltre a due altre nel modulo Multi-Layer Perceptron (MLP).
Spiegazione matematica dietro LoRA
Vediamo di scomporre la matematica dietro LoRA:
- Matrice di pesi pre-addestrata W0:
- Parte con una matrice di pesi pre-addestrata W0 di dimensioni d×k. Ciò significa che la matrice ha d righe e k colonne.
- Decomposizione a basso rango:
- Al posto 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 di entrambi d e k, il che consente una rappresentazione più computazionalmente efficiente.
- Addestramento:
- Durante il processo di addestramento, W0 rimane invariato. Ciò è indicato come “congelamento” dei pesi.
- D’altra parte, A e B sono i parametri trainable. Ciò significa che, durante l’addestramento, vengono apportate modifiche alle matrici A e B per migliorare le prestazioni del modello.
- Moltiplicazione e addizione:
- Entrambe W0 e l’aggiornamento ΔW (che è il prodotto di B e A) vengono moltiplicati per lo stesso input (indicato come x).
- I risultati di queste moltiplicazioni vengono poi aggiunti insieme.
- Questo processo è riassunto nell’equazione: h=W0x+ΔWx=W0x+BAx. Qui, h rappresenta l’output finale dopo aver applicato gli aggiornamenti all’input x.
In sintesi, questo metodo consente un modo più efficiente per aggiornare una grande matrice di pesi rappresentando gli aggiornamenti utilizzando una decomposizione a basso rango, il che può essere benefico in termini di efficienza computazionale e utilizzo della memoria.
Inizializzazione e scalatura:
Quando si addestrano modelli, il modo in cui si inizializzano i parametri può influenzare notevolmente l’efficienza e l’efficacia del processo di apprendimento. Nel contesto del nostro aggiornamento della matrice di pesi utilizzando A e B:
- Inizializzazione delle matrici A e B:
- Matrice A: questa matrice viene inizializzata con valori Gaussiani casuali, noti anche come distribuzione normale. La ragione alla base dell’utilizzo dell’inizializzazione Gaussiana è quella di rompere la simmetria: diversi neuroni nello stesso livello impareranno diverse caratteristiche quando hanno pesi iniziali diversi.
- Matrice B: questa matrice viene inizializzata con zeri. Facendo ciò, l’aggiornamento ΔW=BA inizia come zero all’inizio dell’addestramento. Ciò garantisce che non ci sia un cambiamento improvviso nel comportamento del modello all’inizio, permettendo al modello di adattarsi gradualmente mentre B impara valori appropriati durante l’addestramento.
- Scalatura dell’output da ΔW:
- Dopo aver calcolato l’aggiornamento ΔW, il suo output viene scalato da un fattore di rα dove α è una costante. Scalando, la magnitudine degli aggiornamenti viene controllata.
- La scalatura è particolarmente cruciale quando il rango r cambia. Ad esempio, se si decide di aumentare il rango per una maggiore precisione (a scapito della computazione), la scalatura assicura che non sia necessario aggiustare molti altri iperparametri nel processo. Fornisce un livello di stabilità al modello.
Impatto pratico di LoRA
LoRA ha dimostrato il suo potenziale per sintonizzare i LLM su stili artistici specifici in modo efficiente da parte della comunità AI. Ciò è stato notevolmente dimostrato 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. Tuttavia, con LoRA, i parametri trainable diminuiscono di 10.000 volte e l’utilizzo della memoria GPU viene ridotto a un terzo.
La metodologia LoRA non solo rappresenta un passo significativo verso il rendere i LLM più accessibili, ma sottolinea anche il potenziale per colmare il divario tra progressi teorici e applicazioni pratiche nel dominio dell’IA. Riducendo gli ostacoli computazionali e facilitando un processo di adattamento del modello più efficiente, LoRA è pronta a svolgere un ruolo cruciale nell’adozione e nella distribuzione più ampia dei LLM in scenari del mondo reale.
QLoRA (Quantizzato)
Mentre LoRA è un gioco-chiave nel ridurre le esigenze di archiviazione, richiede ancora una potente GPU per caricare il modello per l’addestramento. Ecco dove entra in scena QLoRA, o Quantized LoRA, che combina LoRA con la quantizzazione per un approccio più intelligente.
Normalmente, i parametri di peso vengono archiviati in formato a 32 bit (FP32), il che significa che ogni elemento nella matrice occupa 32 bit di spazio. Immaginate se potessimo comprimere le stesse informazioni in soli 8 o addirittura 4 bit. Questo è il concetto fondamentale dietro QLoRA. La quantizzazione si riferisce al processo di mappatura di valori continui e infiniti in un insieme più piccolo di valori finiti e discreti. Nel contesto dei LLM, si riferisce al processo di conversione dei pesi del modello da tipi di dati a precisione più alta a tipi di dati a precisione più bassa.
Ecco una spiegazione più semplice di QLoRA:
- Quantizzazione iniziale: in primo luogo, il Large Language Model (LLM) viene quantizzato a 4 bit, riducendo notevolmente l’impronta di memoria.
- Addestramento LoRA: quindi, viene eseguito l’addestramento LoRA, ma con la precisione standard a 32 bit (FP32).
Ora, potreste chiedervi, perché tornare a 32 bit per l’addestramento dopo aver ridotto a 4 bit? Bene, per addestrare efficacemente gli adattatori LoRA in FP32, i pesi del modello devono tornare a FP32 anche loro. Questo passaggio avanti e indietro viene eseguito in modo intelligente e graduale per evitare di sovraccaricare la memoria della 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 Transformer Reinforcement Learning (TRL) di HuggingFace facilita il fine-tuning supervisionato con supporto integrato per LoRA. Insieme, queste tre librerie forniscono gli strumenti essenziali per il fine-tuning di un modello pre-addestrato selezionato, consentendo la generazione di descrizioni di prodotti persuasive e coerenti quando si forniscono istruzioni di attributo specifiche.
Dopo il fine-tuning da QLoRA, i pesi devono tornare al formato ad alta precisione, il che può portare a una perdita di precisione e mancanza di ottimizzazione per accelerare il processo.
Una soluzione proposta è quella di raggruppare la matrice di pesi in segmenti più piccoli e applicare la quantizzazione e l’adattamento a basso rango a ciascun gruppo individualmente. Un nuovo metodo, chiamato QA-LoRA, tenta di combinare i vantaggi della quantizzazione e dell’adattamento a basso rango, mantenendo il processo efficiente e il modello efficace per i compiti desiderati.
Conclusione
In questo articolo abbiamo toccato le sfide poste dalle loro enormi dimensioni dei parametri. Ci siamo addentrati nelle pratiche di fine-tuning tradizionali e nei relativi oneri computazionali e finanziari. Il nucleo centrale di LoRA risiede nella sua capacità di modificare modelli pre-addestrati senza ri-addestrarli interamente, riducendo così i parametri trainable e rendendo il processo di adattamento più efficiente in termini di costo.
Abbiamo anche esaminato brevemente QLoRA (Quantized LoRA), una combinazione di LoRA e quantizzazione che riduce l’impronta di memoria del modello mantenendo la precisione essenziale per l’addestramento. Con queste tecniche avanzate, i pratici sono ora dotati di librerie robuste, facilitando l’adozione e la distribuzione più semplice dei LLM in una serie di scenari del mondo reale.
Queste strategie sono state progettate per bilanciare la resa dei LLM adattabili per compiti specifici e garantire che i processi di fine-tuning e distribuzione non siano eccessivamente onerosi in termini di risorse computazionali e di archiviazione.




















