Transformers documentation
Utilidades para Trainer
Utilidades para Trainer
Esta página enumera todas las funciones de utilidad utilizadas por Trainer.
La mayoría de esos parámetros solo son útiles si estás estudiando el código del Trainer en la biblioteca.
Utilidades
clase 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 )
Salida de evaluación (siempre contiene etiquetas), para usar en el cálculo de métricas.
clase transformers.IntervalStrategy
< source >( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )
Función auxiliar para un comportamiento reproducible durante el entrenamiento distribuido. Consulte https://pytorch.org/docs/stable/notes/randomness.html para pytorch
transformers.set_seed
< source >( seed: intdeterministic: bool = False )
Función auxiliar para un comportamiento reproducible que establece la semilla en random, numpy y torch (si está instalado).
transformers.torch_distributed_zero_first
< source >( local_rank: int )
Decorador para hacer que todos los procesos en el entrenamiento distribuido esperen a que cada local_master realice algo.
Interno de los callbacks
clase transformers.trainer_callback.CallbackHandler
< source >( callbacksmodelprocessing_classoptimizerlr_scheduler )
Clase interna que simplemente llama a la lista de callbacks en orden.
Analizador de argumentos del Trainer
clase transformers.HfArgumentParser
< source >( dataclass_types: typing.Union[transformers.hf_argparser.DataClassType, collections.abc.Iterable[transformers.hf_argparser.DataClassType], NoneType] = None**kwargs )
Esta subclase de argparse.ArgumentParser utiliza las anotaciones de tipo en dataclasses para generar argumentos.
La clase está diseñada para funcionar bien con el argparse nativo. En particular, puedes añadir más argumentos (no respaldados por dataclass) al parser después de la inicialización y obtendrás la salida tras el análisis como un namespace adicional. Opcional: para crear grupos de argumentos secundarios, utiliza el atributo _argument_group_name en el dataclass.
parse_args_into_dataclasses
< source >( args = Nonereturn_remaining_strings = Falselook_for_args_file = Trueargs_filename = Noneargs_file_flag = None ) → Tuple consisting of
Parámetros
- args — Lista de cadenas para analizar. El valor predeterminado se toma de sys.argv. (igual que argparse.ArgumentParser)
- return_remaining_strings — Si es true, también devuelve una lista de las cadenas de argumentos restantes.
- look_for_args_file — Si es true, buscará un archivo “.args” con el mismo nombre base que el script de punto de entrada de este proceso y añadirá su contenido potencial a los argumentos de la línea de comandos.
- args_filename — Si no es None, se usará este archivo en lugar del archivo “.args” especificado en el argumento anterior.
- args_file_flag — Si no es None, buscará un archivo en los argumentos de línea de comandos especificados con esta bandera. La bandera puede especificarse varias veces y la precedencia se determina por el orden (gana la última).
Devuelve
Tupla que consiste en
- las instancias de dataclass en el mismo orden en que se pasaron al inicializador.
- si aplica, un espacio de nombres adicional para más argumentos (no respaldados por dataclass) añadidos al parser después de la inicialización.
- La lista potencial de cadenas de argumentos restantes. (igual que argparse.ArgumentParser.parse_known_args)
Analiza los argumentos de la línea de comandos en instancias de los tipos de dataclass especificados.
Esto se basa en ArgumentParser.parse_known_args de argparse. Consulta la documentación en:
docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args
parse_dict
< source >( args: dictallow_extra_keys: bool = False ) → Tuple consisting of
Parámetros
- args (
dict) — diccionario que contiene los valores de configuración - allow_extra_keys (
bool, opcional, valor predeterminadoFalse) — El valor predeterminado es False. Si es False, se lanzará una excepción si el diccionario contiene claves que no se analizan.
Devuelve
Tupla que consiste en
- las instancias de dataclass en el mismo orden en que se pasaron al inicializador.
Método auxiliar alternativo que no utiliza argparse en absoluto, sino que emplea un diccionario y rellena los tipos de dataclass.
parse_json_file
< source >( json_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
Parámetros
- json_file (
stroos.PathLike) — Nombre del archivo json a analizar - allow_extra_keys (
bool, opcional, valor predeterminadoFalse) — Valor predeterminado: False. Si es False, se lanzará una excepción si el archivo json contiene claves que no se analizan.
Devuelve
Tupla que consiste en
- las instancias de dataclass en el mismo orden en que se pasaron al inicializador.
Método auxiliar alternativo que no utiliza argparse en absoluto, sino que carga un archivo json y rellena los tipos de dataclass.
parse_yaml_file
< source >( yaml_file: str | os.PathLikeallow_extra_keys: bool = False ) → Tuple consisting of
Parámetros
- yaml_file (
stroos.PathLike) — Nombre del archivo yaml a analizar - allow_extra_keys (
bool, opcional, valor predeterminadoFalse) — Valor predeterminado: False. Si es False, se lanzará una excepción si el archivo json contiene claves que no se analizan.
Devuelve
Tupla que consiste en
- las instancias de dataclass en el mismo orden en que se pasaron al inicializador.
Método auxiliar alternativo que no utiliza argparse en absoluto, sino que carga un archivo yaml y rellena los tipos de dataclass.
Utilidades de depuración
clase transformers.debug_utils.DebugUnderflowOverflow
< source >( modelmax_frames_to_save = 21trace_batch_nums = Noneabort_after_batch_num = None )
Parámetros
- model (
nn.Module) — El modelo que se va a depurar. - max_frames_to_save (
int, opcional, valor predeterminado 21) — Número de fotogramas hacia atrás que se deben registrar - trace_batch_nums(
list[int], opcional, por defecto[]) — Números de lote a trazar (desactiva la detección de turnos) - abort_after_batch_num (`int“, opcional) — Si se debe abortar después de que un número determinado de lotes haya finalizado
Esta clase de depuración ayuda a detectar y comprender en qué punto del modelo los valores comienzan a ser muy grandes o muy pequeños, y, lo que es más importante, elementos de pesos y activaciones que son nan o inf.
Hay 2 modos de funcionamiento:
- Detección de desbordamiento/subdesbordamiento (predeterminado)
- Trazado de valores absolutos mínimos/máximos de lotes específicos sin detección
Modo 1: Detección de desbordamiento
Para activar la detección de desbordamiento/underflow, inicialice el objeto con el modelo:
debug_overflow = DebugUnderflowOverflow(model)
luego, ejecute el entrenamiento de forma normal y si se detecta nan o inf en al menos uno de los elementos de peso, entrada o salida, este módulo lanzará una excepción e imprimirá max_frames_to_save fotogramas que condujeron a este evento, donde cada fotograma informa
- el nombre de módulo totalmente cualificado más el nombre de la clase cuyo
forwardse ejecutó - el valor mínimo y máximo absoluto de todos los elementos para los pesos de cada módulo, así como las entradas y salidas
Por ejemplo, aquí se muestra la cabecera y los últimos fotogramas del informe de detección para google/mt5-small ejecutado en fp16
precisión mixta:
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 outputAquí se puede ver que T5DenseGatedGeluDense.forward produjo activaciones de salida cuyo valor máximo absoluto fue de aproximadamente 62,7K, muy cerca del límite superior de fp16 de 64K. En el siguiente fotograma tenemos Dropout, que renormaliza los pesos después de haber puesto a cero algunos de los elementos, lo que empuja el valor máximo absoluto a más de 64K y provoca un desbordamiento.
Como puede ver, son los fotogramas anteriores en los que debemos fijarnos cuando los números comienzan a ser muy grandes para números fp16.
El seguimiento se realiza en un hook de forward, que se invoca inmediatamente después de que forward haya finalizado.
Por defecto, se imprimen los últimos 21 fotogramas. Puedes cambiar el valor predeterminado para ajustarlo a tus necesidades. Por ejemplo:
debug_overflow = DebugUnderflowOverflow(model, max_frames_to_save=100)Para validar que has configurado correctamente esta función de depuración y que tienes la intención de usarla en un entrenamiento que puede tardar horas en completarse, primero ejecútala con el trazado normal habilitado para uno de unos pocos lotes, como se explica en la siguiente sección.
Modo 2. Trazado de valores absolutos mín/máx específicos del lote sin detección
El segundo modo de trabajo es el trazado por lote con la función de detección de desbordamiento/underflow desactivada.
Supongamos que quieres observar los valores absolutos mínimo y máximo de todos los ingredientes de cada llamada a forward de un
dado un lote, y solo hacer eso para los lotes 1 y 3. Luego, instancias esta clase como
debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3])Y ahora los lotes completos 1 y 3 se trazarán utilizando el mismo formato explicado anteriormente. Los lotes tienen índice base 0.
Esto resulta útil si sabes que el programa empieza a fallar después de un número de lote determinado, ya que puedes avanzar directamente hasta esa zona.
Detención temprana:
También puede especificar el número de lote después del cual se detendrá el entrenamiento, con:
debug_overflow = DebugUnderflowOverflow(model, trace_batch_nums=[1, 3], abort_after_batch_num=3)Esta función es principalmente útil en el modo de trazado, pero puedes usarla en cualquier modo.
Rendimiento:
Como este módulo mide el min/`max absoluto de cada peso del modelo en cada paso de propagación hacia adelante, ralentizará el entrenamiento. Por lo tanto, recuerda desactivarlo una vez que se hayan cumplido las necesidades de depuración.