Transformers documentation

Couches et utilitaires personnalisés

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

and get access to the augmented documentation experience

to get started

Couches et utilitaires personnalisés

Cette page répertorie toutes les couches personnalisées utilisées par la bibliothèque, ainsi que les fonctions utilitaires et les classes qu'elle fournit pour la modélisation.

La plupart de ces éléments ne sont utiles que si vous étudiez le code des modèles de la bibliothèque.

WeightRenaming

classe transformers.GroupWeightRename

< >

( source_patterns: list[str]target_patterns: list[str] )

Applique une liste de transformations de renommage de poids appariées, activées paresseusement par le premier motif source (« garde »). Utilisez ceci lorsque deux renommages partagent un nom intermédiaire (par exemple norm0→norm1 et norm1→norm2) afin que le chargement d'un point de contrôle déjà converti (qui contient norm1 et norm2 mais pas norm0) ne réapplique pas incorrectement les renommages.

NOTE : ordonnez source_patterns de manière à ce que celui qui est absent d'un point de contrôle déjà converti apparaisse en premier. Le dictionnaire d'état est itéré dans l'ordre trié des clés, le motif de garde doit donc être lexicographiquement inférieur aux motifs dépendants. Sinon, les dépendants seront ignorés lors du premier passage et ne seront jamais réessayés.

WeightConverter

classe transformers.WeightConverter

< >

( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )

Opérations de conversion

classe transformers.ConversionOps

< >

( )

Classe de base pour les opérations de conversion de poids.

classe transformers.Chunk

< >

( dim: int = 0num_shards_attribute: str | None = None )

Divise un tenseur le long de dim en morceaux de taille égale. De plus, num_shards_attribute est un champ de configuration à lire pour savoir combien de tenseurs découper. Utile lors de la concaténation d'un nombre arbitraire de tenseurs.

classe transformers.Concatenate

< >

( dim: int = 0num_shards_attribute: str | None = None )

Concatène les tenseurs le long de dim. De plus, lors de la concaténation d’un nombre arbitraire de tenseurs, num_shards_attribute est un champ de configuration à lire pour savoir combien de tenseurs recréer lors de l’utilisation des Ops opposés.

classe transformers.MergeModulelist

< >

( dim: int = 0 )

Fusionne une liste de tenseurs en un seul tenseur le long de la première dimension. Nous définissons explicitement cette fonction car, pour EP ou TP, vous devez être certain de savoir ce que vous faites !

classe transformers.SplitModulelist

< >

( dim: int = 0 )

Inverse de MergeModulelist utilisant des tailles de scission explicites par groupe.

classe transformers.PermuteForRope

< >

( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )

Applique la permutation requise pour convertir les poids RoPE complexes au format sin/cos séparé.

classe transformers.VisionFuseAndPermuteForRope

< >

( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )

Applique la permutation nécessaire pour convertir les poids RoPE complexes au format sin/cos séparé sur les QKV fusionnés. Équivalent à l'appel de PermuteForRope() + Concatenate(), mais permet d'appeler Permute uniquement sur un sous-ensemble de tenseurs fractionnés.

NOTE : cette conversion ne s'applique qu'à un backbone visuel dans les modèles multimodaux, car elle vérifie config.vision_config

classe transformers.VisionUnfuseAndPermuteForRope

< >

( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )

Applique la permutation nécessaire pour convertir les poids RoPE complexes au format sin/cos séparé sur les QKV fusionnés. Équivalent à l’appel de Chunk() + PermuteForRope(), mais permet d’appeler Permute uniquement sur un sous-ensemble de tenseurs découpés.

NOTE : cette conversion ne s'applique qu'à un backbone visuel dans les modèles multimodaux, car elle vérifie config.vision_config

Couches

classe transformers.GradientCheckpointingLayer

< >

( *args**kwargs )

Classe de base pour les couches avec point de contrôle de gradient.

Cette classe permet d’activer le gradient checkpointing pour une couche. Par défaut, le gradient checkpointing est désactivé (gradient_checkpointing = False). Lorsque model.set_gradient_checkpointing() est appelé, le gradient checkpointing est activé en définissant gradient_checkpointing = True et en affectant une fonction de checkpointing à _gradient_checkpointing_func.

Important :

Lors de l’utilisation du gradient checkpointing avec use_reentrant=True, les entrées qui nécessitent des gradients (par exemple, les états cachés) doivent être passées en tant qu’arguments positionnels (*args) plutôt qu’en arguments nommés afin de propager correctement les gradients.

Exemple :

>>> # Correct - hidden_states passed as positional arg
>>> out = self.layer(hidden_states, attention_mask=attention_mask)

>>> # Incorrect - hidden_states passed as keyword arg
>>> out = self.layer(hidden_states=hidden_states, attention_mask=attention_mask)

Fonctions d'attention

classe transformers.AttentionInterface

< >

( )

Objet de type dictionnaire qui suit les fonctions d'attention autorisées. Vous pouvez facilement ajouter une nouvelle fonction d'attention avec un appel à register(). Si un modèle doit écraser localement une fonction d'attention existante, par exemple sdpa, il doit déclarer une nouvelle instance de cette classe dans modeling_<model>.py et la déclarer sur cette instance.

register

< >

( key: strvalue: Callable )

Fonctions de masque d'attention

classe transformers.AttentionMaskInterface

< >

( )

register

< >

( key: strvalue: Callable )

Fonctions d'incorporation de position rotative

transformers.dynamic_rope_update

< >

( rope_forward )

Paramètres

  • rope_forward (Callable) — La passe avant de l’implémentation RoPE.

Fonction décorateur pour mettre à jour les paramètres de RoPE dans le passage avant, si le modèle utilise un RoPE dynamique (c.-à-d. une implémentation de RoPE qui peut recalculer ses fréquences dans le passage avant).

Modules personnalisés PyTorch

classe transformers.Conv1D

< >

( nfnx )

Paramètres

  • nf (int) — Le nombre de caractéristiques de sortie.
  • nx (int) — Le nombre de caractéristiques d'entrée.

Couche de convolution 1D telle que définie par Radford et al. pour OpenAI GPT (et également utilisée dans GPT-2).

Fonctionne essentiellement comme une couche linéaire, mais les poids sont transposés.

Fonctions utilitaires PyTorch

transformers.apply_chunking_to_forward

< >

( forward_fn: Callable[..., torch.Tensor]chunk_size: intchunk_dim: int*input_tensors ) → torch.Tensor

Paramètres

  • forward_fn (Callable[..., torch.Tensor]) — Fonction de propagation avant du modèle.
  • chunk_size (int) — La taille de bloc d'un tenseur par blocs : num_chunks = len(input_tensors[0]) / chunk_size.
  • chunk_dim (int) — La dimension sur laquelle les input_tensors doivent être découpés.
  • input_tensors (tuple[torch.Tensor]) — Les tenseurs d'entrée de forward_fn qui seront fractionnés

Retourne

torch.Tensor

Un tenseur de la même forme que celle que forward_fn aurait renvoyé s'il avait été appliqué`.

Cette fonction découpe les input_tensors en parties de tenseurs d'entrée plus petites de taille chunk_size sur la dimension chunk_dim. Elle applique ensuite la couche forward_fn à chaque fragment de manière indépendante afin d'économiser de la mémoire.

Si forward_fn est indépendant le long de chunk_dim, cette fonction produira le même résultat que l'application directe de forward_fn à input_tensors.

Exemples :

# rename the usual forward() fn to forward_chunk()
def forward_chunk(self, hidden_states):
    hidden_states = self.decoder(hidden_states)
    return hidden_states


# implement a chunked forward function
def forward(self, hidden_states):
    return apply_chunking_to_forward(self.forward_chunk, self.chunk_size_lm_head, self.seq_len_dim, hidden_states)

transformers.pytorch_utils.prune_linear_layer

< >

( layer: nn.Linearindex: torch.LongTensordim: int = 0 ) → torch.nn.Linear

Paramètres

  • layer (torch.nn.Linear) — La couche à élaguer.
  • index (torch.LongTensor) — Les indices à conserver dans la couche.
  • dim (int, facultatif, valeur par défaut 0) — La dimension sur laquelle conserver les indices.

Retourne

torch.nn.Linear

La couche élaguée en tant que nouvelle couche avec requires_grad=True.

Supprimez une couche linéaire pour ne conserver que les entrées de l'index.

Utilisé pour supprimer des têtes.

Update on GitHub