Muhammad Fawi
Código doi:
Preparación de investigación DOI:
Este repositorio contiene el código para el documento de investigación de Curlora, un enfoque novedoso para ajustar los modelos de idiomas grandes (LLM) que aprovecha la descomposición de la matriz Cur en el contexto de la adaptación de bajo rango (LORA). Nuestro método aborda dos desafíos críticos en el ajuste fino de LLM: mitigar el olvido catastrófico durante el aprendizaje continuo y reducir el número de parámetros capacitables. Proponemos una modificación única al proceso de descomposición CUR para permitir una forma más eficiente y estable de adaptar LLM a nuevas tareas sin comprometer ningún conocimiento existente. Demostramos a través de experimentos en múltiples conjuntos de datos que Curlora supera a Lora estándar en la mitigación del olvido catastrófico. Mantiene la estabilidad y el rendimiento del modelo en todas las tareas, al tiempo que reduce significativamente el número de parámetros capacitables. Nuestros resultados muestran que Curlora alcanza los puntajes de precisión y perplejidad superiores en comparación con Lora, particularmente en escenarios con datos limitados.
CURLoRA.pdf : el documento de investigación que detalla el enfoque Curlora.code/ : Directorio que contiene la implementación de Curlora y los experimentos.code/curlora.py : que contiene clases Curlora.code/utils.py : funciones auxiliares.code/lora.py : clases Lora.code/curlora_experiment.ipynb : Experimento Curlora con Mistral 7B (ajuste fino en MRPC, SST-2 y Sentiment140).code/curlora_experiment-gpt.ipynb : Experimento Curlora con GPT2-Large (ajuste fino en MRPC, SST-2 y Sentiment140).code/squad_gpt-curlora.ipynb : ajuste de GPT2-Large para preguntas y respuestas con curlora y sfttrainer en el conjunto de datos de escuadrón. Primero instalamos los requisitos
pip3 install -r code/requirements.txtTodas las funciones y clases de Curlora Helper se definen en Code/Curlora.py y Code/Utils.py .
Cargue el modelo y aplique 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" )Ahora tiene el modelo con las capas Curlora aplicadas a las capas de atención (clave, valor y consulta) que puede usar para ajustar o inferencia normalmente.
Es posible que deba saber cómo se llama a la capa para que pueda reemplazarla correctamente. Por ejemplo, Q, K, V en Mistral se puede encontrar a través de:
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 ))Tenga en cuenta:
Este proyecto tiene licencia bajo la licencia MIT; consulte el archivo de licencia para obtener más detalles.
Si encuentra útil la investigación o el código de Curlora, considere citarlos.
@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 contribución y las ideas serán muy apreciadas