Transformers documentation
Capas y utilidades personalizadas
Capas y utilidades personalizadas
Esta página enumera todas las capas personalizadas que utiliza la biblioteca, así como las funciones y clases de utilidad que proporciona para el modelado.
La mayoría de ellas solo son útiles si estás estudiando el código de los modelos de la biblioteca.
WeightRenaming
clase transformers.GroupWeightRename
< source >( source_patterns: list[str]target_patterns: list[str] )
Aplica una lista de transformaciones de WeightRenaming emparejadas, activadas de forma perezosa por el primer patrón de origen (“guard”). Utilice esto cuando dos renombramientos compartan un nombre intermedio (p. ej. norm0→norm1 y norm1→norm2) para que la carga de un checkpoint ya convertido (que tiene norm1 y norm2 pero no norm0) no vuelva a aplicar incorrectamente los renombramientos.
NOTA: ordene source_patterns de modo que el que no está presente en un checkpoint ya convertido aparezca primero. El state dict se itera en orden de claves ordenado, por lo que el patrón de guarda debe ser lexicográficamente menor que los patrones dependientes. De lo contrario, los dependientes se omitirán en el primer paso y nunca se reintentarán.
WeightConverter
clase transformers.WeightConverter
< source >( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )
Operaciones de conversión
Clase base para operaciones de conversión de pesos.
Divide un tensor a lo largo de dim en fragmentos de tamaño igual. Además, num_shards_attribute es un campo de configuración para leer y saber en cuántos fragmentos dividir los tensores. Útil al concatenar un número arbitrario de tensores.
Concatena tensores a lo largo de dim. Además, si se concatenan un número arbitrario de tensores, num_shards_attribute es un campo de configuración que se lee para saber cuántos tensores recrear al usar las operaciones opuestas.
Fusiona una lista de tensores en un solo tensor a lo largo de la primera dimensión. Definimos esto explícitamente porque, para EP o TP, ¡quieres asegurarte de saber lo que estás haciendo!
Inverso de MergeModulelist usando tamaños de división explícitos por grupo.
clase transformers.PermuteForRope
< source >( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )
Aplica la permutación necesaria para convertir los pesos complejos de RoPE al formato dividido en sin/cos.
clase transformers.VisionFuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )
Aplica la permutación necesaria para convertir los pesos complejos de RoPE al formato de sin/cos dividido en QKV fusionado.
Es lo mismo que llamar a PermuteForRope() + Concatenate(), pero nos permite llamar a Permute solo en un subconjunto de tensores fragmentados.
NOTA: esta conversión se aplica solo a un backbone de visión en modelos multimodales, porque comprueba config.vision_config
clase transformers.VisionUnfuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )
Aplica la permutación necesaria para convertir los pesos complejos de RoPE al formato dividido sin/cos en QKV fusionado.
Es lo mismo que llamar a Chunk() + PermuteForRope(), pero nos permite llamar a Permute solo en un subconjunto de tensores segmentados.
NOTA: esta conversión se aplica solo a un backbone de visión en modelos multimodales, porque comprueba config.vision_config
Capas
Clase base para capas con punto de control de gradiente.
Esta clase habilita la funcionalidad de gradient checkpointing para una capa. De forma predeterminada, el gradient checkpointing está desactivado
(gradient_checkpointing = False). Cuando se llama a model.set_gradient_checkpointing(), el gradient checkpointing se
activa al establecer gradient_checkpointing = True y asignar una función de checkpointing a _gradient_checkpointing_func.
Importante:
Al usar gradient checkpointing con use_reentrant=True, las entradas que requieren gradientes (p. ej., hidden states)
deben pasarse como argumentos posicionales (*args) en lugar de argumentos por palabra clave para propagar los gradientes correctamente.
Funciones de atención
Objeto tipo diccionario que mantiene un registro de las funciones de atención permitidas. Puede agregar fácilmente una nueva función de atención con una llamada a register(). Si un modelo necesita sobrescribir localmente una función de atención existente, por ejemplo sdpa, debe declarar una nueva instancia de esta clase dentro de modeling_<model>.py y declararla en esa instancia.
Funciones de máscara de atención
Funciones de incrustación de posición rotacional
transformers.dynamic_rope_update
< source >( rope_forward )
Función decoradora para actualizar los parámetros de RoPE en la pasada hacia adelante, si el modelo está utilizando un RoPE dinámico (es decir, una implementación de RoPE que puede recalcular sus frecuencias en la pasada hacia adelante).
Módulos personalizados de Pytorch
clase transformers.Conv1D
< source >( nfnx )
Capa de convolución 1D definida por Radford et al. para OpenAI GPT (y también utilizada en GPT-2).
Básicamente funciona como una capa lineal, pero los pesos están transpuestos.
Funciones auxiliares de 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]) — La función de propagación hacia adelante del modelo. - chunk_size (
int) — El tamaño de bloque de un tensor por bloques:num_chunks = len(input_tensors[0]) / chunk_size. - chunk_dim (
int) — La dimensión sobre la que se deben dividir en bloques losinput_tensors. - input_tensors (
tuple[torch.Tensor]) — Los tensores de entrada deforward_fnque se dividirán en fragmentos
Devuelve
torch.Tensor
Un tensor con la misma forma que habría dado forward_fn si se hubiera aplicado`.
Esta función divide input_tensors en partes de tensor de entrada más pequeñas de tamaño chunk_size a lo largo de la dimensión chunk_dim. A continuación, aplica la capa forward_fn a cada fragmento de forma independiente para ahorrar memoria.
Si forward_fn es independiente a lo largo de chunk_dim, esta función producirá el mismo resultado que aplicar forward_fn directamente a input_tensors.
Ejemplos:
# 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
Parámetros
- layer (
torch.nn.Linear) — La capa que se va a podar. - index (
torch.LongTensor) — Los índices que se conservarán en la capa. - dim (
int, opcional, valor predeterminado 0) — La dimensión sobre la que se conservan los índices.
Devuelve
torch.nn.Linear
La capa podada como una nueva capa con requires_grad=True.
Recorta una capa lineal para conservar solo las entradas en index.
Se utiliza para eliminar cabezas.