Transformers documentation

Utilitaires pour Trainer

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

Utilitaires pour Trainer

Cette page répertorie toutes les fonctions utilitaires utilisées par Trainer.

La plupart de ces éléments ne sont utiles que si vous étudiez le code du Trainer dans la bibliothèque.

Utilitaires

classe transformers.EvalPrediction

< >

( predictions: numpy.ndarray | tuple[numpy.ndarray]label_ids: numpy.ndarray | tuple[numpy.ndarray]inputs: numpy.ndarray | tuple[numpy.ndarray] | None = Nonelosses: numpy.ndarray | tuple[numpy.ndarray] | None = None )

Paramètres

  • predictions (np.ndarray) — Prédications du modèle.
  • label_ids (np.ndarray) — Cibles à correspondre.
  • inputs (np.ndarray, facultatif) — Données d'entrée transmises au modèle.
  • losses (np.ndarray, facultatif) — Valeurs de perte calculées lors de l'évaluation.

Sortie d'évaluation (contient toujours des étiquettes), à utiliser pour calculer les métriques.

classe transformers.IntervalStrategy

< >

( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )

transformers.enable_full_determinism

< >

( seed: intwarn_only: bool = False )

Fonction utilitaire pour un comportement reproductible lors de l'entraînement distribué. Voir https://pytorch.org/docs/stable/notes/randomness.html pour pytorch

transformers.set_seed

< >

( seed: intdeterministic: bool = False )

Paramètres

  • seed (int) — La graine à définir.
  • deterministic (bool, facultatif, par défaut False) — Indique s'il faut utiliser des algorithmes déterministes lorsque ceux-ci sont disponibles. Peut ralentir l'entraînement.

Fonction utilitaire pour un comportement reproductible afin de définir la graine dans random, numpy, torch (si installé).

transformers.torch_distributed_zero_first

< >

( local_rank: int )

Paramètres

  • local_rank (int) — Le rang du processus local.

Décorateur pour faire attendre tous les processus de l'entraînement distribué que chaque local_master fasse quelque chose.

Intérieurs des callbacks

classe transformers.trainer_callback.CallbackHandler

< >

( callbacksmodelprocessing_classoptimizerlr_scheduler )

Classe interne qui se contente d’appeler la liste de rappels dans l’ordre.

Argument Parser du Trainer

classe transformers.HfArgumentParser

< >

( dataclass_types: typing.Union[transformers.hf_argparser.DataClassType, collections.abc.Iterable[transformers.hf_argparser.DataClassType], NoneType] = None**kwargs )

Paramètres

  • dataclass_types (DataClassType ou Iterable[DataClassType], facultatif) — Type de dataclass, ou liste de types de dataclass pour lesquels nous « remplirons » les instances avec les arguments analysés.
  • kwargs (dict[str, Any], facultatif) — Transmis à argparse.ArgumentParser() de manière standard.

Cette sous-classe de argparse.ArgumentParser utilise les annotations de type des dataclasses pour générer les arguments.

The class is designed to play well with the native argparse. In particular, you can add more (non-dataclass backed) arguments to the parser after initialization and you’ll get the output back after parsing as an additional namespace. Optional: To create sub argument groups use the _argument_group_name attribute in the dataclass.

parse_args_into_dataclasses

< >

( args = Nonereturn_remaining_strings = Falselook_for_args_file = Trueargs_filename = Noneargs_file_flag = None ) → Tuple consisting of

Paramètres

  • args — Liste de chaînes à analyser. La valeur par défaut est prise dans sys.argv. (identique à argparse.ArgumentParser)
  • return_remaining_strings — Si true, renvoie également une liste des chaînes d'arguments restantes.
  • look_for_args_file — Si défini sur true, recherche un fichier « .args » portant le même nom de base que le script de point d’entrée de ce processus, et ajoute son contenu éventuel aux arguments de la ligne de commande.
  • args_filename — Si la valeur n'est pas None, ce fichier est utilisé à la place du fichier « .args » spécifié dans l'argument précédent.
  • args_file_flag — Si la valeur n’est pas None, un fichier sera recherché parmi les arguments de la ligne de commande spécifiés avec cet indicateur. L’indicateur peut être spécifié plusieurs fois et la priorité est déterminée par l’ordre (le dernier l’emporte).

Retourne

Tuple composé de

  • les instances de dataclass dans le même ordre que celui dans lequel elles ont été transmises à l'initialiseur.
  • le cas échéant, un espace de noms supplémentaire pour d'autres arguments (non basés sur des dataclasses) ajoutés à l'analyseur après l'initialisation.
  • La liste potentielle des chaînes d'arguments restantes. (identique à argparse.ArgumentParser.parse_known_args)

Analyser les arguments de la ligne de commande en instances des types de dataclass spécifiés.

Cela repose sur ArgumentParser.parse_known_args d’argparse. Consultez la documentation à l’adresse : docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args

parse_dict

< >

( args: dictallow_extra_keys: bool = False ) → Tuple consisting of

Paramètres

  • args (dict) — dictionnaire contenant les valeurs de configuration
  • allow_extra_keys (bool, facultatif, valeur par défaut False) — Valeur par défaut : False. Si False, une exception est levée si le dictionnaire contient des clés qui ne sont pas analysées.

Retourne

Tuple composé de

  • les instances de dataclass dans le même ordre que celui dans lequel elles ont été transmises à l'initialiseur.

Méthode d’assistance alternative qui n’utilise pas du tout argparse, mais plutôt un dictionnaire et le remplissage des types de dataclass.

parse_json_file

< >

( json_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of

Paramètres

  • json_file (str ou os.PathLike) — Nom du fichier json à analyser
  • allow_extra_keys (bool, facultatif, valeur par défaut False) — Valeur par défaut : False. Si False, une exception est levée si le fichier json contient des clés qui ne sont pas analysées.

Retourne

Tuple composé de

  • les instances de dataclass dans le même ordre que celui dans lequel elles ont été transmises à l'initialiseur.

Méthode d’assistance alternative qui n’utilise pas du tout argparse, chargeant à la place un fichier json et remplissant les types de dataclass.

parse_yaml_file

< >

( yaml_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of

Paramètres

  • yaml_file (str ou os.PathLike) — Nom du fichier yaml à analyser
  • allow_extra_keys (bool, facultatif, valeur par défaut False) — Valeur par défaut : False. Si False, une exception est levée si le fichier json contient des clés qui ne sont pas analysées.

Retourne

Tuple composé de

  • les instances de dataclass dans le même ordre que celui dans lequel elles ont été transmises à l'initialiseur.

Méthode d’assistance alternative qui n’utilise pas du tout argparse, chargeant à la place un fichier yaml et remplissant les types de dataclass.

Utilitaires de débogage

classe transformers.debug_utils.DebugUnderflowOverflow

< >

( modelmax_frames_to_save = 21trace_batch_nums = Noneabort_after_batch_num = None )

Paramètres

  • model (nn.Module) — Le modèle à déboguer.
  • max_frames_to_save (int, facultatif, valeur par défaut 21) — Nombre de frames à enregistrer en arrière
  • trace_batch_nums(list[int], facultatif, par défaut []) — Numéros de lots à tracer (désactive la détection)
  • abort_after_batch_num (`int“, facultatif) — Indique s'il faut interrompre l'exécution après la fin d'un certain numéro de lot

Cette classe de débogage aide à détecter et à comprendre où le modèle commence à prendre des valeurs très grandes ou très petites, et plus important encore, où apparaissent des éléments de poids et d'activation nan ou inf.

Il existe 2 modes de fonctionnement :

  1. Détection de sous-débordement/débordement (par défaut)
  2. Suivi des valeurs absolues minimales/maximales par lot spécifique sans détection

Mode 1 : Détection de sous-débordement/débordement

Pour activer la détection du sous-débordement/débordement, initialisez l'objet avec le modèle :

debug_overflow = DebugUnderflowOverflow(model)

puis lancez l’entraînement comme d’habitude et si nan ou inf est détecté dans au moins un des éléments de poids, d’entrée ou de sortie, ce module lèvera une exception et affichera max_frames_to_save images menant à cet événement, chaque image signalant

  1. le nom de module entièrement qualifié suivi du nom de la classe dont forward a été exécuté
  2. la valeur minimale et maximale absolue de tous les éléments pour les poids de chaque module, ainsi que les entrées et la sortie

Par exemple, voici l’en-tête et les dernières images du rapport de détection pour google/mt5-small exécuté en fp16

précision mixte :

Detected inf/nan during batch_number=0
Last 21 forward frames:
abs min  abs max  metadata
[...]
                  encoder.block.2.layer.1.DenseReluDense.wi_0 Linear
2.17e-07 4.50e+00 weight
1.79e-06 4.65e+00 input[0]
2.68e-06 3.70e+01 output
                  encoder.block.2.layer.1.DenseReluDense.wi_1 Linear
8.08e-07 2.66e+01 weight
1.79e-06 4.65e+00 input[0]
1.27e-04 2.37e+02 output
                  encoder.block.2.layer.1.DenseReluDense.wo Linear
1.01e-06 6.44e+00 weight
0.00e+00 9.74e+03 input[0]
3.18e-04 6.27e+04 output
                  encoder.block.2.layer.1.DenseReluDense T5DenseGatedGeluDense
1.79e-06 4.65e+00 input[0]
3.18e-04 6.27e+04 output
                  encoder.block.2.layer.1.dropout Dropout
3.18e-04 6.27e+04 input[0]
0.00e+00      inf output

On peut voir ici que T5DenseGatedGeluDense.forward a produit des activations de sortie dont la valeur absolue maximale était d’environ 62,7K, ce qui est très proche de la limite supérieure de 64K de fp16. Dans le frame suivant, nous avons Dropout qui renormalise les poids après avoir mis à zéro certains éléments, ce qui pousse la valeur absolue maximale au-delà de 64K, et nous obtenons un dépassement.

Comme vous pouvez le constater, ce sont les images précédentes qu’il faut examiner lorsque les nombres commencent à devenir très grands pour les nombres fp16.

Le suivi est effectué dans un hook avant, qui est appelé immédiatement après l'achèvement de forward.

Par défaut, les 21 dernières images sont affichées. Vous pouvez modifier la valeur par défaut pour l’adapter à vos besoins. Par exemple :

debug_overflow = DebugUnderflowOverflow(model, max_frames_to_save=100)

Pour valider que vous avez correctement configuré cette fonctionnalité de débogage et que vous comptez l’utiliser lors d’un entraînement susceptible de prendre des heures, exécutez-la d’abord avec le traçage normal activé pour quelques lots, comme expliqué dans la section suivante.

Mode 2. Suivi des valeurs absolues minimales/maximales par lot spécifique sans détection

Le deuxième mode de fonctionnement est le traçage par lot, avec la fonctionnalité de détection du sous-débordement/débordement désactivée.

Supposons que vous souhaitiez surveiller les valeurs absolues minimales et maximales de tous les ingrédients de chaque appel forward d'un

donné par lot, et ne le faire que pour les lots 1 et 3. Ensuite, vous instanciez cette classe comme suit :

debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3])

Et maintenant, les lots complets 1 et 3 seront tracés en utilisant le même format que celui expliqué ci-dessus. Les lots sont indexés à partir de 0.

Cela est utile si vous savez que le programme commence à se comporter de manière inattendue après un certain numéro de lot, car vous pouvez alors avancer directement à cet endroit.

Arrêt anticipé :

Vous pouvez également spécifier le numéro de lot après lequel arrêter l’entraînement, avec :

debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3], abort_after_batch_num=3)

Cette fonctionnalité est principalement utile en mode de traçage, mais vous pouvez l'utiliser dans n'importe quel mode.

Performance :

Comme ce module mesure les valeurs absolues min/`max de chaque poids du modèle à chaque passe avant, il ralentira l’entraînement. Pensez donc à le désactiver une fois les besoins de débogage satisfaits.

Update on GitHub