Transformers documentation
Camadas e utilitários personalizados
Camadas e utilitários personalizados
Esta página lista todas as camadas personalizadas usadas pela biblioteca, bem como as funções e classes utilitárias que ela fornece para modelagem.
A maioria delas só é útil se você estiver estudando o código dos modelos da biblioteca.
WeightRenaming
classe transformers.GroupWeightRename
< source >( source_patterns: list[str]target_patterns: list[str] )
Aplica uma lista de transforms de WeightRenaming em pares, ativados de forma preguiçosa pelo primeiro padrão de origem ("guard"). Use isso quando dois renames compartilham um nome intermediário (por exemplo, norm0→norm1 e norm1→norm2) para que a carga de um checkpoint já convertido (que possui norm1 e norm2, mas não norm0) não re aplique incorretamente os renames.
OBSERVAÇÃO: ordene source_patterns de modo que o padrão ausente em um checkpoint já convertido apareça primeiro. O state dict é iterado em ordem alfabética das chaves, portanto o padrão de guarda deve ser lexicograficamente menor que os padrões dependentes. Caso contrário, os dependentes serão ignorados na primeira passagem e nunca serão reprocessados.
WeightConverter
classe transformers.WeightConverter
< source >( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )
Operações de conversão
Classe base para operações de conversão de pesos.
Divide um tensor ao longo de dim em blocos de tamanho igual. Além disso, num_shards_attribute é um campo de configuração para ler
e saber em quantos blocos dividir os tensors. Útil ao concatenar um número arbitrário de tensors.
Concatene tensores ao longo de dim. Além disso, ao concatenar um número arbitrário de tensores, num_shards_attribute é
um campo de configuração a ser lido para saber quantos tensores recriar ao usar as Ops opostas.
Mesclar uma lista de tensores em um único tensor ao longo da primeira dimensão. Definimos isso explicitamente porque, para EP ou TP, você precisa ter certeza de que sabe o que está fazendo!
Inverso de MergeModulelist usando tamanhos de divisão explícitos por grupo.
classe transformers.PermuteForRope
< source >( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )
Aplica a permutação necessária para converter os pesos complexos do RoPE para o formato dividido em sin/cos.
classe transformers.VisionFuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )
Aplica a permutação necessária para converter os pesos complexos do RoPE para o formato de sin/cos separados em QKV fundido.
É o mesmo que chamar PermuteForRope() + Concatenate(), mas permite chamar Permute apenas em um subconjunto de tensores em blocos.
OBSERVAÇÃO: essa conversão se aplica apenas a um backbone de visão em modelos multimodais, pois verifica config.vision_config
classe transformers.VisionUnfuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )
Aplica a permutação necessária para converter os pesos complexos do RoPE para o formato de sin/cos separados em QKV fundido.
É o mesmo que chamar Chunk() + PermuteForRope(), mas permite chamar Permute apenas em um subconjunto de tensores em blocos.
OBSERVAÇÃO: essa conversão se aplica apenas a um backbone de visão em modelos multimodais, pois verifica config.vision_config
Camadas
Classe base para camadas com checkpointing de gradiente.
Esta classe habilita a funcionalidade de gradient checkpointing para uma camada. Por padrão, o gradient checkpointing está desativado (gradient_checkpointing = False). Quando model.set_gradient_checkpointing() é chamado, o gradient checkpointing é ativado ao definir gradient_checkpointing = True e atribuir uma função de checkpointing a _gradient_checkpointing_func.
Importante:
Ao usar gradient checkpointing com use_reentrant=True, as entradas que exigem gradientes (por exemplo, hidden states)
devem ser passadas como argumentos posicionais (*args) em vez de argumentos por palavra-chave para propagar os gradientes corretamente.
Funções de Atenção
Objeto semelhante a um dicionário que mantém o controle das funções de atenção permitidas. Você pode adicionar facilmente uma nova função de atenção com uma chamada para register(). Se um modelo precisar sobrescrever localmente uma função de atenção existente, por exemplo sdpa, ele precisa declarar uma nova instância desta classe dentro do modeling_<model>.py e declará-la nessa instância.
Funções de Máscara de Atenção
Funções de incorporação de posição rotativa
transformers.dynamic_rope_update
< source >( rope_forward )
Função decoradora para atualizar os parâmetros do RoPE na passagem direta, caso o modelo esteja usando um RoPE dinâmico (ou seja, uma implementação de RoPE que pode recalcular suas frequências na passagem direta).
Módulos personalizados do Pytorch
classe transformers.Conv1D
< source >( nfnx )
Camada de convolução 1D definida por Radford et al. para o OpenAI GPT (e também utilizada no GPT-2).
Basicamente, funciona como uma camada linear, mas os pesos são transpostos.
Funções auxiliares do PyTorch
transformers.apply_chunking_to_forward
< source >( forward_fn: Callable[..., torch.Tensor]chunk_size: intchunk_dim: int*input_tensors ) → torch.Tensor
Parâmetros
- forward_fn (
Callable[..., torch.Tensor]) — A função de forward do modelo. - chunk_size (
int) — O tamanho do bloco de um tensor em blocos:num_chunks = len(input_tensors[0]) / chunk_size. - chunk_dim (
int) — A dimensão ao longo da qual osinput_tensorsdevem ser divididos em blocos. - input_tensors (
tuple[torch.Tensor]) — Os tensores de entrada deforward_fnque serão divididos em blocos
Retorna
torch.Tensor
Um tensor com a mesma forma que o forward_fn teria fornecido se fosse aplicado`.
Esta função divide o input_tensors em partes menores de tamanho chunk_size ao longo da dimensão chunk_dim. Em seguida, aplica a camada forward_fn a cada parte de forma independente para economizar memória.
Se o forward_fn for independente ao longo do chunk_dim, esta função produzirá o mesmo resultado que a aplicação direta de forward_fn a input_tensors.
Exemplos:
# 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
Prune uma camada linear para manter apenas as entradas em index.
Usado para remover cabeças.