Transformers 文档

Mamba 2

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

该模型于 2024-05-31 发布,并于 2024-08-06 添加到 Hugging Face Transformers。

PyTorch

Mamba 2

Mamba 2 基于状态空间对偶(SSD)框架,该框架连接了结构化状态空间模型(SSM)和注意力变体。它使用更高效的 SSD 算法,比 Mamba 快 2-8 倍,并修改了架构以支持张量并行和分组值注意力(GVA)头结构。

您可以在 State Space Models 组织下找到所有原始 Mamba 2 检查点,但下面显示的示例使用了 mistralai/Mamba-Codestral-7B-v0.1,因为 Hugging Face 尚未支持原始检查点的实现。

其他基于 Mamba 2 的架构包括 BambaFalconH1Zamba2

此模型由 ArthurZ 贡献。点击右侧边栏的 Mamba 模型,可了解更多将 Mamba 应用于不同语言任务的示例。

以下示例展示了如何使用 PipelineAutoModel 和命令行生成文本。

流水线
自动模型
Transformers CLI
import torch
from transformers import pipeline

pipeline = pipeline(
    task="text-generation",
    model="mistralai/Mamba-Codestral-7B-v0.1",
    dtype=torch.bfloat16,
    device=0
)
pipeline("Plants create energy through a process known as")

量化通过以较低精度表示权重来减少大型模型的内存负担。有关更多可用量化后端,请参阅量化概述。

下面的示例使用 torchao 将权重量化为 4 位整数。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TorchAoConfig

quantization_config = TorchAoConfig("int4_weight_only", group_size=128)
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1", dtype=torch.bfloat16, quantization_config=quantization_config, device_map="auto")
input_ids = tokenizer("Plants create energy through a process known as", return_tensors="pt").to(model.device)

output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))

注意事项

  • Codestral Mamba 具有 groups=8,这与基于注意力的模型中的 kv 头数量相似。

  • Codestral Mamba 有两种不同的前向传播方式:torch_forwardcuda_kernels_forward,它们的结果预计会略有不同。

    • torch_forward 未经编译时比 cuda_kernels_forward 快 3-4 倍。
    • cuda_kernels_forward 使用原始 CUDA 内核(如果您的环境中可用)。在预填充(prefill)阶段,它的速度较慢,因为它需要“预热运行”(warmup run),这是因为 CPU 开销较高(有关更多详细信息,请参阅 这些 评论)。
  • 此模型中没有位置嵌入,但有一个 attention_mask 和特定的逻辑,在批量生成(batched generation)的情况下会掩盖两个位置的隐藏状态(有关更多详细信息,请参阅 此评论)。这(以及重写的 Mamba 2 内核的添加)导致了批量生成和缓存生成之间存在微小的差异。

  • SSM 算法在很大程度上依赖于张量收缩(tensor contractions),它具有与矩阵乘法(matmul)等效的操作,但运算顺序略有不同。这使得在较低精度下差异更大。

  • 与填充标记(padding tokens)对应的隐藏状态在两个地方被关闭,并且主要使用左填充(left-padding)进行测试。右填充(right-padding)会沿线传播噪声,并且不能保证产生令人满意的结果。tokenizer.padding_side = "left" 可确保您使用正确的填充侧。

  • 下面的示例演示了如何使用 PEFT 微调 Mamba 2。

from datasets import load_dataset
from peft import LoraConfig
from trl import SFTConfig, SFTTrainer

model_id = "mistralai/Mamba-Codestral-7B-v0.1"
dataset = load_dataset("Abirate/english_quotes", split="train")
training_args = SFTConfig(dataset_text_field="quote", gradient_checkpointing=True, per_device_train_batch_size=4)
lora_config =  LoraConfig(target_modules=["x_proj", "embeddings", "in_proj", "out_proj"])
trainer = SFTTrainer(
    model=model_id,
    args=training_args,
    train_dataset=dataset,
    peft_config=lora_config,
)
trainer.train()

Mamba2Config

class transformers.Mamba2Config

< >

( num_heads = 128 head_dim = 64 vocab_size = 32768 hidden_size = 4096 state_size = 128 num_hidden_layers = 64 layer_norm_epsilon = 1e-05 pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 expand = 2 conv_kernel = 4 n_groups = 8 use_bias = False use_conv_bias = True hidden_act = 'silu' initializer_range = 0.1 residual_in_fp32 = True time_step_rank = 'auto' time_step_min = 0.001 time_step_max = 0.1 time_step_floor = 0.0001 time_step_limit = (0.0, inf) rescale_prenorm_residual = False use_cache = True rms_norm = True chunk_size = 256 tie_word_embeddings = False **kwargs )

参数

  • num_heads (int, optional, defaults to 128) — Mamba 2 的演化矩阵的头数。
  • head_dim (int, optional, defaults to 64) — 每个头的维度。
  • vocab_size (int, optional, defaults to 32768) — MAMBA2 模型词汇表大小。定义调用 Mamba2Model 时传递的 inputs_ids 可以表示的不同标记的数量。
  • hidden_size (int, optional, defaults to 4096) — 嵌入和隐藏状态的维度。
  • state_size (int, optional, defaults to 128) — 状态空间潜在向量的形状。
  • num_hidden_layers (int, optional, defaults to 64) — 模型中的隐藏层数量。
  • layer_norm_epsilon (float, optional, defaults to 1e-05) — 层归一化层中使用的 epsilon。
  • pad_token_id (int, optional, defaults to 1) — 填充标记 ID。
  • bos_token_id (int, optional, defaults to 0) — 词汇表中开始标记的 ID。
  • eos_token_id (int, optional, defaults to 2) — 词汇表中结束标记的 ID。
  • expand (int, optional, defaults to 2) — 用于确定中间大小的扩展因子。
  • conv_kernel (int, optional, defaults to 4) — 卷积核的大小。
  • n_groups (int, optional, defaults to 8) — Mamba 2 演化矩阵的组数。
  • use_bias (bool, optional, defaults to False) — 是否在 mixer 块的 [“in_proj”, “out_proj”] 中使用偏置。
  • use_conv_bias (bool, optional, defaults to True) — 是否在 mixer 块的卷积层中使用偏置。
  • hidden_act (str, optional, defaults to "silu") — 解码器中的非线性激活函数(函数或字符串)。
  • initializer_range (float, optional, defaults to 0.1) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • residual_in_fp32 (bool, optional, defaults to True) — 残差是否应为 float32。如果设置为 False,残差将保持与模型其余部分相同的 dtype
  • time_step_rank (Union[int,str], optional, defaults to "auto") — 离散化投影矩阵的秩。"auto" 表示它将默认为 math.ceil(self.hidden_size / 16)
  • time_step_min (float, optional, defaults to 0.001) — 用于限制 dt_proj.bias 的最小 time_step
  • time_step_max (float, optional, defaults to 0.1) — 用于限制 dt_proj.bias 的最大 time_step
  • time_step_floor (float, optional, defaults to 0.0001) — dt_proj.bias 层初始化的最小钳位值。
  • time_step_limit (tuple, optional, defaults to (0.0, inf)) — 可接受的时间步长值范围。
  • rescale_prenorm_residual (bool, optional, defaults to False) — 在初始化时是否重缩放 out_proj 权重。
  • use_cache (bool, optional, defaults to True) — 是否使用缓存。
  • rms_norm (bool, optional, defaults to True) — 是否使用 RMS norm。
  • chunk_size (int, optional, defaults to 256) — 构成序列的块的大小。
  • tie_word_embeddings (bool, optional, defaults to False) — 是否绑定词嵌入。

这是用于存储 Mamba2Model 配置的类。它用于根据指定的参数实例化 MAMBA2 模型,定义模型架构。使用默认值实例化一个配置将得到一个与 MAMBA2 state-spaces/mamba2-2.8b 架构类似的配置。

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

示例

>>> from transformers import Mamba2Config, Mamba2Model

>>> # Initializing a Mamba2 configuration
>>> configuration = Mamba2Config()

>>> # Initializing a model (with random weights) from the configuration
>>> model = Mamba2Model(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

Mamba2Model

class transformers.Mamba2Model

< >

( 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 (Mamba2Model) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载模型的权重,只加载配置。请查看 from_pretrained() 方法以加载模型权重。

Mamba2 模型,输出原始的 hidden states,没有任何额外的头部。

此模型继承自 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.mamba2.modeling_mamba2.Mamba2Cache | None = None use_cache: bool | None = None output_hidden_states: bool | None = None return_dict: bool | None = None cache_position: torch.LongTensor | None = None attention_mask: torch.Tensor | None = None **kwargs ) transformers.models.mamba2.modeling_mamba2.Mamba2Outputtuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 词汇表中输入序列 token 的索引。默认情况下会忽略填充。

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

    什么是 input IDs?

  • inputs_embeds (torch.LongTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,您可以直接传入嵌入表示,而不是传入 input_ids。如果您希望比模型内部的嵌入查找矩阵对 input_ids 索引到关联向量的转换有更多控制,这会很有用。
  • cache_params (Mamba2Cache, optional) — 如果传入,模型将使用所有块的先前状态(这将提供与模型添加 state_input_ids + input_ids 作为上下文时相同的输出)。
  • use_cache (bool, optional) — 如果设置为 True,则返回 cache_params,可用于快速生成下一个 logits。
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (torch.LongTensor of shape (batch_size,), optional) — 当前输入在缓存中的位置。这用于确保缓存被正确更新。如果传入了 cache_params,则也应传入 cache_position
  • attention_mask (torch.Tensor of shape (batch_size, sequence_length), optional) — 用于避免对 padding token 索引执行 attention 的掩码。掩码值选择在 [0, 1]

    • 1 表示 未掩码 的 token,
    • 0 表示 已掩码 的 token。

    什么是 attention masks?

返回

transformers.models.mamba2.modeling_mamba2.Mamba2Outputtuple(torch.FloatTensor)

一个 transformers.models.mamba2.modeling_mamba2.Mamba2Output 或一个 torch.FloatTensor 的元组(如果传入了 return_dict=False 或当 config.return_dict=False 时),根据配置(Mamba2Config)和输入的不同而包含各种元素。

  • last_hidden_state (torch.FloatTensor | None.last_hidden_state, shape (batch_size, sequence_length, hidden_size), 默认为 None) — 模型最后一层的输出的隐藏状态序列。

  • cache_params (~models.mamba2.modeling_mamba2.Mamba2Cache | None.cache_params, defaults to None) — 上一个时间步的模型状态。可以在下一个 input_ids 的 forward 方法中使用,以避免提供旧的 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)

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

Mamba2Model 的 forward 方法,重写了 __call__ 特殊方法。

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

Mamba2LMHeadModel

class transformers.Mamba2ForCausalLM

< >

( 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 (Mamba2ForCausalLM) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载模型的权重,只加载配置。请查看 from_pretrained() 方法以加载模型权重。

MAMBA2 模型 transformer,顶部带有一个语言模型头(线性层,权重不与输入嵌入绑定)。

此模型继承自 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.mamba2.modeling_mamba2.Mamba2Cache | None = None labels: torch.LongTensor | None = None output_hidden_states: bool | None = None return_dict: bool | None = None use_cache: bool | None = None cache_position: torch.Tensor | None = None attention_mask: torch.Tensor | None = None logits_to_keep: int | torch.Tensor = 0 **kwargs ) transformers.models.mamba2.modeling_mamba2.Mamba2CausalLMOutputtuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 词汇表中输入序列 token 的索引。默认情况下会忽略填充。

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

    什么是 input IDs?

  • inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,您可以直接传入嵌入表示,而不是传入 input_ids。如果您希望比模型内部的嵌入查找矩阵对 input_ids 索引到关联向量的转换有更多控制,这会很有用。
  • cache_params (Mamba2Cache, optional) — 如果传入,模型将使用所有块的先前状态(这将提供与模型添加 state_input_ids + input_ids 作为上下文时相同的输出)。
  • labels (torch.LongTensor, 形状为 (batch_size, sequence_length), 可选) — 语言模型的标签。请注意,标签在模型内部被移位,即您可以设置 labels = input_ids。索引选择范围为 [-100, 0, ..., config.vocab_size]。所有设置为 -100 的标签都将被忽略(屏蔽),损失仅为在 [0, ..., config.vocab_size] 范围内的标签计算。
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。更多细节请参见返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。
  • use_cache (bool, 可选) — 如果设置为 True,将返回 cache_params,可用于快速生成下一个 logit。
  • cache_position (torch.LongTensor, 形状为 (batch_size,), 可选) — 当前输入在缓存中的位置。这用于确保缓存被正确更新。如果传递了 cache_params,也应传递 cache_position
  • attention_mask (torch.Tensor, 形状为 (batch_size, sequence_length), 可选) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选择范围为 [0, 1]

    • 1 表示未屏蔽的标记,
    • 0 表示被屏蔽的标记。

    什么是注意力掩码?

  • logits_to_keep (Union[int, torch.Tensor], 可选, 默认为 0) — 如果是 int,则计算最后 logits_to_keep 个标记的 logit。如果为 0,则计算所有 input_ids 的 logit(特殊情况)。仅最后一个标记的 logit 对于生成是必需的,并且仅为该标记计算它们可以节省内存,这对于长序列或大词汇量来说非常可观。如果为 torch.Tensor,则必须是 1D 且对应于序列长度维度中要保留的索引。这在使用打包张量格式(批量和序列长度的单维)时很有用。

返回

transformers.models.mamba2.modeling_mamba2.Mamba2CausalLMOutputtuple(torch.FloatTensor)

根据配置(Mamba2Config)和输入,一个 transformers.models.mamba2.modeling_mamba2.Mamba2CausalLMOutput 或一个 torch.FloatTensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含各种元素。

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

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

  • cache_params (~models.mamba2.modeling_mamba2.Mamba2Cache | None.cache_params, defaults to None) — 上一个时间步的模型状态。可以在下一个 input_ids 的 forward 方法中使用,以避免提供旧的 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.Mamba2ForCausalLM 的 forward 方法,覆盖了 __call__ 特殊方法。

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

示例

在 GitHub 上更新

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