PEFT documentation

DeLoRA : adaptation de faible rang découplée

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DeLoRA : adaptation de faible rang découplée

DeLoRA est une technique de fine-tuning efficace en paramètres qui maintient implicitement une frontière de Frobenius par rapport aux poids pré-entraînés en normalisant et en mettant à l'échelle les matrices de faible rang apprenables. Cela découple efficacement l'apprentissage des directions (terme BA) et de l'amplitude (terme frontière) des mises à jour des poids, évitant ainsi des décalages catastrophiques dans les poids adaptés et renforçant la robustesse face aux choix d'hyperparamètres.

Remarque :

  • utiliser un taux d'apprentissage 10 à 100 fois plus élevé que pour les variantes standard de LoRA (valeurs typiques de 1e-3/1e-2/..)
  • s'assurer que le paramètre de frontière initial lambda n'est pas trop petit (valeurs typiques autour de 10/15/..). Il est possible de définir des lambdas différents pour différentes couches

DeLoRA présente actuellement les contraintes suivantes :

  • Seules les couches nn.Linear sont prises en charge.
  • Les couches quantifiées ne sont pas prises en charge.

Si ces contraintes ne conviennent pas à votre cas d’usage, envisagez plutôt d’autres méthodes.

L'abstract de l'article est :

Les méthodes de fine-tuning à efficacité paramétrique (PEFT) ont récemment gagné en popularité grâce à la disponibilité généralisée de grands modèles pré-entraînés. Ces méthodes permettent une adaptation rapide aux tâches en aval avec un coût de calcul minimal. Cependant, les méthodes de fine-tuning populaires telles que LoRA présentent une robustesse limitée en ce qui concerne le choix des hyperparamètres ou les régimes d'entraînement étendus, empêchant une performance optimale dès l'installation. En revanche, les approches bornées, telles que ETHER, offrent une plus grande robustesse mais sont limitées aux adaptations de rang extrêmement faible et aux transformations de force fixe, réduisant ainsi leur pouvoir expressif d'adaptation. Dans ce travail, nous proposons Decoupled Low-rank Adaptation (DeLoRA), une nouvelle méthode de fine-tuning qui normalise et met à l'échelle les matrices de rang faible apprenables. En bornant la distance de la transformation, DeLoRA découple efficacement l'apprentissage angulaire de la force d'adaptation, renforçant la robustesse sans compromettre les performances. À travers des évaluations sur la génération d'images pilotée par le sujet, la compréhension du langage naturel et l'ajustement par instructions, nous montrons que DeLoRA égale ou surpasse les performances des méthodes PEFT concurrentes, tout en présentant une robustesse supérieure.

Aperçu des benchmarks

API

DeloraConfig

classe peft.DeloraConfig

< >

( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falser: int = 8delora_lambda: int = 15module_dropout: float = 0.0target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: Literal['none', 'all', 'delora_only'] = 'none'init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonerank_pattern: Optional[dict] = <factory>lambda_pattern: Optional[dict] = <factory>modules_to_save: Optional[list[str]] = None )

Paramètres

  • r (int) — Le rang de l'adaptateur DeLoRA.
  • delora_lambda (int) — Valeur initiale de la borne de l’adaptateur DeLoRA. Cette variable fixe une limite supérieure à la norme de Frobenius de la variation des poids, empêchant le modèle affiné de s’écarter trop du modèle d’origine.
  • module_dropout (float) — Probabilité de dropout pour désactiver les modules DeLoRA pendant l’entraînement.
  • target_modules (Optional[Union[List[str], str]]) — Les noms des modules auxquels appliquer l’adaptateur. Si ce paramètre est spécifié, seuls les modules portant les noms indiqués seront remplacés. En cas de chaîne de caractères, une correspondance par expression régulière est effectuée. En cas de liste de chaînes de caractères, une correspondance exacte est réalisée ou il est vérifié si le nom du module se termine par l’une des chaînes fournies. Si la valeur est « all-linear », tous les modules linéaires/Conv1D sont sélectionnés, à l’exception de la couche de sortie. Si ce paramètre n’est pas spécifié, les modules sont choisis en fonction de l’architecture du modèle. Si l’architecture est inconnue, une erreur est levée — dans ce cas, vous devez spécifier manuellement les modules cibles.
  • exclude_modules (Optional[Union[List[str], str]]) — Les noms des modules auxquels l’adaptateur ne doit pas être appliqué. Si une chaîne de caractères est transmise, une correspondance par expression régulière est effectuée. Si une liste de chaînes de caractères est transmise, une correspondance exacte est effectuée ou il est vérifié si le nom du module se termine par l’une des chaînes transmises.
  • bias (str) — Type de biais pour DeLoRA. Peut être ‘none’, ‘all’ ou ‘delora_only’. Si ‘all’ ou ‘delora_only’, les biais correspondants seront mis à jour pendant l’entraînement. Sachez que cela signifie que, même en désactivant les adaptateurs, le modèle ne produira pas la même sortie que le modèle de base sans adaptation.
  • init_weights (bool) — Indique s'il faut effectuer l'initialisation des poids de l'adaptateur. Si True (par défaut) : A est initialisé avec une initialisation uniforme de kaiming, tandis que B est initialisé avec des zéros. Si False : A et B sont tous deux initialisés avec une initialisation uniforme de kaiming, contribuant immédiatement à un delta non nul. Cela est généralement déconseillé pour un usage normal.
  • layers_to_transform (Union[List[int], int]) — Les indices de couches à transformer. Si une liste d'entiers est transmise, l'adaptateur sera appliqué aux indices de couches spécifiés dans cette liste. Si un seul entier est transmis, les transformations seront appliquées à la couche située à cet index.
  • layers_pattern (Optional[Union[List[str], str]]) — Le nom du motif de couche, utilisé uniquement si layers_to_transform est différent de None. Il doit cibler le nn.ModuleList du modèle, souvent appelé 'layers' ou 'h'.
  • rank_pattern (dict) — La correspondance entre les noms de couches ou les expressions régulières et les rangs qui diffèrent du rang par défaut spécifié par r. Par exemple, {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • lambda_pattern (dict) — La correspondance entre les noms de couches ou les expressions régulières et les lambdas qui diffèrent de la lambda par défaut spécifiée par delora_lambda. Par exemple, {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • modules_to_save (Optional[List[str]]) — Liste des modules, autres que les couches d’adaptateur, à définir comme entraînables et à enregistrer dans le point de contrôle final.

Ceci est la classe de configuration destinée à stocker la configuration d'un DeloraModel.

DeloraModel

classe peft.DeloraModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module

Paramètres

  • model (torch.nn.Module) — Le modèle à adapter.
  • config (DeloraConfig) — La configuration du modèle DeLoRA.
  • adapter_name (str) — Le nom de l'adaptateur, par défaut "default".

Retourne

torch.nn.Module

Le modèle DeLoRA.

Crée un modèle DeLoRA à partir d'un modèle transformers pré-entraîné.

La méthode est décrite en détail dans DeLoRA: Decoupled Low-rank Adaptation.

Attributs :

Update on GitHub