Loldu est une technique de réglage des paramètres de paramètres de pointe (PEFT) conçue pour réduire considérablement le nombre de paramètres formables tout en atteignant des niveaux de performance comparables à un réglage fin complet. Ce document décrit les étapes nécessaires pour intégrer efficacement Loldu dans vos projets.
Pour plus de détails, veuillez consulter le document: https://arxiv.org/pdf/2410.13618
Pour installer Loldu, utilisez simplement PIP:
git clone https://github.com/SKDDJ/LoLDU
cd LoLDU
pip install -e . Voici un exemple rapide de la façon d'utiliser Loldu:
import torch
import torch . nn as nn
from functools import partial
from minloldu import LoLDUParametrization , add_loldu , get_loldu_params
# Define your model
model = YourModel ()
# Define LoLDU configuration
loldu_config = {
nn . Linear : {
"weight" : partial ( LoLDUParametrization . from_linear , rank = 15 ),
},
}
# Add LoLDU to the model
add_loldu ( model , loldu_config = loldu_config )
# Freeze all parameters
for param in model . parameters ():
param . requires_grad = False
# Enable gradients for LoLDU parameters
for param in get_loldu_params ( model ):
param . requires_grad = True
# Now your model is ready for fine-tuning with LoLDU add_loldu(model, loldu_config)
model : le modèle Pytorch à modifier.loldu_config : Dictionnaire de configuration pour Loldu. get_loldu_params(model, print_shapes=False)
model : Le modèle Pytorch avec Loldu.print_shapes : si vrai, imprime les formes des paramètres de Loldu. disable_loldu(model)
enable_loldu(model)
remove_loldu(model)
merge_loldu(model)
get_loldu_state_dict(model)
LoLDUParametrization.from_linear(layer, rank)layer : la couche linéaire à paramétrer.rank : le rang pour l'approximation de bas rang. from minloldu import LoLDUParametrization , add_loldu
from functools import partial
class MyModel ( nn . Module ):
def __init__ ( self ):
super (). __init__ ()
self . model = nn . Sequential (
nn . Linear ( in_features = 15 , out_features = 15 ),
)
def forward ( self , x ):
return self . model ( x )
model = MyModel ()
loldu_config = {
nn . Linear : {
"weight" : partial ( LoLDUParametrization . from_linear , rank = 15 ),
},
}
add_loldu ( model , loldu_config = loldu_config ) from minloldu import get_loldu_params
# Freeze all parameters
for param in model . parameters ():
param . requires_grad = False
# Enable gradients for LoLDU parameters
for param in get_loldu_params ( model ):
param . requires_grad = True
# Your training loop here from minloldu import get_loldu_state_dict
# Save LoLDU state
state_dict_to_save = get_loldu_state_dict ( model )
torch . save ( state_dict_to_save , "loldu_state.pth" )
# Load LoLDU state
loaded_state = torch . load ( "loldu_state.pth" )
model . load_state_dict ( loaded_state , strict = False ) from minloldu import merge_loldu
# After training, merge LoLDU for efficient inference
merge_loldu ( model )Choisissez un rang approprié : Le paramètre de rang dans la lolduroamétrisation affecte le compromis entre l'efficacité des paramètres et les performances du modèle. Expérimentez avec différents rangs pour trouver l'équilibre optimal pour votre tâche.
Hyperparamètres à réglage fin : Loldu peut nécessiter des taux d'apprentissage différents par rapport au réglage fin complet. Ajustez votre taux d'apprentissage et autres hyperparamètres en conséquence.
Surveillez la formation : gardez un œil sur le processus de formation pour vous assurer que Loldu adapte efficacement le modèle. Utilisez des ensembles de validation pour empêcher le sur-ajustement.
Merge pour l'inférence : utilisez toujours merge_loldu() avant de déployer votre modèle pour l'inférence pour éliminer toute surcharge de calcul.
Combinez avec d'autres techniques : Loldu peut être combiné avec d'autres techniques d'optimisation comme la quantification pour une efficacité encore plus grande.
Pour des informations plus détaillées et une utilisation avancée, veuillez vous référer à l'article d'origine et au référentiel de code source.
Note:
Veuillez noter que ce code peut ne pas reproduire entièrement les résultats présentés dans le document en raison des éventuelles erreurs humaines qui se sont produites lors de la préparation et du nettoyage du code avant sa libération. Si vous rencontrez des défis dans la reproduction de nos résultats, n'hésitez pas à nous contacter. En outre, nous nous engageons à mener des expériences de vérification de la raison dans un avenir proche.
Reconnaissance
Notre implémentation Loldu a été considérablement améliorée par la base de code Minlora.
Bibtex
@misc { shi2024loldulowrankadaptationlowerdiagupper ,
title = { LoLDU: Low-Rank Adaptation via Lower-Diag-Upper Decomposition for Parameter-Efficient Fine-Tuning } ,
author = { Yiming Shi and Jiwei Wei and Yujia Wu and Ran Ran and Chengwei Sun and Shiyuan He and Yang Yang } ,
year = { 2024 } ,
eprint = { 2410.13618 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CV } ,
url = { https://arxiv.org/abs/2410.13618 } ,
}