Muhammad Fawi
Code doi:
Forschungsvordruck doi:
Dieses Repo enthält den Code für das Curlora-Forschungspapier, einen neuartigen Ansatz zur Feinabstimmung von großsprachigen Modellen (LLMs), die die CUR-Matrix-Zerlegung im Zusammenhang mit der Anpassung mit niedriger Rang (LORA) nutzt. Unsere Methode befasst sich mit zwei kritischen Herausforderungen bei der Feinabstimmung von LLM: mildernes katastrophales Vergessen während des kontinuierlichen Lernens und Reduzierung der Anzahl der trainierbaren Parameter. Wir schlagen eine einzigartige Modifikation zum CUR -Zerlegungsprozess vor, um eine effizientere und stabilere Möglichkeit zu ermöglichen, LLMs an neue Aufgaben anzupassen, ohne vorhandenes Wissen zu beeinträchtigen. Wir demonstrieren durch Experimente an mehreren Datensätzen, dass Curlora die Standard -Lora beim mildernden katastrophalen Vergessen übertrifft. Es hält die Modellstabilität und -leistung über die Aufgaben hinweg und reduziert gleichzeitig die Anzahl der trainierbaren Parameter erheblich. Unsere Ergebnisse zeigen, dass Curlora im Vergleich zu LORA überlegene Genauigkeits- und Verwirrungswerte erzielt, insbesondere in Szenarien mit begrenzten Daten.
CURLoRA.pdf : Das Forschungspapier, das den Curlora -Ansatz beschreibt.code/ : Verzeichnis mit der Implementierung von Curlora und den Experimenten.code/curlora.py : Enthaltende Curlora -Klassen.code/utils.py : Helferfunktionen.code/lora.py : Lora -Klassen.code/curlora_experiment.ipynb : Curlora-Experiment mit Mistral 7B (Feinabstimmung auf MRPC, SST-2 und Sentiment140).code/curlora_experiment-gpt.ipynb : Curlora-Experiment mit GPT2-Large (Feinabstimmung auf MRPC, SST-2 und Sentiment140).code/squad_gpt-curlora.ipynb : Feinabstimmungsgpt2-large für Q & A mit Curlora und SftTrainer im Squad-Datensatz. Zuerst installieren wir die Anforderungen
pip3 install -r code/requirements.txtAlle Curlora -Helferfunktionen und Klassen sind in Code/Curlora.py und Code/utils.py definiert.
Laden Sie das Modell und wenden Sie Curlora an
from transformers import AutoTokenizer , AutoModelForCausalLM
from utils import *
model_name = "gpt2-large"
model = AutoModelForCausalLM . from_pretrained ( model_name )
model . to ( "cuda" ) # this will make all existing layers in CUDA
# turning off grad for all layers
for param in model . parameters ():
param . requires_grad = False
# replace original Q,K,V layers with CURLoRA (GPT2-Large specific)
# refer to utils.py for a more general way
for name , module in model . named_modules ():
if isinstance ( module , type ( model . transformer . h [ 0 ]. attn )):
# rank = 24, alpha = 1
module . c_attn = LinearWithCURLoRA ( module . c_attn , 24 , 1 )
# now look at how many CURLoRA parameters to be trained
total_params = sum ( p . numel () for p in model . parameters () if p . requires_grad )
print ( f"Total trainable parameters after: { total_params :, } " )
# making sure CURLoRA layers are on CUDA as well
model . to ( "cuda" )Jetzt haben Sie das Modell mit den Curlora-Schichten, die auf Aufmerksamkeitsschichten (Schlüssel, Wert und Abfrage) angewendet werden, die Sie für die normale Funktion oder Inferenz normal verwenden können.
Möglicherweise müssen Sie wissen, wie die Ebene aufgerufen wird, damit Sie sie richtig ersetzen können. Zum Beispiel finden Sie Q, K, V in Mistral über:
for name , module in model . named_children ():
if any ( l in name for l in [ "q_proj" , "v_proj" , "k_proj" ]):
setattr ( model , name , LinearWithCURLoRA ( module , rank , alpha ))Bitte beachten Sie:
Dieses Projekt ist unter der MIT -Lizenz lizenziert - Einzelheiten finden Sie in der Lizenzdatei.
Wenn Sie Curlora -Recherchen oder Code hilfreich finden, sollten Sie sie zitieren.
@software { Fawi_CURLoRA_Leveraging_CUR_2024 ,
author = { Fawi, Muhammad } ,
title = { {CURLoRA: Leveraging CUR Matrix Decomposition for
Stable LLM Continual Fine-Tuning and Catastrophic
Forgetting Mitigation} } ,
month = jul,
year = 2024 ,
publisher = { Zenodo } ,
version = { v4.0.0 } ,
doi = { 10.5281/zenodo.12729738 } ,
url = { https://zenodo.org/doi/10.5281/zenodo.12729738 }
} Fawi, M. (2024). CURLoRA: Leveraging CUR Matrix Decomposition for Stable LLM Continual Fine-Tuning and Catastrophic Forgetting Mitigation (v4.0.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.12729738
@misc { fawi_2024_12730055 ,
author = { Fawi, Muhammad } ,
title = { {CURLoRA: Leveraging CUR Matrix Decomposition for
Stable LLM Continual Fine-Tuning and Catastrophic
Forgetting Mitigation} } ,
month = jul,
year = 2024 ,
publisher = { Zenodo } ,
doi = { 10.5281/zenodo.12730055 } ,
url = { https://doi.org/10.5281/zenodo.12730055 }
} Fawi, M. (2024). CURLoRA: Leveraging CUR Matrix Decomposition for Stable LLM Continual Fine-Tuning and Catastrophic Forgetting Mitigation. Zenodo. https://doi.org/10.5281/zenodo.12730055
Beitrag und Ideen werden sehr geschätzt sein