PEFT documentation
UniLoRA
UniLoRA
Uni-LoRA est une méthode PEFT qui partage une banque de vecteurs compacts et entraînables entre les poids des adaptateurs de faible rang. Plutôt que d’apprendre chaque élément de la matrice LoRA de manière indépendante, UniLoRA projette de façon déterministe les entrées vers des valeurs partagées theta_d et apprend les paramètres partagés utilisés par la mise à jour de l’adaptateur.
Démarrage rapide
from peft import UniLoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B")
config = UniLoraConfig(
r=32,
theta_d_length=256,
proj_seed=42,
target_modules=["q_proj", "v_proj"],
unilora_dropout=0.0,
init_weights=True,
task_type="CAUSAL_LM",
)
peft_model = get_peft_model(model, config)
peft_model.print_healthcheck()Paramètres importants
r contrôle la dimension de l'adaptateur de rang faible. Des valeurs plus élevées augmentent la capacité de l'adaptateur et l'utilisation de la mémoire.
theta_d_length contrôle la longueur de la banque de vecteurs UniLoRA partagée. Il s’agit du principal stockage entraînable partagé par les entrées d’adaptateur projetées.
proj_seed contrôle la génération déterministe des indices pour les projections fixes vers theta_d. Réutiliser la même graine et la même configuration permet de reproduire les indices d’adaptateurs générés.
target_modules sélectionne les modules qui reçoivent les adaptateurs UniLoRA. Utilisez des suffixes de module tels que ["q_proj", "v_proj"], une chaîne regex, ou "all-linear" si l’architecture du modèle le prend en charge.
unilora_dropout applique le dropout dans les couches d’adaptateurs UniLoRA pendant l’entraînement.
init_weights contrôle l’initialisation des paramètres de UniLoRA. Définissez-le sur False pour conserver une initialisation aléatoire de theta_d lorsque vous devez gérer l’initialisation manuellement.
save_indices contrôle si les points de contrôle UniLoRA enregistrent les tenseurs d’index et d’échelle générés avec les paramètres partagés theta_d. Laisser cette option désactivée produit des points de contrôle plus petits et régénère les index à partir de proj_seed ; l’activer rend les adaptateurs enregistrés indépendants des futures modifications de la génération d’index.
Aperçu des benchmarks
API
UniLoraConfig
classe peft.UniLoraConfig
< source >( 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 = 4proj_seed: int = 42theta_d_length: int = 256target_modules: list[str] | str | None = Noneunilora_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: list[str] | None = Noneinit_theta_d_bound: float = 0.02init_weights: bool = Truesave_indices: bool = Falselayers_to_transform: list[int] | int | None = Nonelayers_pattern: list[str] | str | None = None )
Paramètres
- r (
int) — Rang de l'adaptation de bas rang. Cela contrôle la capacité expressive de la mise à jour UniLora. - proj_seed (
int) — Graine aléatoire utilisée pour générer l’attribution fixe des index. Cela garantit la reproductibilité entre les exécutions. - theta_d_length (
int) — Longueur du vecteur UniLora partagétheta_d. - target_modules (
Union[list[str], str], facultatif) — Noms ou motifs des modules auxquels les adaptateurs UniLora sont appliqués.- Si une chaîne est fournie, elle est traitée comme une expression régulière.
- Si une liste est fournie, les modules sont appariés par nom exact ou par suffixe.
- La valeur spéciale ‘all-linear’ applique UniLora à toutes les couches Linear / Conv1D, à l’exception de la couche de sortie. Si elle n’est pas spécifiée, les modules sont déduits de l’architecture du modèle. Une erreur est levée si l’architecture n’est pas prise en charge.
- unilora_dropout (
float) — Probabilité de dropout appliquée au sein des couches UniLora. - fan_in_fan_out (
bool) — Indique si la couche remplacée stocke les poids au format (fan_in, fan_out). Cette valeur doit être définie sur True pour les modèles tels que GPT-2 qui utilisent des couches Conv1D. - bias (
str) — Spécifie quels termes de biais sont entraînables :- ‘none’ : aucun paramètre de biais n'est mis à jour
- ‘all’ : tous les paramètres de biais sont mis à jour
- ‘unilora_only’ : seules les biais dans les couches UniLora sont mis à jour Remarque : l’activation des mises à jour des biais modifie les sorties du modèle, même lorsque les adaptateurs sont désactivés.
- modules_to_save (
list[str], facultatif) — Modules supplémentaires (en dehors des couches UniLora) qui doivent rester entraînables et être enregistrés dans le point de contrôle final. Cette option est couramment utilisée pour les têtes spécifiques à la tâche, telles que les classifieurs. - init_theta_d_bound (
float) — Limite d'initialisation pour la banque de vecteurs UniLora. Les vecteurs sont échantillonnés uniformément dans l'intervalle [-init_theta_d_bound, init_theta_d_bound]. L'initialisation par zéro est évitée afin de prévenir les gradients qui s'annulent. Des valeurs faibles (par exemple, 0.02) sont recommandées pour un entraînement stable. - init_weights (
bool) — Indique s'il faut initialisertheta_davec l'initialisation UniLora par défaut. Si défini surFalse,theta_dconserve une initialisation aléatoire. - save_indices (
bool) — Indique s'il faut enregistrer l'index UniLora généré et les tampons d'échelle avectheta_d. Cela augmente la taille du point de contrôle, mais rend les adaptateurs enregistrés indépendants des modifications futures de la routine de génération d'index. - layers_to_transform (
Union[list[int], int], facultatif) — Indices des couches de transformer auxquelles UniLora est appliqué. Si spécifié, seules ces couches sont modifiées. Cette option n’est valide que lorsquetarget_modulesest une liste. - layers_pattern (
Union[list[str], str], facultatif) — Motif de nom de couche personnalisé utilisé aveclayers_to_transformlorsque le modèle ne suit pas les conventions de nommage standard des couches. Cette option n'est valide que sitarget_modulesest une liste.
Classe de configuration pour les adaptateurs UniLora.
Cette classe définit tous les hyperparamètres nécessaires pour initialiser et appliquer les couches UniLora au sein du framework PEFT. La configuration est volontairement minimale et n'inclut que les paramètres activement utilisés par l'implémentation actuelle de UniLora.
Référence : Uni-LoRA: One Vector Is All You Need https://arxiv.org/abs/2506.00799
UniLoraModel
classe peft.UniLoraModel
< source >( modelconfigadapter_namelow_cpu_mem_usage: bool = Falsestate_dict: dict[str, torch.Tensor] | None = None )
Crée un adaptateur UniLora autour d'un modèle pré-entraîné.
Attribuer des indices theta_d déterministes à l'espace de paramètres UniLora aplati.
Un simple np.random.choice(np.arange(theta_d_length), size=lora_param_count) échantillonne chaque position
indépendamment, ce qui peut laisser certaines entrées de theta_d inutilisées pour les adaptateurs plus petits. UniLora utilise à la place une
affectation déterministe équilibrée : chaque index apparaît soit floor(D / d) fois, soit ceil(D / d) fois, où D est le nombre de paramètres LoRA aplatis et d est theta_d_length. Cela maintient la normalisation par index stable
tout en mélangeant l'affectation avec proj_seed.