Transformers documentation

Utilitários para o 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

Utilitários para o Trainer

Esta página lista todas as funções utilitárias usadas pelo Trainer.

A maioria delas só é útil se você estiver estudando o código do Trainer na biblioteca.

Utilitários

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 )

Parâmetros

  • predictions (np.ndarray) — Previsões do modelo.
  • label_ids (np.ndarray) — Alvos a serem correspondidos.
  • inputs (np.ndarray, opcional) — Dados de entrada passados para o modelo.
  • losses (np.ndarray, opcional) — Valores de perda calculados durante a avaliação.

Saída de avaliação (sempre contém rótulos), a ser usada para calcular métricas.

classe transformers.IntervalStrategy

< >

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

transformers.enable_full_determinism

< >

( seed: intwarn_only: bool = False )

Função auxiliar para comportamento reprodutível durante o treinamento distribuído. Consulte https://pytorch.org/docs/stable/notes/randomness.html para o PyTorch

transformers.set_seed

< >

( seed: intdeterministic: bool = False )

Parâmetros

  • seed (int) — A semente a ser definida.
  • deterministic (bool, opcional, padrão False) — Se deve usar algoritmos determinísticos quando disponíveis. Pode deixar o treinamento mais lento.

Função auxiliar para comportamento reprodutível, definindo a semente em random, numpy e torch (se instalado).

transformers.torch_distributed_zero_first

< >

( local_rank: int )

Parâmetros

  • local_rank (int) — O rank do processo local.

Decorador para fazer com que todos os processos no treinamento distribuído aguardem cada local_master para executar algo.

Internos dos callbacks

classe transformers.trainer_callback.CallbackHandler

< >

( callbacksmodelprocessing_classoptimizerlr_scheduler )

Classe interna que apenas chama a lista de callbacks em ordem.

Argument Parser do Trainer

classe transformers.HfArgumentParser

< >

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

Parâmetros

  • dataclass_types (DataClassType ou Iterable[DataClassType], opcional) — Tipo de dataclass, ou lista de tipos de dataclass para os quais preencheremos instâncias com os argumentos analisados.
  • kwargs (dict[str, Any], opcional) — Passado para argparse.ArgumentParser() da maneira usual.

Esta subclasse de argparse.ArgumentParser usa type hints em dataclasses para gerar argumentos.

A classe é projetada para funcionar bem com o argparse nativo. Em particular, você pode adicionar mais argumentos (não baseados em dataclass) ao parser após a inicialização e obterá a saída após o parsing como um namespace adicional. Opcional: para criar grupos de subargumentos, use o atributo _argument_group_name no dataclass.

parse_args_into_dataclasses

< >

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

Parâmetros

  • args — Lista de strings para analisar. O valor padrão é obtido de sys.argv. (igual a argparse.ArgumentParser)
  • return_remaining_strings — Se for true, também retorna uma lista das strings de argumentos restantes.
  • look_for_args_file — Se true, procurará um arquivo “.args” com o mesmo nome base que o script de ponto de entrada deste processo e adicionará seu conteúdo potencial aos argumentos da linha de comando.
  • args_filename — Se não for None, usará este arquivo em vez do arquivo “.args” especificado no argumento anterior.
  • args_file_flag — Se não for None, procurará um arquivo nos argumentos de linha de comando especificados com essa flag. A flag pode ser especificada várias vezes e a precedência é determinada pela ordem (a última tem prioridade).

Retorna

Tupla consistindo de

  • as instâncias de dataclass na mesma ordem em que foram passadas para o inicializador.
  • se aplicável, um namespace adicional para mais argumentos (não baseados em dataclass) adicionados ao parser após a inicialização.
  • A lista potencial de strings de argumentos restantes. (igual a argparse.ArgumentParser.parse_known_args)

Analisa os argumentos da linha de comando em instâncias dos tipos de dataclass especificados.

Isso depende do ArgumentParser.parse_known_args do argparse. Consulte a documentação em: docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args

parse_dict

< >

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

Parâmetros

  • args (dict) — dict contendo os valores de configuração
  • allow_extra_keys (bool, opcional, padrão False) — Padrão é False. Se False, uma exceção será lançada se o dict contiver chaves que não são analisadas.

Retorna

Tupla consistindo de

  • as instâncias de dataclass na mesma ordem em que foram passadas para o inicializador.

Método auxiliar alternativo que não usa argparse de forma alguma, em vez disso, usa um dicionário e preenche os tipos de dataclass.

parse_json_file

< >

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

Parâmetros

  • json_file (str ou os.PathLike) — Nome do arquivo json a ser analisado
  • allow_extra_keys (bool, opcional, padrão False) — Padrão é False. Se False, uma exceção será lançada se o arquivo json contiver chaves que não são analisadas.

Retorna

Tupla consistindo de

  • as instâncias de dataclass na mesma ordem em que foram passadas para o inicializador.

Método auxiliar alternativo que não usa argparse de forma alguma, carregando em vez disso um arquivo json e preenchendo os tipos de dataclass.

parse_yaml_file

< >

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

Parâmetros

  • yaml_file (str ou os.PathLike) — Nome do arquivo yaml a ser analisado
  • allow_extra_keys (bool, opcional, padrão False) — Padrão é False. Se False, uma exceção será lançada se o arquivo json contiver chaves que não são analisadas.

Retorna

Tupla consistindo de

  • as instâncias de dataclass na mesma ordem em que foram passadas para o inicializador.

Método auxiliar alternativo que não usa argparse de forma alguma, carregando em vez disso um arquivo yaml e preenchendo os tipos de dataclass.

Utilitários de depuração

classe transformers.debug_utils.DebugUnderflowOverflow

< >

( modelmax_frames_to_save = 21trace_batch_nums = Noneabort_after_batch_num = None )

Parâmetros

  • model (nn.Module) — O modelo a ser depurado.
  • max_frames_to_save (int, opcional, padrão 21) — Quantos frames para trás registrar
  • trace_batch_nums(list[int], opcional, padrão []) — Quais números de lote rastrear (desativa a detecção)
  • abort_after_batch_num (`int“, opcional) — Se deve abortar após a conclusão de um determinado número de lote

Esta classe de depuração ajuda a detectar e compreender onde o modelo começa a ficar muito grande ou muito pequeno e, mais importante, elementos de pesos e ativações nan ou inf.

Há 2 modos de operação:

  1. Detecção de subfluxo/sobrefluxo (padrão)
  2. Rastreamento absoluto de mín./máx. de lote específico sem detecção

Modo 1: Detecção de subfluxo/sobrefluxo

Para ativar a detecção de underflow/overflow, inicialize o objeto com o modelo:

debug_overflow = DebugUnderflowOverflow(model)

em seguida, execute o treinamento normalmente e, se nan ou inf for detectado em pelo menos um dos elementos de peso, entrada ou saída, este módulo lançará uma exceção e exibirá max_frames_to_save quadros que levaram a esse evento, com cada quadro relatando

  1. o nome de módulo totalmente qualificado mais o nome da classe cujo forward foi executado
  2. o valor mínimo e máximo absoluto de todos os elementos para cada peso do módulo, bem como as entradas e a saída

Por exemplo, aqui estão o cabeçalho e os últimos quadros do relatório de detecção para google/mt5-small executado em fp16

precisão mista :

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

Aqui é possível ver que T5DenseGatedGeluDense.forward resultou em ativações de saída cujo valor máximo absoluto foi de aproximadamente 62,7K, muito próximo do limite superior de 64K do fp16. No próximo frame, temos Dropout, que renormaliza os pesos após zerar alguns dos elementos, o que eleva o valor máximo absoluto para mais de 64K, resultando em um estouro.

Como você pode ver, são os quadros anteriores que precisamos examinar quando os números começam a ficar muito grandes para números fp16.

O rastreamento é realizado em um hook de forward, que é acionado imediatamente após a conclusão de forward.

Por padrão, os últimos 21 quadros são exibidos. Você pode alterar o padrão para se adequar às suas necessidades. Por exemplo:

debug_overflow = DebugUnderflowOverflow(model, max_frames_to_save=100)

Para validar que você configurou esse recurso de depuração corretamente e que pretende usá-lo em um treinamento que pode levar horas para ser concluído, execute-o primeiro com o rastreamento normal habilitado para alguns lotes, conforme explicado na próxima seção.

Modo 2. Rastreamento absoluto de min/máx. de lote específico sem detecção

O segundo modo de operação é o rastreamento por lote com o recurso de detecção de underflow/overflow desativado.

Vamos supor que você queira observar os valores absolutos mínimos e máximos de todos os ingredientes de cada chamada forward de um

dado um lote, e faça isso apenas para os lotes 1 e 3. Em seguida, você instancia essa classe como:

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

E agora os lotes completos 1 e 3 serão rastreados usando o mesmo formato explicado acima. Os lotes são indexados a partir de 0.

Isso é útil se você souber que o programa começa a apresentar problemas após um determinado número de lote, pois assim você pode avançar rapidamente até essa região.

Parada antecipada:

Você também pode especificar o número de lote após o qual deseja interromper o treinamento, com:

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

Este recurso é principalmente útil no modo de rastreamento, mas você pode usá-lo em qualquer modo.

Desempenho:

Como este módulo mede o min/`max absoluto de cada peso do modelo a cada forward, ele vai deixar o treinamento mais lento. Portanto, lembre-se de desativá-lo assim que as necessidades de depuração forem atendidas.

Update on GitHub