Transformers documentation
Utilitaires pour Trainer
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
< source >( 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 )
Sortie d'évaluation (contient toujours des étiquettes), à utiliser pour calculer les métriques.
classe transformers.IntervalStrategy
< source >( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )
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
< source >( seed: intdeterministic: bool = False )
Fonction utilitaire pour un comportement reproductible afin de définir la graine dans random, numpy, torch (si installé).
transformers.torch_distributed_zero_first
< source >( local_rank: int )
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
< source >( callbacksmodelprocessing_classoptimizerlr_scheduler )
Classe interne qui se contente d’appeler la liste de rappels dans l’ordre.
Argument Parser du Trainer
classe transformers.HfArgumentParser
< source >( dataclass_types: typing.Union[transformers.hf_argparser.DataClassType, collections.abc.Iterable[transformers.hf_argparser.DataClassType], NoneType] = None**kwargs )
Paramètres
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
< source >( 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
< source >( 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éfautFalse) — 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
< source >( json_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
Paramètres
- json_file (
strouos.PathLike) — Nom du fichier json à analyser - allow_extra_keys (
bool, facultatif, valeur par défautFalse) — 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
< source >( yaml_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
Paramètres
- yaml_file (
strouos.PathLike) — Nom du fichier yaml à analyser - allow_extra_keys (
bool, facultatif, valeur par défautFalse) — 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
< source >( 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 :
- Détection de sous-débordement/débordement (par défaut)
- 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
- le nom de module entièrement qualifié suivi du nom de la classe dont
forwarda été exécuté - 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 outputOn 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.