Transformers documentation
Couches et utilitaires personnalisés
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 >( 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 >( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )
Opérations de conversion
Classe de base pour les opérations de conversion de poids.
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.
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.
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 !
Inverse de MergeModulelist utilisant des tailles de scission explicites par groupe.
classe transformers.PermuteForRope
< source >( 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
< source >( 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
< source >( 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 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.
Fonctions d'attention
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.
Fonctions de masque d'attention
Fonctions d'incorporation de position rotative
transformers.dynamic_rope_update
< source >( rope_forward )
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
< source >( nfnx )
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
< source >( 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 lesinput_tensorsdoivent être découpés. - input_tensors (
tuple[torch.Tensor]) — Les tenseurs d'entrée deforward_fnqui 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
< source >( 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.