Bienvenue dans le selective-peft-toolkit , la mise en œuvre officielle de l'article "démasquage étape par étape pour le réglage fin économe en paramètres des modèles de gros langues" . Cette boîte à outils fournit un cadre flexible pour les modèles de gros langage affinés sélectivement en utilisant différentes méthodes sélectives de réglage des paramètres (PEFT).
La boîte à outils comprend les méthodes PEFT suivantes:
Ces méthodes sont exposées via un package appelé selective_optimizers , qui peut être installé via PIP:
pip install selective_optimizersOptimisateurs sélectifs : emballages autour des optimisateurs standard (sous-classes de torch.optim.optimizer) qui mettent à jour sélectivement un nombre budgétaire de paramètres dans le modèle.
Sélection basée sur l'heuristique : les optimisateurs sélectifs mettent à jour les paramètres en fonction de diverses heuristiques et stratégies de sélection.
Intégration avec Transformers : Compatible avec Transformers.Trainer pour une intégration facile dans vos pipelines existants.
Stockage efficace : stocke des poids modifiés dans un objet récapitulatif qui n'occupe que l'espace O (b), où B est le budget.
Pour installer le package sélectif_optimizers, exécutez simplement:
pip install selective-optimizersVoici un flux de travail de base pour la formation avec un optimiseur sélectif:
from selective_optimizers . wrap import get_selective_optimizer
from selective_optimizers . load_store import write_summary_to_disk
from torch . optim import AdamW
# Choose your base optimizer
opt = AdamW
# Specify the PEFT method to use (can be one of “fft”, “id3”, “bitfit”, or “pafi”)
peft_to_use = "id3"
# Get the selective optimizer class
optimizer_class = get_selective_optimizer ( opt , peft_to_use )
# Initialize the optimizer with additional selective parameters
optimizer = optimizer_class (
params = model . parameters (),
lr = 0.0001 ,
budget = 100000 ,
exp = 0 ,
eps = 1e-3 ,
max_steps = 1000
)
# Usual training loop
...
...
# Optional post-training work for validation
optimizer . post_train_work ()
print ( "Budget used:" , optimizer . get_budget_used ())
# Save the summary of modified weights
summary = optimizer . get_summary ( model )
write_summary_to_disk ( "path/to/summary.pth" , summary ) from selective_optimizers . load_store import load_summary_from_disk , load_weights_from_summary
# Load your model as usual
...
model = ...
...
# Load the summary from disk
summary = load_summary_from_disk ( "path/to/summary.pth" )
# Apply the modified weights from the summary to the model
load_weights_from_summary ( model , summary )
# Usual inference code
...
...La classe Transformers.Trainer accepte des optimisateurs externes, ce qui facilite l'intégration d'optimiturs sélectifs dans votre flux de travail:
Nous saluons les contributions au package sélectif_optimizers! Si vous souhaitez ajouter un nouvel optimiseur sélectif, suivez ces étapes:
Ce projet est autorisé sous la licence du MIT. Voir le fichier de licence pour plus de détails.
Si vous utilisez cette boîte à outils dans votre recherche, veuillez citer notre article:
@article{Agarwal2024_step_by_step,
title = {Step - by - Step Unmasking for Parameter - Efficient Fine - tuning of Large Language Models},
author = {Aradhye Agarwal and Suhas Kamasetty Ramesh and Ayan Sengupta and Tanmoy Chakraborty}
journal = {arXiv preprint arXiv: 2408 . 14470 },
year = { 2024 },
}
Pour toute question ou problème, n'hésitez pas à ouvrir un problème sur le référentiel GitHub ou à nous contacter directement.