Transformers documentation
xLSTM
Este modelo se publicó en HF papers el 2024-05-07 y se contribuyó a Hugging Face Transformers el 2025-07-25.
xLSTM
Resumen
El modelo xLSTM fue propuesto en xLSTM: Extended Long Short-Term Memory por Maximilian Beck, Korbinian Pöppel, Markus Spanring, Andreas Auer, Oleksandra Prudnikova, Michael Kopp, Günter Klambauer, Johannes Brandstetter y Sepp Hochreiter. xLSTM actualiza la arquitectura original de LSTM para ser competitiva con los modelos Transformer mediante la introducción de un control exponencial, la expansión de la memoria matricial y un entrenamiento y una ingesta paralelizables.
La variante modelo 7B fue entrenada por el equipo de xLSTM: Maximilian Beck, Korbinian Pöppel, Phillip Lippe, Richard Kurle, Patrick Blies, Sebastian Böck y Sepp Hochreiter, de NXAI.
El resumen del artículo es el siguiente:
En la década de 1990, el carrusel de error constante y el gating se introdujeron como las ideas centrales de la memoria a largo y corto plazo (LSTM). Desde entonces, las LSTM han superado la prueba del tiempo y han contribuido a numerosos éxitos en el aprendizaje profundo; en particular, constituyeron los primeros modelos de lenguaje de gran escala (LLM). Sin embargo, el surgimiento de la tecnología Transformer, con su autoatención paralelizable como núcleo, marcó el alba de una nueva era, superando a las LSTM a gran escala. Ahora planteamos una pregunta sencilla: ¿Hasta dónde llegamos en el modelado de lenguaje al escalar las LSTM a miles de millones de parámetros, aprovechando las técnicas más recientes de los LLM modernos, pero mitigando las limitaciones conocidas de las LSTM? En primer lugar, introducimos un gating exponencial con técnicas adecuadas de normalización y estabilización. En segundo lugar, modificamos la estructura de memoria de la LSTM, obteniendo: (i) sLSTM con una memoria escalar, una actualización escalar y una nueva mezcla de memoria, (ii) mLSTM, que es totalmente paralelizable con una memoria matricial y una regla de actualización de covarianza. La integración de estas extensiones de LSTM en esqueletos de bloques residuales produce bloques xLSTM, que luego se apilan de forma residual en arquitecturas xLSTM. El gating exponencial y las estructuras de memoria modificadas potencian las capacidades de xLSTM para realizar un desempeño favorable en comparación con los Transformers y los modelos de espacio de estado más avanzados, tanto en rendimiento como en escalado.
Este modelo fue aportado por NX-AI. El código original se puede encontrar aquí.
Notas
- Use padding izquierdo para la generación por lotes. Consulte Lado de relleno.
xLSTMConfig
clase transformers.xLSTMConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 50304hidden_size: int = 4096embedding_dim: int | None = Nonenum_hidden_layers: int = 32num_blocks: int | None = Nonenum_heads: int = 8use_bias: bool = Falsenorm_reduction_force_float32: bool = Truetie_word_embeddings: bool = Falseadd_out_norm: bool = Truenorm_eps: float = 1e-06qk_dim_factor: float = 0.5v_dim_factor: float = 1.0chunkwise_kernel: typing.Literal['chunkwise--native_autograd', 'parallel--native_autograd'] = 'chunkwise--native_autograd'sequence_kernel: typing.Literal['native_sequence__native'] = 'native_sequence__native'step_kernel: typing.Literal['native'] = 'native'mode: typing.Literal['train', 'train_with_padding', 'inference'] = 'inference'chunk_size: int = 64return_last_states: bool = Trueautocast_kernel_dtype: typing.Literal['float32', 'bfloat16', 'float16'] = 'bfloat16'eps: float = 1e-06inference_state_dtype: typing.Literal['float32', 'bfloat16', 'float16'] = 'float32'ffn_proj_factor: float = 2.667ffn_round_up_to_multiple_of: int = 64gate_soft_cap: float = 15.0output_logit_soft_cap: float = 30.0weight_mode: typing.Literal['single', 'fused'] = 'single'use_cache: bool = Truepad_token_id: int | None = 1bos_token_id: int | None = 0eos_token_id: int | list[int] | None = 2max_inference_chunksize: int = 16384 )
Parámetros
- vocab_size (
int, opcional, valor predeterminado50304) — Tamaño del vocabulario del modelo. Define el número de tokens diferentes que pueden representarse medianteinput_ids. - hidden_size (
int, opcional, valor predeterminado4096) — Dimensión de las representaciones ocultas. - embedding_dim (
int, opcional) — Dimensionalidad de los embeddings y los estados ocultos. - num_hidden_layers (
int, opcional, valor predeterminado32) — Número de capas ocultas en el decodificador del Transformer. - num_blocks (
int, opcional, opcional, valor predeterminado 32) — Número de bloques del modelo xLSTM; si es None, se usa num_hidden_layers. - num_heads (
int, opcional, opcional, valor predeterminado 8) — Número de cabezas para la capa/celda xLSTM. - use_bias (
bool, opcional, opcional, valor predeterminadoFalse) — Indica si se deben usar sesgos en el modelo xLSTM. - norm_reduction_force_float32 (
bool, opcional, opcional, valor predeterminadoTrue) — Si se debe forzar que la operación de reducción de la norma se realice en precisión fp32. - tie_word_embeddings (
bool, opcional, valor predeterminadoFalse) — Si se deben vincular las matrices de pesos de embeddings según el mapeotied_weights_keysdel modelo. - add_out_norm (
bool, opcional, opcional, valor predeterminadoTrue) — Indica si se debe añadir una normalización de salida después de los bloques y antes del LMHead. - norm_eps (
float, opcional, valor predeterminado1e-06) — La epsilon utilizada por las capas de normalización de capas. - qk_dim_factor (
float, opcional, opcional, valor predeterminado 0.5) — Factor de escala para la dimensión de la consulta y la clave. - v_dim_factor (
float, opcional, opcional, valor predeterminado 1.0) — Factor de escala para la dimensión de valor. - chunkwise_kernel (
ChunkwiseKernelType, opcional, opcional, valor predeterminado"chunkwise--native_autograd") — Tipo de kernel para el modo de procesamiento por fragmentos. - sequence_kernel (
SequenceKernelType, opcional, opcional, valor predeterminado"native_sequence__native") — Tipo de kernel para el modo de procesamiento de secuencias. - step_kernel (
StepKernelType, opcional, opcional, valor predeterminado"native") — Tipo de kernel para el modo de procesamiento de pasos. - mode (
BackendModeType, opcional, opcional, valor predeterminado"inference") — Modo de operación (se necesita inferencia para la generación). - chunk_size (
int, opcional, opcional, valor predeterminado 64) — Tamaño de bloque interno. - return_last_states (
bool, opcional, opcional, valor predeterminadoTrue) — Si se deben devolver internamente los últimos estados / caché. Debe ser True para la generación. - autocast_kernel_dtype (
DtypeType, opcional, opcional, valor predeterminado"bfloat16") — Dtype del kernel para los estados. - eps (
float, opcional, valor predeterminado1e-06) — La epsilon utilizada por las capas de normalización de capas. - inference_state_dtype (
DtypeType, opcional, opcional, valor predeterminado"float32") — Dtype del kernel para los estados en la inferencia. - ffn_proj_factor (
float, opcional, opcional, valor predeterminado 2.667) — Factor de tamaño de la proyección posterior de la red Feed Forward con compuerta. - ffn_round_up_to_multiple_of (
int, opcional, opcional, valor predeterminado: 64) — Factor de tamaño para redondear el valor de la proyección posterior de la red Feed Forward con puerta. - gate_soft_cap (
float, opcional, opcional, valor predeterminado 15.0) — Escala del límite suave de la compuerta. - output_logit_soft_cap (
float, opcional, opcional, valor predeterminado 30.0) — Escala del límite suave de los logits de salida. - weight_mode (
Literal, opcional, valor predeterminado"single") — Indica si las capas lineales paralelas están separadas o fusionadas (single). - use_cache (
bool, opcional, valor predeterminadoTrue) — Indica si el modelo debe devolver las últimas claves/valores de atención (no utilizado por todos los modelos). Solo es relevante siconfig.is_decoder=Trueo cuando el modelo es un modelo generativo solo de decodificador. - pad_token_id (
int, opcional, valor predeterminado1) — Id del token utilizado para el relleno en el vocabulario. - bos_token_id (
int, opcional, valor predeterminado0) — Id del token utilizado para el inicio de la secuencia en el vocabulario. - eos_token_id (
Union[int, list[int]], opcional, valor predeterminado2) — Identificador de token utilizado para el fin de secuencia en el vocabulario. - max_inference_chunksize (
int, opcional, opcional, valor predeterminado 16384) — Limita el tamaño de los bloques para la inferencia y ahorrar memoria.
Esta es la clase de configuración para almacenar la configuración de un xLSTMModel. Se utiliza para instanciar un modelo Xlstm según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de NX-AI/xLSTM-7b
Los objetos de configuración heredan de PreTrainedConfig y se pueden usar para controlar las salidas del modelo. Lea la documentación de PreTrainedConfig para obtener más información.
Ejemplo:
>>> from transformers import xLSTMConfig, xLSTMModel
>>> # Initializing a xLSTM configuration
>>> configuration = xLSTMConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = xLSTMModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configxLSTMModel
clase transformers.xLSTMModel
< source >( config: xLSTMConfig )
Parámetros
- config (xLSTMConfig) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
El modelo Xlstm sin procesar que genera estados ocultos sin ningún cabezal específico en la parte superior.
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.LongTensor] = Nonecache_params: transformers.models.xlstm.modeling_xlstm.xLSTMCache | None = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → xLSTMOutput or tuple(torch.Tensor)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices de los tokens de la secuencia de entrada en el vocabulario. El relleno se ignorará de forma predeterminada.Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- inputs_embeds (
torch.LongTensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, en lugar de pasarinput_ids, puedes elegir pasar directamente una representación incrustada. Esto es útil si deseas tener más control sobre cómo convertir los índices deinput_idsen los vectores asociados que en la matriz de búsqueda de incrustaciones interna del modelo. - cache_params (
xLSTMCache, opcional) — El xLSTMCache que transporta los estados del RNN. - use_cache (
bool, opcional) — Si se establece enTrue, se devuelven los estados de clave-valor depast_key_valuesy pueden usarse para acelerar la decodificación (verpast_key_values).
Devuelve
xLSTMOutput o tuple(torch.Tensor)
Un xLSTMOutput o una tupla de
torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (xLSTMConfig) y las entradas.
El método forward de xLSTMModel reemplaza el método especial __call__.
Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de
Moduledespués en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.
last_hidden_state (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del modelo.cache_params (
~models.xlstm.modeling_xlstm.xLSTMCache, opcional) — El estado del modelo en el último paso de tiempo. Puede usarse en un método forward con los siguientesinput_idspara evitar proporcionar losinput_idsanteriores.hidden_states (
tuple[torch.Tensor], opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(una para la salida de las incrustaciones, si el modelo tiene una capa de incrustaciones, + una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del modelo en la salida de cada capa más las salidas opcionales de la incrustación inicial.
xLSTMLMHeadModel
clase transformers.xLSTMForCausalLM
< source >( config: xLSTMConfig )
Parámetros
- config (xLSTMConfig) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
El modelo Xlstm para el modelado causal de lenguaje.
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonecache_params: transformers.models.xlstm.modeling_xlstm.xLSTMCache | None = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → xLSTMCausalLMOutput or tuple(torch.Tensor)
Parámetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices de los tokens de la secuencia de entrada en el vocabulario. El relleno se ignorará de forma predeterminada.Los índices se pueden obtener usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() y PreTrainedTokenizer.call() para más detalles.
- inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, en lugar de pasarinput_ids, puedes elegir pasar directamente una representación incrustada. Esto es útil si deseas tener más control sobre cómo convertir los índices deinput_idsen los vectores asociados que en la matriz de búsqueda de incrustaciones interna del modelo. - cache_params (
xLSTMCache, opcional) — El xLSTMCache que transporta los estados del RNN. - labels (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Etiquetas para calcular la pérdida de modelado de lenguaje enmascarado. Los índices deben estar en[0, ..., config.vocab_size]o ser -100 (ver la docstring deinput_ids). Los tokens con índices establecidos en-100se ignoran (enmascarados); la pérdida solo se calcula para los tokens con etiquetas en[0, ..., config.vocab_size]. - use_cache (
bool, opcional) — Si se establece enTrue, se devuelven los estados de clave-valor depast_key_valuesy pueden usarse para acelerar la decodificación (verpast_key_values).
Devuelve
xLSTMCausalLMOutput o tuple(torch.Tensor)
Un xLSTMCausalLMOutput o una tupla de
torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (xLSTMConfig) y las entradas.
El método forward de xLSTMForCausalLM reemplaza el método especial __call__.
Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de
Moduledespués en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.
loss (
torch.Tensorde forma(1,), opcional, se devuelve cuando se proporcionalabels) — Pérdida de modelado de lenguaje (para la predicción del siguiente token).logits (
torch.Tensorde forma(batch_size, sequence_length, config.vocab_size)) — Puntuaciones de predicción de la cabeza de modelado de lenguaje (puntuaciones para cada token del vocabulario antes de SoftMax).cache_params (
xLSTMCache, opcional, que contiene los estados del RNN) — El estado del modelo en el último paso de tiempo. Puede utilizarse en un método de propagación hacia adelante junto con los siguientesinput_idspara evitar proporcionar losinput_idsanteriores.hidden_states (
tuple[torch.Tensor], opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(una para la salida de las incrustaciones, si el modelo tiene una capa de incrustaciones, + una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del modelo en la salida de cada capa más las salidas opcionales de la incrustación inicial.