Transformers documentation
Importation des utilitaires
Importation des utilitaires
Cette page présente les utilitaires de transformers permettant l’importation paresseuse et rapide des objets.
Bien que nous visons un minimum de dépendances, certains modèles ont des exigences de dépendances spécifiques qui ne peuvent pas être contournées. Nous ne voulons pas que tous les utilisateurs de transformers soient obligés d’installer ces dépendances pour utiliser d’autres modèles ; nous les marquons donc comme des dépendances optionnelles plutôt que comme des dépendances obligatoires.
Le kit d’outils transformers n’est pas conçu pour générer une erreur lors de l’importation d’un modèle ayant une dépendance spécifique ; en revanche, un objet pour lequel une dépendance est manquante déclenchera une erreur lors de l’appel de n’importe quelle méthode sur cet objet. À titre d’exemple, si torchvision n’est pas installé, les processeurs d’images rapides ne seront pas disponibles.
Cet objet est toujours importable :
>>> from transformers import DetrImageProcessor
>>> print(DetrImageProcessor)
<class 'transformers.models.detr.image_processing_detr.DetrImageProcessor'>Cependant, les méthodes de cet objet vérifient leurs dépendances facultatives lors de leur appel. Par exemple, si torchvision n'est pas disponible, cet appel lève une ImportError :
>>> DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
ImportError:
DetrImageProcessor requires the Torchvision library but it was not found in your environment. Check out the instructions on the
installation page: https://pytorch.org/get-started/locally/ and follow the ones that match your environment.
Please note that you may need to restart your runtime after installation.Voici comment spécifier des dépendances d’objets spécifiques.
Spécifier les dépendances d'objets
Basé sur le nom de fichier
Tous les objets situés sous un nom de fichier donné ont une dépendance automatique à l'outil lié au nom de fichier
PyTorch : tous les fichiers commençant par modeling_ ont une dépendance automatique à PyTorch
Tokenizers : tous les fichiers commençant par tokenization_ et se terminant par _fast ont une dépendance automatique à tokenizers
Vision : tous les fichiers commençant par image_processing_ ont une dépendance automatique au groupe de dépendances vision ;
à l'heure actuelle, ce groupe ne contient que la dépendance pillow.
Vision + Torch + Torchvision : tous les fichiers commençant par image_processing_ et se terminant par _fast ont une dépendance automatique à vision, torch et torchvision.
Toutes ces dépendances automatiques s'ajoutent aux dépendances explicites détaillées ci-dessous.
Dépendances d'objets explicites
Nous ajoutons une méthode nommée requires qui sert à spécifier explicitement les dépendances d'un objet donné. À titre d'exemple, la classe Trainer possède deux dépendances obligatoires : torch et accelerate. Voici comment nous spécifions ces dépendances requises :
from .utils.import_utils import requires
@requires(backends=("torch", "accelerate"))
class Trainer:
...Les backends qui peuvent être ajoutés ici sont tous les backends disponibles dans le module import_utils.py.
De plus, des versions spécifiques peuvent être indiquées pour chaque backend. Par exemple, voici comment spécifier une exigence sur torch>=2.6 pour la classe Trainer :
from .utils.import_utils import requires
@requires(backends=("torch>=2.6", "accelerate"))
class Trainer:
...Vous pouvez spécifier les opérateurs suivants : ==, >, >=, <, <=, !=.
Méthodes
transformers.utils.import_utils.define_import_structure
( module_path: strprefix: str | None = None )
Cette méthode prend un module_path en entrée et crée une structure d’importation digeste par un _LazyModule.
Voici un exemple de structure d’importation de la sortie au niveau src.transformers.models :
{ frozenset({‘tokenizers’}): { ‘albert.tokenization_albert_fast’: {‘AlbertTokenizer’} }, frozenset(): { ‘albert.configuration_albert’: {‘AlbertConfig’}, ‘align.processing_align’: {‘AlignProcessor’}, ‘align.configuration_align’: {‘AlignConfig’, ‘AlignTextConfig’, ‘AlignVisionConfig’}, ‘altclip.configuration_altclip’: {‘AltCLIPConfig’, ‘AltCLIPTextConfig’, ‘AltCLIPVisionConfig’}, ‘altclip.processing_altclip’: {‘AltCLIPProcessor’} } }
La structure d'importation est un dict défini avec des frozensets comme clés, et des dicts de chaînes vers des ensembles d'objets.
Si prefix n'est pas None, ce préfixe sera ajouté à toutes les clés du dictionnaire renvoyé.
Ce décorateur permet deux choses :
- Attacher un tuple
__backendsà un objet pour voir quels sont les backends nécessaires à son exécution correcte sans l'instantier - La chaîne ‘@requires’ est utilisée pour importer dynamiquement des objets
transformers.requires_backends
< source >( objbackends )
Méthode qui lève automatiquement une exception si les backends spécifiés ne sont pas disponibles. Elle est souvent utilisée lors de la
initialisation afin de garantir que les dépendances requises sont installées :
requires_backends(self, ["torch"])Les backends doivent être définis dans BACKEND_MAPPING, défini dans transformers.utils.import_utils.