Transformers documentation

Пользовательские слои и утилиты

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

Пользовательские слои и утилиты

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

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

WeightRenaming

класс transformers.GroupWeightRename

< >

( source_patterns: list[str]target_patterns: list[str] )

Применяет список парных трансформаций WeightRenaming, активируемых лениво по первому («защитному») исходному шаблону. Используйте это, когда два переименования имеют общее промежуточное имя (например, norm0→norm1 и norm1→norm2), чтобы при загрузке уже преобразованного чекпоинта (в котором есть norm1 и norm2, но нет norm0) переименования не применялись повторно по ошибке.

NOTE: упорядочьте source_patterns так, чтобы тот, который отсутствует в уже сконвертированном чекпоинте, оказался первым. Словарь состояний итерируется в отсортированном порядке ключей, поэтому защитный паттерн должен лексикографически быть меньше зависимых паттернов. В противном случае зависимые элементы будут пропущены на первом проходе и никогда не будут перепроверены.

WeightConverter

класс transformers.WeightConverter

< >

( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )

Операции преобразования

класс transformers.ConversionOps

< >

( )

Базовый класс для операций по преобразованию весов.

класс transformers.Chunk

< >

( dim: int = 0num_shards_attribute: str | None = None )

Разделяет тензор вдоль dim на блоки одинакового размера. Кроме того, num_shards_attribute — это поле конфигурации, которое нужно прочитать, чтобы узнать, на сколько блоков следует разделить тензор. Полезно при конкатенации произвольного количества тензоров.

класс transformers.Concatenate

< >

( dim: int = 0num_shards_attribute: str | None = None )

Соединяет тензоры вдоль dim. Кроме того, при соединении произвольного количества тензоров num_shards_attribute является полем конфигурации, по которому можно определить, сколько тензоров нужно воссоздать при использовании противоположных операций.

класс transformers.MergeModulelist

< >

( dim: int = 0 )

Объединяет список тензоров в один тензор вдоль первого измерения. Мы явно определяем этот метод, потому что при использовании EP или TP важно точно понимать, что вы делаете!

класс transformers.SplitModulelist

< >

( dim: int = 0 )

Обратная операция к MergeModulelist с явными размерами разбиения для каждой группы.

класс transformers.PermuteForRope

< >

( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )

Применяет перестановку, необходимую для преобразования комплексных весов RoPE в формат с разделёнными sin/cos.

класс transformers.VisionFuseAndPermuteForRope

< >

( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )

Применяет перестановку, необходимую для преобразования комплексных весов RoPE в формат разделённых sin/cos для объединённых QKV. Аналогично вызову PermuteForRope() + Concatenate(), но позволяет вызывать Permute только для подмножества тензоров, разбитых на блоки.

ПРИМЕЧАНИЕ: эта конвертация применяется только к визуальному бэкбону в мультимодальных моделях, поскольку она проверяет config.vision_config

класс transformers.VisionUnfuseAndPermuteForRope

< >

( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )

Применяет перестановку, необходимую для преобразования комплексных весов RoPE в формат разделённых sin/cos для объединённых QKV. Аналогично вызову Chunk() + PermuteForRope(), но позволяет вызывать Permute только для подмножества тензоров, разбитых на блоки.

ПРИМЕЧАНИЕ: эта конвертация применяется только к визуальному бэкбону в мультимодальных моделях, поскольку она проверяет config.vision_config

Слои

класс transformers.GradientCheckpointingLayer

< >

( *args**kwargs )

Базовый класс для слоёв с проверкой градиентов.

Этот класс обеспечивает функциональность контрольных точек градиентов для слоя. По умолчанию контрольные точки градиентов отключены (gradient_checkpointing = False). При вызове model.set_gradient_checkpointing() контрольные точки градиентов включаются путём установки gradient_checkpointing = True и назначения функции контрольных точек для _gradient_checkpointing_func.

Важно:

При использовании градиентного чекпоинтинга с use_reentrant=True входные данные, требующие градиентов (например, скрытые состояния), должны передаваться как позиционные аргументы (*args), а не как именованные, чтобы градиенты корректно распространялись.

Пример:

>>> # Correct - hidden_states passed as positional arg
>>> out = self.layer(hidden_states, attention_mask=attention_mask)

>>> # Incorrect - hidden_states passed as keyword arg
>>> out = self.layer(hidden_states=hidden_states, attention_mask=attention_mask)

Функции внимания

класс transformers.AttentionInterface

< >

( )

Объект, похожий на словарь, который отслеживает разрешённые функции внимания. Вы можете легко добавить новую функцию внимания с помощью вызова register(). Если модели необходимо локально переопределить существующую функцию внимания, например sdpa, ей нужно объявить новый экземпляр этого класса внутри modeling_<model>.py и объявить её на этом экземпляре.

register

< >

( key: strvalue: Callable )

Функции маски внимания

класс transformers.AttentionMaskInterface

< >

( )

register

< >

( key: strvalue: Callable )

Функции встраивания позиционных признаков с ротацией

transformers.dynamic_rope_update

< >

( rope_forward )

Параметры

  • rope_forward (Callable) — Прямой проход реализации RoPE.

Функция-декоратор для обновления параметров RoPE в прямом проходе, если модель использует динамический RoPE (то есть реализацию RoPE, которая может пересчитывать свои частоты в прямом проходе).

Пользовательские модули PyTorch

класс transformers.Conv1D

< >

( nfnx )

Параметры

  • nf (int) — количество выходных признаков.
  • nx (int) — количество входных признаков.

1D-свёрточный слой, определённый Radford et al. для OpenAI GPT (также используется в GPT-2).

По сути, работает как линейный слой, но веса транспонированы.

Вспомогательные функции PyTorch

transformers.apply_chunking_to_forward

< >

( forward_fn: Callable[..., torch.Tensor]chunk_size: intchunk_dim: int*input_tensors ) → torch.Tensor

Параметры

  • forward_fn (Callable[..., torch.Tensor]) — Функция прямого прохода модели.
  • chunk_size (int) — Размер блока для тензора, разбитого на блоки: num_chunks = len(input_tensors[0]) / chunk_size.
  • chunk_dim (int) — Размерность, по которой следует разбивать input_tensors на блоки.
  • input_tensors (tuple[torch.Tensor]) — Входные тензоры forward_fn, которые будут разбиты на части

Возвращает

torch.Tensor

Тензор с той же формой, которую дал бы forward_fn, если бы был применён`.

Эта функция разбивает input_tensors на более мелкие части входных тензоров размера chunk_size вдоль измерения chunk_dim. Затем она независимо применяет слой forward_fn к каждому фрагменту для экономии памяти.

Если forward_fn независима по chunk_dim, эта функция даст тот же результат, что и прямое применение forward_fn к input_tensors.

Примеры:

# rename the usual forward() fn to forward_chunk()
def forward_chunk(self, hidden_states):
    hidden_states = self.decoder(hidden_states)
    return hidden_states


# implement a chunked forward function
def forward(self, hidden_states):
    return apply_chunking_to_forward(self.forward_chunk, self.chunk_size_lm_head, self.seq_len_dim, hidden_states)

transformers.pytorch_utils.prune_linear_layer

< >

( layer: nn.Linearindex: torch.LongTensordim: int = 0 ) → torch.nn.Linear

Параметры

  • layer (torch.nn.Linear) — Слой, подлежащий прунингу.
  • index (torch.LongTensor) — Индексы, которые нужно сохранить в слое.
  • dim (int, необязательный, по умолчанию 0) — размерность, по которой сохраняются индексы.

Возвращает

torch.nn.Linear

Обрезанный слой как новый слой с requires_grad=True.

Обрезать линейный слой, сохранив только элементы из index.

Используется для удаления головок.

Update on GitHub