Transformers 文档
xLSTM
并获得增强的文档体验
开始使用
该模型于 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)相媲美。
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.configxLSTMModel
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] ) → xLSTMOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (形状为
(batch_size, sequence_length)的torch.LongTensor, 可选) — 词表中输入序列 Token 的索引。默认情况下将忽略填充 (padding)。索引可以使用 AutoTokenizer 获取。详细信息请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- 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)。
返回
xLSTMOutput 或 tuple(torch.FloatTensor)
根据配置 (xLSTMConfig) 和输入,包含各种元素的 xLSTMOutput 或 torch.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=True或config.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] ) → xLSTMCausalLMOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (形状为
(batch_size, sequence_length)的torch.LongTensor,可选) — 输入序列标记(token)在词表中的索引。默认情况下,填充(padding)将被忽略。索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- 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)。
返回
xLSTMCausalLMOutput 或 tuple(torch.FloatTensor)
一个 xLSTMCausalLMOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或 config.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=True或config.output_hidden_states=True时返回) —torch.FloatTensor元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。