Transformers 文档
xLSTM
并获得增强的文档体验
开始使用
该模型于 2024-05-07 发布,并于 2025-07-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 模型竞争。
由 xLSTM 团队 Maximilian Beck、Korbinian Pöppel、Phillip Lippe、Richard Kurle、Patrick Blies、Sebastian Böck 和 Sepp Hochreiter 在 NXAI 训练的 7B 模型版本。
论文摘要如下:
在 20 世纪 90 年代,引入了恒定误差轮转和门控作为长短期记忆 (LSTM) 的核心思想。从那时起,LSTM 经受住了时间的考验,并为无数深度学习的成功做出了贡献,特别是它们构成了第一个大型语言模型 (LLM)。然而,以可并行自注意力为核心的 Transformer 技术的出现标志着一个新时代的黎明,它在规模上超越了 LSTM。我们现在提出了一个简单的问题:通过利用现代 LLM 的最新技术,同时缓解 LSTM 的已知限制,并将 LSTM 扩展到数十亿参数时,我们在语言建模方面能走多远?首先,我们引入了具有适当归一化和稳定技术的分数门控。其次,我们修改了 LSTM 内存结构,得到:(i) sLSTM,具有标量内存、标量更新和新的内存混合;(ii) mLSTM,它完全可并行化,具有矩阵内存和协方差更新规则。将这些 LSTM 扩展集成到残差块骨干网络中,可以得到 xLSTM 块,然后将它们残差堆叠成 xLSTM 架构。分数门控和修改的内存结构提升了 xLSTM 的能力,使其在性能和扩展性方面都能与最先进的 Transformer 和状态空间模型相媲美。
xLSTMConfig
class transformers.xLSTMConfig
< 源码 >( vocab_size: int = 50304 hidden_size: int = 4096 embedding_dim: int | None = None num_hidden_layers: int | None = 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 = 1 bos_token_id: int = 0 eos_token_id: int = 2 max_inference_chunksize: int = 16384 **kwargs )
参数
- vocab_size (int, optional, 可选, 默认为 50304) — xLSTM 模型的词汇量大小。定义了在调用 xLSTMModel 时传递的
inputs_ids所能表示的不同 token 的数量。默认为 GPT2-NeoX 分词器的尺寸。 - hidden_size (int, optional, 可选, 默认为 4096) — 嵌入或隐藏状态的维度。
- embedding_dim (int, optional, 可选, 默认为 4096) — 嵌入或隐藏状态的维度,如果为 None,则使用 hidden_size。
- num_hidden_layers (int, optional, 可选, 默认为 32) — xLSTM 模型的块数。
- num_blocks (int, optional, 可选, 默认为 32) — xLSTM 模型的块数,如果为 None,则使用 num_hidden_layers。
- num_heads (int, optional, 可选, 默认为 8) — xLSTM 层/单元的头数。
- use_bias (bool, optional, 可选, 默认为
False) — 是否在 xLSTM 模型中使用偏置。 - norm_reduction_force_float32 (bool, optional, 可选, 默认为
True) — 是否强制以 fp32 精度执行 float32 范数约简操作。 - tie_word_embeddings (bool, optional, 可选, 默认为
False) — 是否将词嵌入与 lm head 权重绑定。 - add_out_norm (bool, optional, 可选, 默认为
True) — 是否在 LMHead 之前为块添加输出范数。 - norm_eps (float, optional, 可选, 默认为 1e-06) — RMSNorm 和 Layer Norm 的范数 epsilon。
- qk_dim_factor (float, optional, 可选, 默认为 0.5) — 查询和键维度的比例因子。
- v_dim_factor (float, optional, 可选, 默认为 1.0) — 值维度的比例因子。
- chunkwise_kernel (ChunkwiseKernelType, optional, 可选, 默认为
"chunkwise--native_autograd") — 分块处理模式的内核类型。 - sequence_kernel (SequenceKernelType, optional, 可选, 默认为
"native_sequence__native") — 序列处理模式的内核类型。 - step_kernel (StepKernelType, optional, 可选, 默认为
"native") — 步进处理模式的内核类型。 - mode (BackendModeType, optional, 可选, 默认为
"inference") — 操作模式(生成时需要推理)。 - chunk_size (int, optional, 可选, 默认为 64) — 内部块大小。
- return_last_states (bool, optional, 可选, 默认为
True) — 是否返回最后一个状态/内部缓存。生成时需要为 True。 - autocast_kernel_dtype (DtypeType, optional, 可选, 默认为
"bfloat16") — 状态的内核 dtype。 - eps (float, optional, optional, defaults to 1e-06) — mLSTM 单元后置归一化的 epsilon。
- inference_state_dtype (DtypeType, optional, optional, defaults to
"float32") — 推理时状态的内核 dtype。 - ffn_proj_factor (float, optional, optional, defaults to 2.667) — 门控前馈网络的尺寸因子。
- ffn_round_up_to_multiple_of (int, optional, optional, defaults to 64) — 门控前馈网络的尺寸向上取整的倍数。
- gate_soft_cap (float, optional, optional, defaults to 15.0) — 门控软上限比例。
- output_logit_soft_cap (float, optional, optional, defaults to 30.0) — 输出 logit 软上限比例。
- weight_mode (
Literal, optional, defaults to"single") — 并行线性层是分开还是融合(single)。 - use_cache (bool, optional, optional, defaults to
True) — 是否使用缓存(xLSTMCache)。 - pad_token_id (int, optional, optional, defaults to 1) — 生成所需的 padding token id。
- bos_token_id (int, optional, optional, defaults to 0) — 生成所需的 BOS token id。
- eos_token_id (int, optional, optional, defaults to 2) — 生成所需的 EOS token id。
- max_inference_chunksize (int, optional, optional, defaults to 16384) — 限制推理的块大小以节省内存。
这是用于存储 xLSTM 配置的配置类。它用于根据指定的参数实例化 xLSTM 模型,定义模型的架构。使用默认值实例化配置将产生一个与 xLSTM-7b 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.configxLSTMModel
class transformers.xLSTMModel
< source >( 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 模型,没有任何特定的顶部头。
此模型继承自 PreTrainedModel。查看其父类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< source >( 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 output_hidden_states: bool | None = None **kwargs ) → transformers.models.xlstm.modeling_xlstm.xLSTMOutput or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length), optional) — 词汇表中输入序列 token 的索引。默认情况下,将忽略 padding。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- inputs_embeds (
torch.LongTensor, shape(batch_size, sequence_length, hidden_size), optional) — 可选地,您可以直接传递嵌入表示,而不是传递input_ids。如果您希望比模型内部的嵌入查找矩阵更精细地控制如何将input_ids索引转换为关联向量,则此选项非常有用。 - cache_params (
xLSTMCache, optional) — 携带 RNN 状态的 xLSTM 缓存。 - use_cache (
bool, optional) — 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(请参阅past_key_values)。 - output_hidden_states (
bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states。
返回
transformers.models.xlstm.modeling_xlstm.xLSTMOutput 或 tuple(torch.FloatTensor)
一个 transformers.models.xlstm.modeling_xlstm.xLSTMOutput 或 tuple(torch.FloatTensor)(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(xLSTMConfig)和输入包含各种元素。
-
last_hidden_state (
torch.FloatTensor | None.last_hidden_state, shape(batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。 -
cache_params (
~models.xlstm.modeling_xlstm.xLSTMCache | None.cache_params, defaults toNone) — 最后一个时间步的模型状态。可以在下一个input_ids的前向方法中使用,以避免提供旧的input_ids。 -
hidden_states (
tuple[torch.FloatTensor] | None.hidden_states, 当传递output_hidden_states=True或当config.output_hidden_states=True时返回) —torch.FloatTensor的元组(一个用于嵌入的输出,如果模型有嵌入层,+ 每个层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
transformers.xLSTMModel 的前向方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
xLSTMLMHeadModel
class transformers.xLSTMForCausalLM
< source >( 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
< source >( 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 output_hidden_states: bool | None = None **kwargs ) → transformers.models.xlstm.modeling_xlstm.xLSTMCausalLMOutput or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length), optional) — 词汇表中输入序列 token 的索引。默认情况下,将忽略 padding。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- inputs_embeds (
torch.FloatTensorof shape(batch_size, sequence_length, hidden_size), optional) — 可选,你可以直接传入嵌入表示,而不是input_ids。这在你希望对如何将input_ids索引转换为相关向量拥有比模型内部嵌入查找矩阵更多的控制时很有用。 - cache_params (
xLSTMCache, optional) — 包含 RNN 状态的 xLSTMCache。 - labels (
torch.LongTensorof shape(batch_size, sequence_length), optional) — 用于计算掩码语言模型损失的标签。索引应在[0, ..., config.vocab_size]或 -100 之间(参见input_ids文档字符串)。索引设置为-100的 token 被忽略(掩码),损失仅为标签在[0, ..., config.vocab_size]范围内的 token 计算。 - use_cache (
bool, optional) — 如果设置为True,将返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。 - output_hidden_states (
bool, optional) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回的张量下的hidden_states。
返回
transformers.models.xlstm.modeling_xlstm.xLSTMCausalLMOutput 或 tuple(torch.FloatTensor)
一个 transformers.models.xlstm.modeling_xlstm.xLSTMCausalLMOutput 或一个 torch.FloatTensor 的元组(如果传入了 return_dict=False 或当 config.return_dict=False 时),其中包含根据配置(xLSTMConfig)和输入而变化的各种元素。
-
loss (
torch.FloatTensor形状为(1,),可选,当提供labels时返回) — 语言建模损失(用于下一个 token 预测)。 -
logits (形状为
(batch_size, sequence_length, config.vocab_size)的torch.FloatTensor) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。 -
cache_params (
xLSTMCache, optional, 包含 RNN 状态) — 模型在最后一个时间步的状态。可以在与下一个input_ids结合使用的前向方法中传入,以避免提供旧的input_ids。 -
hidden_states (
tuple[torch.FloatTensor] | None.hidden_states, 当传递output_hidden_states=True或当config.output_hidden_states=True时返回) —torch.FloatTensor的元组(一个用于嵌入的输出,如果模型有嵌入层,+ 每个层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
transformers.xLSTMForCausalLM 的前向方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。