PEFT documentation
C3A : Fine-tuning efficace en paramètres via convolution circulaire
C3A : Fine-tuning efficace en paramètres via convolution circulaire
C3A est une technique de fine-tuning à efficacité paramétrique qui exploite la convolution circulaire pour atteindre une adaptation de rang élevée dans des limites de ressources raisonnables.
Notez que vous devez utiliser un taux d'apprentissage (LR) beaucoup plus élevé pour C3A que pour les autres méthodes. Par exemple, un LR de 1e-1 pour C3A est un bon point de départ. De plus, un poids de décroissance (weight decay) beaucoup plus faible doit être utilisé. Vous pouvez consulter le dossier method_comparison pour plus de détails.
Pour le block_size, il influence les paramètres ajustables et les performances. Pour commencer, vous pouvez choisir un proche de $\frac{\sqrt{d_1 \times d_2}}{r}$, où est le rang LoRA que vous utiliseriez pour cette tâche.
C3A présente actuellement les contraintes suivantes :
- Seules les couches
nn.Linearsont prises en charge. - Les couches quantifiées ne sont pas prises en charge.
- La taille du bloc doit être un diviseur commun des tailles d'entrée et de sortie des cibles.
Si ces contraintes ne conviennent pas à votre cas d’usage, envisagez plutôt d’autres méthodes.
L'abstract de l'article est :
La Low-Rank Adaptation (LoRA) a gagné en popularité pour l'ajustement fin de grands modèles de fondation, en exploitant des matrices de faible rang et pour représenter les modifications de poids (c'est-à-dire $\Delta \mathbf{W} = \mathbf{B} \mathbf{A}$). Cette méthode réduit le nombre de paramètres entraînables et atténue la forte consommation de mémoire associée aux matrices delta complètes en multipliant séquentiellement et avec l'activation. Malgré son succès, la caractéristique intrinsèque de faible rang peut limiter ses performances. Bien que plusieurs variantes aient été proposées pour résoudre ce problème, elles négligent souvent l'efficacité computationnelle et mémoire cruciale apportée par LoRA. Dans cet article, nous proposons la Circular Convolution Adaptation (C3A), qui non seulement atteint une adaptation de haut rang avec des performances améliorées, mais excelle également en puissance de calcul et en utilisation de la mémoire. Des expériences étendues démontrent que C3A surpasse systématiquement LoRA et ses variantes dans diverses tâches d'ajustement fin.
Aperçu des benchmarks
API
C3AConfig
classe peft.C3AConfig
< 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 = Falseblock_size: int = 256target_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Noneblock_size_pattern: Optional[dict] = <factory>init_weights: Optional[Union[bool, Literal['gaussian', 'kaiming_uniform', 'xavier_uniform']]] = 'xavier_uniform' )
Paramètres
- block_size (
int) — taille de bloc pour C3A, doit être divisible à la fois par la taille d'entrée et la taille de sortie de la couche cible. Si vous ne savez pas quelle valeur de block_size utiliser, définissez-la au plus grand commun diviseur de toutes les tailles d'entrée et de sortie de vos couches cibles. Augmenter cette valeur entraînera une réduction du nombre de paramètres. - target_modules (
Union[list[str],str]) — Les noms des modules auxquels appliquer C3A. - bias (
str) — Type de biais pour C3A. Peut être ‘none’, ‘all’ ou ‘c3a_only’. Si ‘all’ ou ‘c3a_only’, les biais correspondants seront mis à jour pendant l’entraînement. Notez 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. - modules_to_save (
list[str]) — liste des modules, à l'exception des couches C3A, à définir comme entraînables et à enregistrer dans le point de contrôle final. - layers_to_transform (
Union[list[int],int]) — Les index de couches à transformer. Si cet argument est spécifié, C3A sera appliqué aux index de couches indiqués dans cette liste. Si un seul entier est transmis, C3A sera appliqué à la couche située à cet index. - layers_pattern (
str) — Le nom du motif de couche, utilisé uniquement silayers_to_transformest différent deNoneet si le motif de couche ne figure pas dans les motifs de couches courants. - block_size_pattern (
dict) — La correspondance entre les noms de couches ou les expressions régulières et les valeurs de block_size qui diffèrent de la valeur par défaut spécifiée. Par exemple,{"model.decoder.layers.0.encoder_attn.k_proj": 1280} - init_weights (
Union[bool, Literal["gaussian", "kaiming_uniform", "xavier_uniform"]]) — Valeur par défaut : ‘xavier_uniform’. Si cette valeur est définie surFalse, ‘xavier_uniform’ est également utilisé. Pour initialiser les poids à zéro (rendant ainsi C3A inopérant), définissez la valeur surTrue.
Ceci est la classe de configuration destinée à stocker la configuration d'un C3AModel.
C3AModel
classe peft.C3AModel
< source >( 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 (C3AConfig) — La configuration du modèle C3A.
- adapter_name (
str) — Le nom de l'adaptateur, par défaut"default".
Retourne
torch.nn.Module
Le modèle C3A.
Crée un modèle C3A à partir d'un modèle transformers pré-entraîné.
La méthode est décrite en détail dans https://huggingface.co/papers/2407.19342.
Attributs :
- model (PreTrainedModel) — Le modèle à adapter.
- peft_config (C3AConfig) : La configuration du modèle C3A.