Transformers documentation

Утилиты для 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

Утилиты для Trainer

На этой странице перечислены все вспомогательные функции, используемые в Trainer.

Большинство из них полезны только в том случае, если вы изучаете код класса Trainer в библиотеке.

Утилиты

класс 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 )

Параметры

  • predictions (np.ndarray) — Прогнозы модели.
  • label_ids (np.ndarray) — Целевые значения для сопоставления.
  • inputs (np.ndarray, необязательный) — Входные данные, передаваемые в модель.
  • losses (np.ndarray, необязательный) — Значения потерь, вычисленные во время оценки.

Вывод оценки (всегда содержит метки), используемый для вычисления метрик.

класс transformers.IntervalStrategy

< >

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

transformers.enable_full_determinism

< >

( seed: intwarn_only: bool = False )

Вспомогательная функция для воспроизводимого поведения при распределённом обучении. См. https://pytorch.org/docs/stable/notes/randomness.html для pytorch

transformers.set_seed

< >

( seed: intdeterministic: bool = False )

Параметры

  • seed (int) — Значение seed для установки.
  • deterministic (bool, необязательный, по умолчанию False) — Использовать ли детерминированные алгоритмы, если они доступны. Может замедлить обучение.

Вспомогательная функция для воспроизводимого поведения: устанавливает seed в random, numpy, torch (если установлено).

transformers.torch_distributed_zero_first

< >

( local_rank: int )

Параметры

  • local_rank (int) — Ранг локального процесса.

Декоратор, заставляющий все процессы в распределённом обучении ждать, пока каждый local_master выполнит определённое действие.

Внутреннее устройство колбэков

класс transformers.trainer_callback.CallbackHandler

< >

( callbacksmodelprocessing_classoptimizerlr_scheduler )

Внутренний класс, который просто вызывает список обратных вызовов по порядку.

Парсер аргументов Trainer

класс transformers.HfArgumentParser

< >

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

Параметры

  • dataclass_types (DataClassType или Iterable[DataClassType], необязательный) — Тип dataclass или список типов dataclass, для которых мы будем «заполнять» экземпляры разобранными аргументами.
  • kwargs (dict[str, Any], необязательный) — Передаётся в argparse.ArgumentParser() стандартным способом.

Этот подкласс argparse.ArgumentParser использует аннотации типов в dataclasses для генерации аргументов.

Класс спроектирован для удобной работы с нативным argparse. В частности, после инициализации вы можете добавить в парсер дополнительные аргументы (не поддерживаемые dataclass), и после разбора получите их в виде дополнительного namespace. Необязательно: для создания подгрупп аргументов используйте атрибут _argument_group_name в dataclass.

parse_args_into_dataclasses

< >

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

Параметры

  • args — Список строк для разбора. По умолчанию берётся из sys.argv. (аналогично argparse.ArgumentParser)
  • return_remaining_strings — Если true, также возвращает список оставшихся строковых аргументов.
  • look_for_args_file — Если установлено в true, будет искать файл «.args» с тем же базовым именем, что и сценарий точки входа для этого процесса, и добавлять его возможное содержимое к аргументам командной строки.
  • args_filename — Если не None, используется этот файл вместо файла «.args», указанного в предыдущем аргументе.
  • args_file_flag — Если не None, будет искать файл в аргументах командной строки, указанных с этим флагом. Флаг можно указать несколько раз, а приоритет определяется порядком (последний имеет преимущество).

Возвращает

Кортеж, состоящий из

  • экземпляры dataclass в том же порядке, в котором они были переданы в инициализатор.
  • при необходимости, дополнительное пространство имён для дополнительных (не основанных на dataclass) аргументов, добавляемых в парсер после инициализации.
  • Потенциальный список оставшихся строковых аргументов. (аналогично argparse.ArgumentParser.parse_known_args)

Разобрать аргументы командной строки в экземпляры указанных типов dataclass.

Это опирается на ArgumentParser.parse_known_args из argparse. См. документацию по адресу: docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args

parse_dict

< >

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

Параметры

  • args (dict) — словарь, содержащий значения конфигурации
  • allow_extra_keys (bool, необязательный, по умолчанию False) — По умолчанию False. Если False, будет вызвано исключение, если словарь содержит ключи, которые не были распознаны.

Возвращает

Кортеж, состоящий из

  • экземпляры dataclass в том же порядке, в котором они были переданы в инициализатор.

Альтернативный вспомогательный метод, который вообще не использует argparse, а вместо этого использует словарь и заполняет типы dataclass.

parse_json_file

< >

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

Параметры

  • json_file (str или os.PathLike) — Имя файла JSON для разбора
  • allow_extra_keys (bool, необязательный, по умолчанию False) — По умолчанию False. Если False, будет вызвано исключение, если файл json содержит ключи, которые не обрабатываются.

Возвращает

Кортеж, состоящий из

  • экземпляры dataclass в том же порядке, в котором они были переданы в инициализатор.

Альтернативный вспомогательный метод, который вообще не использует argparse, а вместо этого загружает json-файл и заполняет типы dataclass.

parse_yaml_file

< >

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

Параметры

  • yaml_file (str или os.PathLike) — Имя файла yaml для разбора
  • allow_extra_keys (bool, необязательный, по умолчанию False) — По умолчанию False. Если False, будет вызвано исключение, если файл json содержит ключи, которые не обрабатываются.

Возвращает

Кортеж, состоящий из

  • экземпляры dataclass в том же порядке, в котором они были переданы в инициализатор.

Альтернативный вспомогательный метод, который вообще не использует argparse, а вместо этого загружает файл yaml и заполняет типы dataclass.

Утилиты отладки

класс transformers.debug_utils.DebugUnderflowOverflow

< >

( modelmax_frames_to_save = 21trace_batch_nums = Noneabort_after_batch_num = None )

Параметры

  • model (nn.Module) — Модель, которую нужно отладить.
  • max_frames_to_save (int, необязательный, по умолчанию 21) — Сколько кадров назад записывать
  • trace_batch_nums(list[int], необязательный, по умолчанию []) — Номера батчей для трассировки (отключает обнаружение поворотов)
  • abort_after_batch_num (`int“, optional) — Следует ли прервать выполнение после завершения определённого номера батча

Этот класс отладки помогает обнаружить и понять, где модель начинает получать очень большие или очень малые значения, а что ещё важнее — элементы весов и активаций, равные nan или inf.

Существуют 2 рабочих режима:

  1. Обнаружение переполнения/недополнения (по умолчанию)
  2. Отслеживание абсолютных минимальных/максимальных значений конкретной партии без обнаружения

Режим 1: обнаружение переполнения/недополнения

Для активации обнаружения переполнения/недополнения инициализируйте объект с моделью:

debug_overflow = DebugUnderflowOverflow(model)

затем запустите обучение в обычном режиме, и если nan или inf обнаружится хотя бы в одном из элементов весов, входных или выходных данных, этот модуль выбросит исключение и выведет max_frames_to_save кадров, приведших к этому событию, при этом каждый кадр сообщает

  1. полное имя модуля с указанием имени класса, для которого был выполнен forward
  2. абсолютные минимальное и максимальное значения всех элементов весов каждого модуля, а также входных и выходных данных

Например, ниже приведены заголовок и последние кадры отчёта о детекции для запуска google/mt5-small в fp16

смешанная точность:

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

Здесь видно, что T5DenseGatedGeluDense.forward привело к выходным активациям, максимальное абсолютное значение которых составило около 62,7K, что очень близко к верхнему пределу fp16 в 64K. На следующем кадре мы видим Dropout, который перенормирует веса после обнуления некоторых элементов, что выталкивает максимальное абсолютное значение за пределы 64K, и возникает переполнение.

Как видно, именно предыдущие кадры следует рассматривать, когда значения начинают становиться очень большими для чисел fp16.

Отслеживание выполняется в прямом хуке, который вызывается сразу после завершения forward.

По умолчанию выводятся последние 21 кадр. Вы можете изменить это значение по умолчанию в соответствии со своими потребностями. Например:

debug_overflow = DebugUnderflowOverflow(model, max_frames_to_save=100)

Чтобы убедиться, что вы правильно настроили эту функцию отладки и планируете использовать её в обучении, которое может занять несколько часов, сначала запустите её с обычным трассированием для нескольких батчей, как описано в следующем разделе.

Режим 2. Отслеживание конкретных абсолютных минимальных/максимальных значений батча без обнаружения

Второй режим работы — это трассировка по батчам с отключённой функцией обнаружения переполнения/недополнения.

Допустим, вы хотите отслеживать абсолютные минимальные и максимальные значения для всех компонентов каждого вызова forward

заданной партии, и выполнять это только для партий 1 и 3. Затем вы создаёте экземпляр этого класса как

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

Теперь полные батчи 1 и 3 будут отслеживаться в том же формате, что описан выше. Нумерация батчей начинается с нуля.

Это полезно, если вы знаете, что программа начинает работать некорректно после определённого номера батча, — так вы можете сразу перейти к нужному участку.

Ранняя остановка:

Вы также можете указать номер батча, после которого следует остановить обучение, с помощью :

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

Эта функция в основном полезна в режиме трассировки, но вы можете использовать её в любом режиме.

Производительность:

Поскольку этот модуль измеряет абсолютные min/`max каждого веса модели при каждом прямом проходе, он замедляет обучение. Поэтому не забудьте отключить его, как только необходимость в отладке будет устранена.

Update on GitHub