Transformers documentation
Пользовательские слои и утилиты
Пользовательские слои и утилиты
На этой странице перечислены все пользовательские слои, используемые библиотекой, а также вспомогательные функции и классы, которые она предоставляет для моделирования.
Большинство из них полезны только в том случае, если вы изучаете код моделей в библиотеке.
WeightRenaming
класс transformers.GroupWeightRename
< source >( source_patterns: list[str]target_patterns: list[str] )
Применяет список парных трансформаций WeightRenaming, активируемых лениво по первому («защитному») исходному шаблону. Используйте это, когда два переименования имеют общее промежуточное имя (например, norm0→norm1 и norm1→norm2), чтобы при загрузке уже преобразованного чекпоинта (в котором есть norm1 и norm2, но нет norm0) переименования не применялись повторно по ошибке.
NOTE: упорядочьте source_patterns так, чтобы тот, который отсутствует в уже сконвертированном чекпоинте,
оказался первым. Словарь состояний итерируется в отсортированном порядке ключей, поэтому защитный паттерн должен
лексикографически быть меньше зависимых паттернов. В противном случае зависимые элементы будут пропущены на первом
проходе и никогда не будут перепроверены.
WeightConverter
класс transformers.WeightConverter
< source >( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )
Операции преобразования
Базовый класс для операций по преобразованию весов.
Разделяет тензор вдоль dim на блоки одинакового размера. Кроме того, num_shards_attribute — это поле конфигурации, которое нужно прочитать, чтобы узнать, на сколько блоков следует разделить тензор. Полезно при конкатенации произвольного количества тензоров.
Соединяет тензоры вдоль dim. Кроме того, при соединении произвольного количества тензоров num_shards_attribute является полем конфигурации, по которому можно определить, сколько тензоров нужно воссоздать при использовании противоположных операций.
Объединяет список тензоров в один тензор вдоль первого измерения. Мы явно определяем этот метод, потому что при использовании EP или TP важно точно понимать, что вы делаете!
Обратная операция к MergeModulelist с явными размерами разбиения для каждой группы.
класс transformers.PermuteForRope
< source >( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )
Применяет перестановку, необходимую для преобразования комплексных весов RoPE в формат с разделёнными sin/cos.
класс transformers.VisionFuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )
Применяет перестановку, необходимую для преобразования комплексных весов RoPE в формат разделённых sin/cos для объединённых QKV.
Аналогично вызову PermuteForRope() + Concatenate(), но позволяет вызывать Permute только для подмножества тензоров, разбитых на блоки.
ПРИМЕЧАНИЕ: эта конвертация применяется только к визуальному бэкбону в мультимодальных моделях, поскольку она проверяет config.vision_config
класс transformers.VisionUnfuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )
Применяет перестановку, необходимую для преобразования комплексных весов RoPE в формат разделённых sin/cos для объединённых QKV.
Аналогично вызову Chunk() + PermuteForRope(), но позволяет вызывать Permute только для подмножества тензоров, разбитых на блоки.
ПРИМЕЧАНИЕ: эта конвертация применяется только к визуальному бэкбону в мультимодальных моделях, поскольку она проверяет config.vision_config
Слои
Базовый класс для слоёв с проверкой градиентов.
Этот класс обеспечивает функциональность контрольных точек градиентов для слоя. По умолчанию контрольные точки градиентов отключены
(gradient_checkpointing = False). При вызове model.set_gradient_checkpointing() контрольные точки градиентов
включаются путём установки gradient_checkpointing = True и назначения функции контрольных точек для _gradient_checkpointing_func.
Важно:
При использовании градиентного чекпоинтинга с use_reentrant=True входные данные, требующие градиентов (например, скрытые состояния),
должны передаваться как позиционные аргументы (*args), а не как именованные, чтобы градиенты корректно распространялись.
Функции внимания
Объект, похожий на словарь, который отслеживает разрешённые функции внимания. Вы можете легко добавить новую функцию внимания с помощью вызова register(). Если модели необходимо локально переопределить существующую функцию внимания, например sdpa, ей нужно объявить новый экземпляр этого класса внутри modeling_<model>.py и объявить её на этом экземпляре.
Функции маски внимания
Функции встраивания позиционных признаков с ротацией
transformers.dynamic_rope_update
< source >( rope_forward )
Функция-декоратор для обновления параметров RoPE в прямом проходе, если модель использует динамический RoPE (то есть реализацию RoPE, которая может пересчитывать свои частоты в прямом проходе).
Пользовательские модули PyTorch
класс transformers.Conv1D
< source >( nfnx )
1D-свёрточный слой, определённый Radford et al. для OpenAI GPT (также используется в GPT-2).
По сути, работает как линейный слой, но веса транспонированы.
Вспомогательные функции PyTorch
transformers.apply_chunking_to_forward
< source >( 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
< source >( layer: nn.Linearindex: torch.LongTensordim: int = 0 ) → torch.nn.Linear
Обрезать линейный слой, сохранив только элементы из index.
Используется для удаления головок.