Transformers 文档

xLSTM

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

该模型于 2024 年 5 月 7 日在 HF 论文中发布,并于 2025 年 7 月 25 日贡献给 Hugging Face Transformers。

xLSTM

概述

xLSTM 模型由 Maximilian Beck、Korbinian Pöppel、Markus Spanring、Andreas Auer、Oleksandra Prudnikova、Michael Kopp、Günter Klambauer、Johannes Brandstetter 和 Sepp Hochreiter 在 xLSTM: Extended Long Short-Term Memory(扩展长短期记忆网络)中提出。xLSTM 通过引入指数门控、矩阵内存扩展以及可并行化的训练和数据输入,更新了原始的 LSTM 架构,使其能够与 Transformer 模型竞争。

7B 模型变体由 NXAI 的 xLSTM 团队成员 Maximilian Beck、Korbinian Pöppel、Phillip Lippe、Richard Kurle、Patrick Blies、Sebastian Böck 和 Sepp Hochreiter 训练完成。

论文摘要如下:

20 世纪 90 年代,恒定误差传送带(Constant Error Carousel)和门控机制被引入,作为长短期记忆网络(LSTM)的核心思想。自那时起,LSTM 经受住了时间的考验,并为众多深度学习的成功案例做出了贡献,特别是它们构成了最早的大语言模型(LLM)。然而,以可并行自注意力机制为核心的 Transformer 技术的出现,标志着一个新时代的开启,其在规模化方面超越了 LSTM。我们现在提出一个简单的问题:当我们将 LSTM 扩展到数十亿参数,并利用现代 LLM 的最新技术,同时缓解 LSTM 已知的局限性时,它在语言建模方面能走多远?首先,我们引入了具有适当归一化和稳定技术的指数门控。其次,我们修改了 LSTM 内存结构,从而获得了:(i) 具有标量内存、标量更新和新内存混合的 sLSTM;(ii) 具有矩阵内存和协方差更新规则、可完全并行化的 mLSTM。将这些 LSTM 扩展集成到残差块骨干中,形成了 xLSTM 块,然后将其残差堆叠以构成 xLSTM 架构。指数门控和改进的内存结构增强了 xLSTM 的能力,使其在性能和扩展性方面均可与最先进的 Transformer 和状态空间模型(State Space Models)相媲美。

该模型由 NX-AI 贡献。原始代码可以在这里找到。

xLSTMConfig

class transformers.xLSTMConfig

< >

( transformers_version: str | None = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 is_encoder_decoder: bool = False id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None vocab_size: int = 50304 hidden_size: int = 4096 embedding_dim: int | None = None num_hidden_layers: int = 32 num_blocks: int | None = None num_heads: int = 8 use_bias: bool = False norm_reduction_force_float32: bool = True tie_word_embeddings: bool = False add_out_norm: bool = True norm_eps: float = 1e-06 qk_dim_factor: float = 0.5 v_dim_factor: float = 1.0 chunkwise_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 = 64 return_last_states: bool = True autocast_kernel_dtype: typing.Literal['float32', 'bfloat16', 'float16'] = 'bfloat16' eps: float = 1e-06 inference_state_dtype: typing.Literal['float32', 'bfloat16', 'float16'] = 'float32' ffn_proj_factor: float = 2.667 ffn_round_up_to_multiple_of: int = 64 gate_soft_cap: float = 15.0 output_logit_soft_cap: float = 30.0 weight_mode: typing.Literal['single', 'fused'] = 'single' use_cache: bool = True pad_token_id: int | None = 1 bos_token_id: int | None = 0 eos_token_id: int | list[int] | None = 2 max_inference_chunksize: int = 16384 )

参数

  • vocab_size (int, 可选, 默认值为 50304) — 模型的词汇表大小。定义了 input_ids 可以表示的不同 token 的数量。
  • hidden_size (int, 可选, 默认值为 4096) — 隐藏层表示的维度。
  • embedding_dim (int, 可选) — 嵌入和隐藏状态的维度。
  • num_hidden_layers (int, 可选, 默认值为 32) — Transformer 解码器中的隐藏层数量。
  • num_blocks (int, 可选, 默认值为 32) — xLSTM 模型的块数量,如果为 None,则使用 num_hidden_layers。
  • num_heads (int, 可选, 默认值为 8) — xLSTM 层/单元的头数。
  • use_bias (bool, 可选, 默认值为 False) — 是否在 xLSTM 模型中使用偏置项。
  • norm_reduction_force_float32 (bool, 可选, 默认值为 True) — 是否强制以 fp32 精度执行归一化缩减操作。
  • tie_word_embeddings (bool, 可选, 默认值为 False) — 是否根据模型的 tied_weights_keys 映射绑定权重嵌入。
  • add_out_norm (bool, 可选, 默认值为 True) — 是否在 LMHead 之前的块之后添加输出归一化。
  • norm_eps (float, 可选, 默认值为 1e-06) — 层归一化层使用的 epsilon 值。
  • qk_dim_factor (float, 可选, 默认值为 0.5) — 查询(Query)和键(Key)维度的比例因子。
  • v_dim_factor (float, 可选, 默认值为 1.0) — 值(Value)维度的比例因子。
  • chunkwise_kernel (ChunkwiseKernelType, 可选, 默认值为 "chunkwise--native_autograd") — 分块处理模式的内核类型。
  • sequence_kernel (SequenceKernelType, 可选, 默认值为 "native_sequence__native") — 序列处理模式的内核类型。
  • step_kernel (StepKernelType, 可选, 默认值为 "native") — 步进处理模式的内核类型。
  • mode (BackendModeType, 可选, optional, 默认为 "inference") — 运行模式(生成时需要 inference 模式)。
  • chunk_size (int, 可选, optional, 默认为 64) — 内部块大小 (chunk size)。
  • return_last_states (bool, 可选, optional, 默认为 True) — 是否在内部返回最后的状态/缓存。生成时必须设为 True。
  • autocast_kernel_dtype (DtypeType, 可选, optional, 默认为 "bfloat16") — 用于状态的核 (kernel) 数据类型。
  • eps (float, optional, 默认为 1e-06) — 层归一化层使用的 epsilon 值。
  • inference_state_dtype (DtypeType, 可选, optional, 默认为 "float32") — 推理时状态的核数据类型。
  • ffn_proj_factor (float, 可选, optional, 默认为 2.667) — 门控前馈网络 (gated Feed Forward network) 后投影的大小因子。
  • ffn_round_up_to_multiple_of (int, 可选, optional, 默认为 64) — 门控前馈网络后投影的大小因子舍入值。
  • gate_soft_cap (float, 可选, optional, 默认为 15.0) — 门控软上限 (gate soft cap) 尺度。
  • output_logit_soft_cap (float, 可选, optional, 默认为 30.0) — 输出 Logit 软上限尺度。
  • weight_mode (Literal, optional, 默认为 "single") — 并行线性层是分开的还是融合的 (single)。
  • use_cache (bool, optional, 默认为 True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅在 config.is_decoder=True 或模型是仅解码器生成模型时相关。
  • pad_token_id (int, optional, 默认为 1) — 词表中用于填充 (padding) 的 Token ID。
  • bos_token_id (int, optional, 默认为 0) — 词表中用于流开始 (beginning-of-stream) 的 Token ID。
  • eos_token_id (Union[int, list[int]], optional, 默认为 2) — 词表中用于流结束 (end-of-stream) 的 Token ID。
  • max_inference_chunksize (int, 可选, optional, 默认为 16384) — 限制推理时的块大小以节省内存。

这是用于存储 xLSTMModel 配置的配置类。它用于根据指定的参数实例化一个 Xlstm 模型,定义模型架构。使用默认值实例化配置将产生与 NX-AI/xLSTM-7b 相似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。

示例

>>> 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.config

xLSTMModel

class transformers.xLSTMModel

< >

( config model_args: ~utils.generic.ModelArgs | None = None adapter_args: ~utils.generic.AdapterArgs | None = None lora_args: ~utils.generic.LoRAArgs | None = None tokenizer_args: ~utils.generic.TokenizerArgs | None = None dataset_args: ~utils.generic.DatasetArgs | None = None data_args: ~utils.generic.DataArgs | None = None training_args: ~utils.generic.TrainingArgs | None = None generation_args: ~utils.generic.GenerationArgs | None = None vision_tower_args: ~utils.generic.VisionTowerArgs | None = None qlora_args: ~utils.generic.QLoRAArgs | None = None vision_tower_template_args: ~utils.generic.VisionTowerTemplateArgs | None = None video_tower_args: ~utils.generic.VideoTowerArgs | None = None vision_config: ~utils.generic.VisionConfig | None = None video_config: ~utils.generic.VideoConfig | None = None load_dataset: bool | None = None load_data_collator: bool | None = None load_processor: bool | None = None load_lora_adapter: bool | None = None load_adapter: bool | None = None load_qlora_adapter: bool | None = None **kwargs: typing_extensions.Unpack[transformers.modeling_utils.PreTrainedModelKwargs] )

参数

  • config (xLSTMModel) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。

裸的 Xlstm 模型,输出原始隐藏状态,顶部没有任何特定的头 (head)。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( input_ids: torch.LongTensor | None = None inputs_embeds: torch.LongTensor | None = None cache_params: transformers.models.xlstm.modeling_xlstm.xLSTMCache | None = None use_cache: bool | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) xLSTMOutputtuple(torch.FloatTensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 词表中输入序列 Token 的索引。默认情况下将忽略填充 (padding)。

    索引可以使用 AutoTokenizer 获取。详细信息请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是 input IDs?

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.LongTensor, 可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果您想在如何将 input_ids 索引转换为相关向量方面获得比模型内部嵌入查找矩阵更多的控制,这会非常有用。
  • cache_params (xLSTMCache, 可选) — 携带 RNN 状态的 xLSTMCache。
  • use_cache (bool, 可选) — 如果设置为 True,将返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。

返回

xLSTMOutputtuple(torch.FloatTensor)

根据配置 (xLSTMConfig) 和输入,包含各种元素的 xLSTMOutputtorch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时)。

xLSTMModel 的前向传播方法,覆盖了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • last_hidden_state (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选) — 模型最后一层输出的隐藏状态序列。

  • cache_params (~models.xlstm.modeling_xlstm.xLSTMCache, 可选, 默认为 None) — 模型在最后一个时间步的状态。可以在前向传播方法中与下一个 input_ids 一起使用,以避免提供旧的 input_ids

  • hidden_states (tuple[torch.FloatTensor]可选,在传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

xLSTMLMHeadModel

class transformers.xLSTMForCausalLM

< >

( config model_args: ~utils.generic.ModelArgs | None = None adapter_args: ~utils.generic.AdapterArgs | None = None lora_args: ~utils.generic.LoRAArgs | None = None tokenizer_args: ~utils.generic.TokenizerArgs | None = None dataset_args: ~utils.generic.DatasetArgs | None = None data_args: ~utils.generic.DataArgs | None = None training_args: ~utils.generic.TrainingArgs | None = None generation_args: ~utils.generic.GenerationArgs | None = None vision_tower_args: ~utils.generic.VisionTowerArgs | None = None qlora_args: ~utils.generic.QLoRAArgs | None = None vision_tower_template_args: ~utils.generic.VisionTowerTemplateArgs | None = None video_tower_args: ~utils.generic.VideoTowerArgs | None = None vision_config: ~utils.generic.VisionConfig | None = None video_config: ~utils.generic.VideoConfig | None = None load_dataset: bool | None = None load_data_collator: bool | None = None load_processor: bool | None = None load_lora_adapter: bool | None = None load_adapter: bool | None = None load_qlora_adapter: bool | None = None **kwargs: typing_extensions.Unpack[transformers.modeling_utils.PreTrainedModelKwargs] )

参数

  • config (xLSTMForCausalLM) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。

用于因果语言建模的 Xlstm 模型。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( input_ids: torch.LongTensor | None = None inputs_embeds: torch.FloatTensor | None = None cache_params: transformers.models.xlstm.modeling_xlstm.xLSTMCache | None = None labels: torch.LongTensor | None = None use_cache: bool | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) xLSTMCausalLMOutputtuple(torch.FloatTensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 输入序列标记(token)在词表中的索引。默认情况下,填充(padding)将被忽略。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是 input IDs?

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor可选) — 作为一个可选项,你可以选择直接传入嵌入表示(embedded representation)而非传入 input_ids。如果你想比模型内部的嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为对应的向量,这非常有用。
  • cache_params (xLSTMCache可选) — 携带 RNN 状态的 xLSTMCache。
  • labels (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 用于计算掩码语言建模(masked language modeling)损失的标签。索引应在 [0, ..., config.vocab_size] 之间或设置为 -100(请参阅 input_ids 文档字符串)。索引被设置为 -100 的标记将被忽略(掩码),损失仅计算标签在 [0, ..., config.vocab_size] 之间的标记。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(请参阅 past_key_values)。

返回

xLSTMCausalLMOutputtuple(torch.FloatTensor)

一个 xLSTMCausalLMOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=Falseconfig.return_dict=False 时),根据配置 (xLSTMConfig) 和输入,包含不同的元素。

xLSTMForCausalLM 的 forward 方法,覆盖了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • loss (torch.FloatTensor 形状为 (1,)可选,当提供 labels 时返回) — 语言建模损失(用于下一个 token 预测)。

  • logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。

  • cache_params (xLSTMCache可选,携带 RNN 状态) — 模型在最后一个时间步的状态。可以在前向传播方法中与下一个 input_ids 一起使用,以避免提供旧的 input_ids

  • hidden_states (tuple[torch.FloatTensor]可选,在传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

示例

在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.