Loldu ist eine hochmoderne Parameter-effizientes Fine-Tuning-Technik (PEFT), mit der die Anzahl der trainierbaren Parameter drastisch reduziert und die mit vollständigen Feinabstimmungen vergleichbaren Leistungsstufen erreicht werden. In diesem Dokument werden die Schritte beschrieben, die erforderlich sind, um Loldu effektiv in Ihre Projekte zu integrieren.
Weitere Informationen finden Sie im Papier: https://arxiv.org/pdf/2410.13618
Um Loldu zu installieren, verwenden Sie einfach PIP:
git clone https://github.com/SKDDJ/LoLDU
cd LoLDU
pip install -e . Hier ist ein kurzes Beispiel für die Verwendung von 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 : Das zu ändernde Pytorch -Modell.loldu_config : Konfigurationswörterbuch für Loldu. get_loldu_params(model, print_shapes=False)
model : Das Pytorch -Modell mit Loldu.print_shapes : Wenn wahr, druckt die Formen der Loldu -Parameter. disable_loldu(model)
enable_loldu(model)
remove_loldu(model)
merge_loldu(model)
get_loldu_state_dict(model)
LoLDUParametrization.from_linear(layer, rank)layer : Die lineare zu parametrisierende Ebene.rank : Der Rang für die Niedrigrangnäherung. 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 )Wählen Sie einen geeigneten Rang : Der Rangparameter in Lolduparametrisierung beeinflusst den Kompromiss zwischen Parametereffizienz und Modellleistung. Experimentieren Sie mit verschiedenen Rängen, um die optimale Balance für Ihre Aufgabe zu finden.
Fein-Tune-Hyperparameter : Loldu erfordert möglicherweise unterschiedliche Lernraten im Vergleich zur vollständigen Feinabstimmung. Passen Sie Ihre Lernrate und andere Hyperparameter entsprechend an.
Überwachen Sie das Training : Beobachten Sie den Trainingsprozess, um sicherzustellen, dass Loldu das Modell effektiv anpasst. Verwenden Sie Validierungssätze, um eine Überanpassung zu verhindern.
Merge for Inference : Verwenden Sie immer merge_loldu() bevor Sie Ihr Modell für Inferenz bereitstellen, um einen Rechenaufwand zu beseitigen.
Kombinieren mit anderen Techniken : Loldu kann mit anderen Optimierungstechniken wie der Quantisierung für noch größere Effizienz kombiniert werden.
Weitere detailliertere Informationen und fortgeschrittene Verwendung finden Sie im Originalpapier und im Quellcode -Repository.
Notiz:
Bitte beachten Sie, dass dieser Code die im Papier angegebenen Ergebnisse aufgrund möglicher menschlicher Fehler, die während der Vorbereitung und Reinigung des Codes vor seiner Freigabe aufgetreten sind, nicht vollständig replizieren. Wenn Sie Herausforderungen bei der Reproduktion unserer Erkenntnisse haben, zögern Sie nicht, uns an uns zu wenden. Darüber hinaus sind wir bestrebt, in naher Zukunft Experimente für Vernunftprüfungen durchzuführen.
Anerkennung
Unsere Loldu -Implementierung wurde durch die Minlora -Codebasis erheblich verbessert.
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 } ,
}