Transformers 文档
Mamba
并获得增强的文档体验
开始使用
此模型于 2023 年 12 月 1 日在 HF 论文中发表,并于 2024 年 3 月 5 日贡献给 Hugging Face Transformers。
Mamba
Mamba 是一种选择性结构化状态空间模型(SSM),旨在解决 Transformer 在处理长序列时的计算效率低下问题。它是一个完全不含注意力(Attention-free)的架构,由 H3 和门控 MLP 模块(Mamba 模块)组合而成。Mamba 的“基于内容的推理”功能使其能够根据当前 token 聚焦于输入的特定部分。Mamba 还使用了一种新的硬件感知并行算法来弥补卷积运算的缺失。因此,Mamba 具有极快的推理速度,并且可以扩展到处理非常长的序列。
您可以在 State Space Models 组织下找到所有原始的 Mamba 检查点。
此模型由 Molbap 和 AntonV 贡献。点击右侧边栏中的 Mamba 模型,查看更多关于如何将 Mamba 应用于不同语言任务的示例。
下面的示例演示了如何使用 Pipeline、AutoModel 以及命令行来生成文本。
from transformers import pipeline
pipeline = pipeline(
task="text-generation",
model="state-spaces/mamba-130m-hf",
device=0
)
pipeline("Plants create energy through a process known as")量化通过以较低精度表示权重来减少大型模型的内存负担。有关更多可用量化后端,请参阅量化概述。
下面的示例使用 torchao 仅将权重压缩(量化)为 4 位整数。
from torchao.quantization import Int4WeightOnlyConfig
from transformers import AutoModelForCausalLM, AutoTokenizer, TorchAoConfig
quantization_config = Int4WeightOnlyConfig(group_size=128)
quantization_config = TorchAoConfig(quant_type=quant_config)
tokenizer = AutoTokenizer.from_pretrained("state-spaces/mamba-2.8b-hf")
model = AutoModelForCausalLM.from_pretrained("state-spaces/mamba-2.8b-hf", 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))注意事项
当前实现使用了原始的 CUDA 内核。其 FlashAttention 等效实现托管在 mamba-ssm 和 causal_conv1d 仓库中。如果您的硬件支持,请务必安装它们!
Mamba 堆叠了
mixer层,这与Attention层相当。您可以在MambaMixer类中找到 Mamba 的核心逻辑。下面的示例演示了如何使用 PEFT 对 Mamba 进行微调。
from datasets import load_dataset from trl import SFTConfig, SFTTrainer from peft import LoraConfig model_id = "state-spaces/mamba-130m-hf" dataset = load_dataset("Abirate/english_quotes", split="train") training_args = SFTConfig(dataset_text_field="quote") 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()
MambaConfig
class transformers.MambaConfig
< 源代码 >( 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 = 50280 hidden_size: int = 768 state_size: int = 16 num_hidden_layers: int = 32 layer_norm_epsilon: float = 1e-05 pad_token_id: int | None = 0 bos_token_id: int | None = 0 eos_token_id: int | list[int] | None = 0 expand: int = 2 conv_kernel: int = 4 use_bias: bool = False use_conv_bias: bool = True hidden_act: str = 'silu' initializer_range: float = 0.1 residual_in_fp32: bool = True time_step_rank: str | int = 'auto' time_step_scale: float = 1.0 time_step_min: float = 0.001 time_step_max: float = 0.1 time_step_init_scheme: str = 'random' time_step_floor: float = 0.0001 rescale_prenorm_residual: bool = False use_cache: bool = True use_mambapy: bool = False use_associative_scan: bool = True tie_word_embeddings: bool = True )
参数
- vocab_size (
int, 可选, 默认为50280) — 模型的词汇表大小。定义了input_ids可以表示的不同 token 的数量。 - hidden_size (
int, 可选, 默认为768) — 隐藏表示的维度。 - state_size (
int, 可选, 默认为16) — Mamba 层中 SSM 状态的大小(潜在状态维度)。 - num_hidden_layers (
int, 可选, 默认为32) — Transformer 解码器中的隐藏层数量。 - layer_norm_epsilon (
float, 可选, 默认为 1e-05) — 层归一化层中使用的 epsilon。 - pad_token_id (
int, 可选, 默认为0) — 词汇表中用于填充(padding)的 token id。 - bos_token_id (
int, 可选, 默认为0) — 词汇表中用于流开始(beginning-of-stream)的 token id。 - eos_token_id (
Union[int, list[int]], 可选, 默认为0) — 词汇表中用于流结束(end-of-stream)的 token id。 - expand (
int, 可选, 默认为 2) — 用于确定中间尺寸的扩展因子。 - conv_kernel (
int, 可选, 默认为4) — 卷积核的大小。 - use_bias (
bool, 可选, 默认为False) — 是否在 mixer 块的 [“in_proj”, “out_proj”] 中使用偏置(bias)。 - use_conv_bias (
bool, 可选, 默认为True) — 是否在 mixer 块的卷积层中使用偏置。 - hidden_act (
str, 可选, 默认为silu) — 解码器中的非线性激活函数(函数或字符串)。例如:"gelu","relu","silu"等。 - initializer_range (
float, 可选, 默认为0.1) — 用于初始化所有权重矩阵的截断正态初始化器(truncated_normal_initializer)的标准差。 - residual_in_fp32 (
bool, 可选, 默认为True) — 残差是否应为float32。如果设置为False,残差将保持与模型其余部分相同的dtype。 - time_step_rank (
Union[str, int], 可选, 默认为auto) — 增量(时间步长)投影的秩。可以设置为"auto"以自动设置。 - time_step_scale (
float, 可选, 默认为1.0) — 在离散化之前应用于时间步长增量的缩放比例。 - time_step_min (
float, 可选, 默认为0.001) — 用于限制dt_proj.bias的最小time_step。 - time_step_max (
float, 可选, 默认为0.1) — 用于限制dt_proj.bias的最大time_step。 - time_step_init_scheme (
str, 可选, 默认为random) — 时间步长增量的初始化方案。可以是"random"或"uniform"。 - time_step_floor (
float, 可选, 默认为0.0001) — 经过 softplus 激活后,离散时间步长增量的允许最小值。 - rescale_prenorm_residual (
bool, 可选, 默认为False) — 初始化时是否重新缩放out_proj权重。 - use_cache (
bool, 可选, 默认为True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅在config.is_decoder=True或模型是仅解码器的生成模型时相关。 - use_mambapy (
bool, 可选, 默认为False) — 如果无法使用基于 CUDA 的官方 Mamba 实现,则确定训练期间的后备策略。如果为True,则使用 mamba.py 实现。如果为False,则使用原生且较慢的实现。如果内存有限,请考虑切换到原生版本。 - use_associative_scan (
bool, 可选, 默认为True) — 是否使用 PyTorch 的torch._higher_order_ops.associative_scan进行并行扫描,而不是使用原生的顺序实现。关联扫描(associative scan)仅在torch.compile跟踪期间处于活动状态,且需要 torch >= 2.9.0。经测试,两条路径产生的数值结果相同(请参阅test_associative_scan_matches_sequential)。设置为False可回退到顺序循环。 - tie_word_embeddings (
bool, 可选, 默认为True) — 是否根据模型的tied_weights_keys映射来绑定权重嵌入。
这是用于存储 MambaModel 配置的配置类。它根据指定的参数实例化 Mamba 模型,定义模型架构。使用默认值实例化配置将产生与 state-spaces/mamba-2.8b 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。
示例
>>> from transformers import MambaConfig, MambaModel
>>> # Initializing a Mamba configuration
>>> configuration = MambaConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = MambaModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configMambaModel
class transformers.MambaModel
< 源代码 >( 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 (MambaModel) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
裸 Mamba 模型,输出原始隐藏状态,顶部没有任何特定的层(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.cache_utils.Cache | None = None use_cache: bool | None = None output_hidden_states: bool | None = None return_dict: bool | None = None attention_mask: torch.LongTensor | None = None **kwargs ) → MambaOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 词汇表中输入序列标记的索引。默认情况下将忽略填充(Padding)。索引可以使用 AutoTokenizer 获取。详细信息请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- inputs_embeds (
torch.LongTensor,形状为(batch_size, sequence_length, hidden_size),可选) — (可选)您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想比模型内部的嵌入查找矩阵更精细地控制如何将input_ids索引转换为关联向量,这将非常有用。 - cache_params (
Cache, 可选) — 如果传递该参数,模型将在所有块中使用之前的状态(这将给出所提供的input_ids的输出,就像模型将state_input_ids + input_ids作为上下文一样)。 - use_cache (
bool, 可选) — 如果设置为True,则返回cache_params,并可用于快速生成下一个 logits。 - output_hidden_states (
bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states。 - return_dict (
bool, 可选) — 是否返回 ModelOutput 而不是普通元组。 - attention_mask (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值在[0, 1]中选择:- 1 表示未被掩码的标记,
- 0 表示被掩码的标记。
返回
MambaOutput 或 tuple(torch.FloatTensor)
根据配置(MambaConfig)和输入,MambaOutput 或 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时)包含各种元素。
MambaModel 的前向传播方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)的torch.FloatTensor, 可选,默认为None) — 模型最后一层输出的隐藏状态序列。cache_params (
~cache_utils.Cache, 可选, 默认值为None) — 模型在最后一个时间步的状态。可以在带有下一个input_ids的 forward 方法中使用,以避免提供旧的input_ids。包括选择性扫描后的状态空间模型状态矩阵和卷积状态
hidden_states (
tuple[torch.FloatTensor],可选,在传入output_hidden_states=True或config.output_hidden_states=True时返回) —torch.FloatTensor元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
MambaLMHeadModel
class transformers.MambaForCausalLM
< 源代码 >( 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 (MambaForCausalLM) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
带有语言建模头部(线性层,权重与输入嵌入绑定)的 MAMBA 模型转换器。
该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< 源代码 >( input_ids: torch.LongTensor | None = None attention_mask: torch.LongTensor | None = None inputs_embeds: torch.FloatTensor | None = None cache_params: transformers.cache_utils.Cache | None = None labels: torch.LongTensor | None = None output_hidden_states: bool | None = None return_dict: bool | None = None use_cache: bool | None = None logits_to_keep: int | torch.Tensor = 0 **kwargs ) → MambaCausalLMOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 词汇表中输入序列标记的索引。默认情况下将忽略填充。索引可以使用 AutoTokenizer 获取。详细信息请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值在[0, 1]中选择:- 1 表示未被掩码的标记,
- 0 表示被掩码的标记。
- inputs_embeds (
torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),可选) — (可选)您可以选择直接传递嵌入表示,而不是传递input_ids。如果您想比模型内部的嵌入查找矩阵更精细地控制如何将input_ids索引转换为关联向量,这将非常有用。 - cache_params (
Cache, 可选) — 如果传递该参数,模型将在所有块中使用之前的状态(这将给出所提供的input_ids的输出,就像模型将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,可用于快速生成下一个 logits。 - logits_to_keep (
Union[int, torch.Tensor], 可选, 默认为0) — 如果是int,则计算最后logits_to_keep个 token 的 logits。如果为0,则计算所有input_ids的 logits(特殊情况)。生成时通常只需要最后一个 token 的 logits,仅计算该 token 的 logits 可以节省内存,这对于长序列或大词表大小的情况非常有效。如果是torch.Tensor,则必须是一维的,对应于要在序列长度维度中保留的索引。这在使用打包张量格式(批次和序列长度合并为单维度)时非常有用。
返回
MambaCausalLMOutput 或 tuple(torch.FloatTensor)
一个 MambaCausalLMOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或者当 config.return_dict=False 时),根据配置 (MambaConfig) 和输入包含各种元素。
MambaForCausalLM 的 forward 方法,重写了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
loss (
torch.FloatTensor形状为(1,),可选,当提供labels时返回) — 语言建模损失(用于下一个 token 预测)。logits (形状为
(batch_size, sequence_length, config.vocab_size)的torch.FloatTensor) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。cache_params (
~cache_utils.Cache, 可选, 默认值为None) — 模型在最后一个时间步的状态。可以在带有下一个input_ids的 forward 方法中使用,以避免提供旧的input_ids。包括选择性扫描后的状态空间模型状态矩阵和卷积状态
hidden_states (
tuple[torch.FloatTensor],可选,在传入output_hidden_states=True或config.output_hidden_states=True时返回) —torch.FloatTensor元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。