Muhammad Fawi
Code DOI:
Research préimprimée DOI:
Ce repo contient le code pour le document de recherche de Curlora, une nouvelle approche pour régler les modèles de grande langue (LLM) qui exploite la décomposition de la matrice Cur dans le contexte de l'adaptation de faible rang (LORA). Notre méthode relève de deux défis critiques dans le réglage fin de LLM: atténuer l'oubli catastrophique lors de l'apprentissage continu et la réduction du nombre de paramètres formables. Nous proposons une modification unique du processus de décomposition Cur pour permettre un moyen plus efficace et stable d'adapter les LLM à de nouvelles tâches sans compromettre aucune connaissance existante. Nous démontrons à travers des expériences sur plusieurs ensembles de données que Curlora surpasse la LORA standard pour atténuer l'oubli catastrophique. Il maintient la stabilité et les performances du modèle entre les tâches tout en réduisant considérablement le nombre de paramètres formables. Nos résultats montrent que Curlora atteint une précision supérieure et des scores de perplexité par rapport à LORA, en particulier dans les scénarios avec des données limitées.
CURLoRA.pdf : Le document de recherche détaillant l'approche de Curlora.code/ : répertoire contenant la mise en œuvre de Curlora et des expériences.code/curlora.py : contenant des classes de Curlora.code/utils.py : fonctions d'assistance.code/lora.py : classes LORA.code/curlora_experiment.ipynb : Expérimentez Curlora avec Mistral 7B (affineur sur MRPC, SST-2 et Sentiment140).code/curlora_experiment-gpt.ipynb : Expérimentez Curlora avec GPT2-Large (affinage sur MRPC, SST-2 et Sentiment140).code/squad_gpt-curlora.ipynb : GPT2-Large pour Q&R avec Curlora et Sfttrainer sur l'ensemble de données Squad. Nous installons d'abord les exigences
pip3 install -r code/requirements.txtToutes les fonctions et classes de Curlora Helper sont définies dans code / curlora.py et code / utils.py .
Chargez le modèle et appliquez Curlora
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" )Vous avez maintenant le modèle avec les couches de Curlora appliqués aux couches d'attention (clé, valeur et requête) que vous pouvez utiliser pour le réglage fin ou l'inférence normalement.
Vous devrez peut-être savoir comment le calque est appelé afin que vous puissiez le remplacer correctement. Par exemple, Q, K, V dans Mistral se trouve via:
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 ))Veuillez noter:
Ce projet est autorisé en vertu de la licence MIT - voir le fichier de licence pour plus de détails.
Si vous trouvez des recherches ou du code de Curlora utiles, veuillez envisager de les citer.
@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
La contribution et les idées seront très appréciées