Transformers 文档

Zamba

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Zamba

PyTorch

Zamba 是由 Zyphra 训练的大型语言模型 (LLM),并以 Apache 2.0 许可证提供。请参阅 Zyphra Hugging Face 存储库获取模型权重。

该模型由 pglo 贡献。

模型详情

Zamba-7B-v1 是状态空间模型(特别是 Mamba)和 Transformer 的混合体,并使用下一个令牌预测进行训练。Zamba 在每 6 个 Mamba 块后使用一个共享的 Transformer 层。它使用 Mistral v0.1 分词器。我们在一系列小规模消融实验后得出这种架构。Zamba-7B-v1 在 1T 个文本和代码令牌上进行了预训练。

快速入门

前提条件

Zamba 要求您使用 transformers 4.46.0 或更高版本

pip install transformers>=4.45.0

为了运行优化的 Mamba 实现,您首先需要安装 mamba-ssmcausal-conv1d

pip install mamba-ssm causal-conv1d>=1.2.0

您还需要将模型放在 CUDA 设备上。

您可以不使用优化的 Mamba 内核来运行模型,但**不**建议这样做,因为它会导致显著降低延迟。为此,您需要在加载模型时指定 use_mamba_kernels=False

推理

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

tokenizer = AutoTokenizer.from_pretrained("Zyphra/Zamba-7B-v1")
model = AutoModelForCausalLM.from_pretrained("Zyphra/Zamba-7B-v1", device_map="auto", torch_dtype=torch.bfloat16)

input_text = "A funny prompt would be "
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")

outputs = model.generate(**input_ids, max_new_tokens=100)
print(tokenizer.decode(outputs[0]))

模型卡片

模型卡片可在以下地址找到

问题

有关模型输出的问题或社区讨论,请使用 Hugging Face 社区 论坛

许可证

模型权重通过 Apache 2.0 许可证开源。

ZambaConfig

class transformers.ZambaConfig

< >

( vocab_size = 32000 tie_word_embeddings = True hidden_size = 3712 attention_hidden_size = None intermediate_size = 14848 num_hidden_layers = 76 num_attention_heads = 16 attention_head_dim = None num_key_value_heads = 16 n_mamba_heads = 2 hidden_act = 'gelu' hidden_mamba_act = 'silu' initializer_range = 0.02 rms_norm_eps = 1e-05 use_cache = True num_logits_to_keep = 1 pad_token_id = 0 bos_token_id = 1 eos_token_id = 2 max_position_embeddings = 4096 attention_dropout = 0.0 attn_layer_period = 6 attn_layer_offset = 4 use_mamba_kernels = True mamba_d_state = 16 mamba_d_conv = 4 mamba_expand = 2 mamba_dt_rank = 'auto' time_step_min = 0.001 time_step_max = 0.1 time_step_floor = 0.0001 mamba_conv_bias = True mamba_proj_bias = False **kwargs )

参数

  • vocab_size (int, 可选, 默认为 32000) — Zamba 模型的词汇表大小。定义了调用 ZambaModel 时传递的 inputs_ids 可以表示的不同令牌的数量。
  • tie_word_embeddings (bool, 可选, 默认为 True) — 模型输入和输出词嵌入是否应该绑定。请注意,这仅在模型具有输出词嵌入层时才相关。
  • hidden_size (int, 可选, 默认为 3712) — 隐藏表示的维度。
  • attention_hidden_size (int, 可选) — 注意力层输入的隐藏表示维度。
  • intermediate_size (int, 可选, 默认为 14848) — MLP 表示的维度。
  • num_hidden_layers (int, 可选, 默认为 76) — 模型中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认为 16) — Transformer 解码器中每个注意力层的注意力头数量。
  • attention_head_dim (int, 可选) — Transformer 解码器中注意力头的维度。
  • num_key_value_heads (int, 可选, 默认为 16) — 用于实现分组查询注意力(Grouped Query Attention)的 key_value 头数量。如果 num_key_value_heads=None,模型将使用多头注意力(MHA);如果 num_key_value_heads=1,模型将使用多查询注意力(MQA),否则使用 GQA。将多头检查点转换为 GQA 检查点时,每个组的 key 和 value 头应通过对其组内的所有原始头进行平均池化来构建。更多详情,请查看 此论文
  • n_mamba_heads (int, 可选, 默认为 2) — 每个 Mamba 层的 Mamba 头数量。
  • hidden_act (strfunction, 可选, 默认为 "gelu") — 解码器中的非线性激活函数(函数或字符串)。
  • hidden_mamba_act (strfunction, 可选, 默认为 "silu") — Mamba 层中的非线性激活函数(函数或字符串)。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态分布初始化器的标准差。
  • rms_norm_eps (float, 可选, 默认为 1e-05) — rms 归一化层使用的 epsilon 值。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回上次键/值注意力(并非所有模型都使用)。仅当 config.is_decoder=True 时相关。
  • num_logits_to_keep (intNone, 可选, 默认为 1) — 生成过程中要计算的提示词 logits 数量。如果为 None,则计算所有 logits。如果为整数值,则仅计算最后 num_logits_to_keep 个 logits。默认值为 1,因为生成只需要最后一个提示词标记的 logits。对于长序列,整个序列的 logits 可能会占用大量内存,因此,设置 num_logits_to_keep=1 将显著减少内存占用。
  • pad_token_id (int, 可选, 默认为 0) — 填充标记的 ID。
  • bos_token_id (int, 可选, 默认为 1) — “序列开始”标记的 ID。
  • eos_token_id (int, 可选, 默认为 2) — “序列结束”标记的 ID。
  • max_position_embeddings (int, 可选, 默认为 4096) — 此值没有实际效果。此模型预期使用的最大序列长度。它可用于更长的序列,但性能可能会下降。
  • attention_dropout (float, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。
  • attn_layer_period (int, 可选, 默认为 6) — 每隔这么多层,我们将有一个共享注意力层
  • attn_layer_offset (int, 可选, 默认为 4) — 共享注意力层的偏移量
  • use_mamba_kernels (bool, 可选, 默认为 True) — 指示是否使用快速 mamba 内核的标志。仅当安装了 mamba-ssmcausal-conv1d 且 mamba 模块在 CUDA 设备上运行时才可用。如果设置为 True 且内核不可用,则引发 ValueError。
  • mamba_d_state (int, 可选, 默认为 16) — mamba 状态空间潜变量的维度
  • mamba_d_conv (int, 可选, 默认为 4) — mamba 卷积核的大小
  • mamba_expand (int, 可选, 默认为 2) — 用于确定 mamba 中间大小的扩展因子(相对于 hidden_size)
  • mamba_dt_rank (Union[int,str], 可选, 默认为 "auto") — mamba 离散化投影矩阵的秩。"auto" 表示将默认为 math.ceil(self.hidden_size / 16)
  • time_step_min (float, 可选, 默认为 0.001) — 用于限制 dt_proj_bias 的最小 time_step
  • time_step_max (float, 可选, 默认为 0.1) — 用于限制 dt_proj_bias 的最大 time_step
  • time_step_floor (float, 可选, 默认为 0.0001) — dt_proj.bias 层初始化的最小钳制值。
  • mamba_conv_bias (bool, 可选, 默认为 True) — 指示 mamba 混合器块的卷积层是否使用偏置的标志。
  • mamba_proj_bias (bool, 可选, 默认为 False) — 指示 mamba 混合器块的输入和输出投影([“in_proj”, “out_proj”])是否使用偏置的标志

这是用于存储 ZambaModel 配置的配置类。它用于根据指定参数实例化 Zamba 模型,定义模型架构。使用默认值实例化配置将生成与 Zamba-v0.1 模型类似的配置。

Zyphra/Zamba-7B-v1

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

ZambaModel

class transformers.ZambaModel

< >

( config: ZambaConfig )

参数

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

裸 Zamba 模型输出原始隐藏状态,不带任何特定头部。

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

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档中与一般用法和行为相关的所有事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[transformers.models.zamba.modeling_zamba.ZambaHybridDynamicCache] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None ) transformers.modeling_outputs.BaseModelOutputWithPasttuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), 可选) — 掩码,用于避免对填充 token 索引执行注意力操作。掩码值选择范围为 [0, 1]

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

    什么是注意力掩码?

  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length), 可选) — 每个输入序列 token 在位置嵌入中的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是位置 ID?

  • past_key_values (~models.zamba.modeling_zamba.ZambaHybridDynamicCache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速序列解码。这通常由模型在解码的先前阶段返回的 past_key_values 组成,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。这也被称为旧版缓存格式。

    模型将输出与输入相同的缓存格式。如果未传递 past_key_values,则将返回旧版缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后一个 input_ids(那些没有将其过去的键值状态提供给此模型的)形状为 (batch_size, 1),而不是所有 input_ids 形状为 (batch_size, sequence_length)

  • inputs_embeds (torch.FloatTensor 形状为 (batch_size, sequence_length, hidden_size), 可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递 input_ids。如果你想对如何将 input_ids 索引转换为关联向量有更多控制,而不是使用模型的内部嵌入查找矩阵,这会很有用。
  • use_cache (bool, 可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (torch.LongTensor 形状为 (sequence_length), 可选) — 描述输入序列 token 在序列中位置的索引。与 position_ids 不同,此张量不受填充影响。它用于在正确位置更新缓存并推断完整的序列长度。

返回

transformers.modeling_outputs.BaseModelOutputWithPasttuple(torch.FloatTensor)

transformers.modeling_outputs.BaseModelOutputWithPasttorch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包含根据配置 (ZambaConfig) 和输入的不同元素。

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

    如果使用了 past_key_values,则只输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个隐藏状态。

  • past_key_values (Cache, 可选, 当传递 use_cache=True 或当 config.use_cache=True 时返回) — 这是一个 Cache 实例。有关详细信息,请参阅我们的 kv 缓存指南

    包含预先计算的隐藏状态(自注意力块中的键和值,以及如果 config.is_encoder_decoder=True 则可选地在交叉注意力块中),可用于(参见 past_key_values 输入)加速顺序解码。

  • hidden_states (tuple(torch.FloatTensor), 可选, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(如果模型有嵌入层,则一个用于嵌入输出,加上每个层的一个用于输出),形状为 (batch_size, sequence_length, hidden_size)

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

  • attentions (tuple(torch.FloatTensor), 可选, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

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

尽管 forward pass 的配方需要在此函数中定义,但之后应该调用 Module 实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

ZambaForCausalLM

class transformers.ZambaForCausalLM

< >

( config: ZambaConfig )

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[transformers.models.zamba.modeling_zamba.ZambaHybridDynamicCache] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **loss_kwargs ) transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), 可选) — 掩码,用于避免对填充 token 索引执行注意力操作。掩码值选择范围为 [0, 1]

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

    什么是注意力掩码?

  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length), 可选) — 每个输入序列 token 在位置嵌入中的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是位置 ID?

  • past_key_values (~models.zamba.modeling_zamba.ZambaHybridDynamicCache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速序列解码。这通常由模型在解码的先前阶段返回的 past_key_values 组成,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。这也被称为旧版缓存格式。

    模型将输出与输入相同的缓存格式。如果未传递 past_key_values,则将返回旧版缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后一个 input_ids(那些没有将其过去的键值状态提供给此模型的)形状为 (batch_size, 1),而不是所有 input_ids 形状为 (batch_size, sequence_length)

  • inputs_embeds (torch.FloatTensor 形状为 (batch_size, sequence_length, hidden_size), 可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递 input_ids。如果你想对如何将 input_ids 索引转换为关联向量有更多控制,而不是使用模型的内部嵌入查找矩阵,这会很有用。
  • labels (torch.LongTensor 形状为 (batch_size, sequence_length), 可选) — 用于计算掩码语言建模损失的标签。索引应为 [0, ..., config.vocab_size] 或 -100(参见 input_ids docstring)。索引设置为 -100 的 token 将被忽略(掩码),损失仅针对标签在 [0, ..., config.vocab_size] 中的 token 计算。
  • use_cache (bool, 可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (torch.LongTensor 形状为 (sequence_length), 可选) — 描述输入序列 token 在序列中位置的索引。与 position_ids 不同,此张量不受填充影响。它用于在正确位置更新缓存并推断完整的序列长度。
  • logits_to_keep (Union[int, torch.Tensor], 默认为 0) — 如果是 int,则计算最后 logits_to_keep 个 token 的 logits。如果是 0,则计算所有 input_ids 的 logits(特殊情况)。生成时只需要最后一个 token 的 logits,只计算该 token 可以节省内存,对于长序列或大词汇量来说,这会变得相当重要。如果是 torch.Tensor,则必须是 1D,对应于序列长度维度中要保留的索引。这在使用 packed tensor 格式(批处理和序列长度的单维度)时很有用。

返回

transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

transformers.modeling_outputs.CausalLMOutputWithPasttorch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包含根据配置 (ZambaConfig) 和输入的不同元素。

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

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

  • past_key_values (Cache, 可选, 当传递 use_cache=True 或当 config.use_cache=True 时返回) — 这是一个 Cache 实例。有关详细信息,请参阅我们的 kv 缓存指南

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 past_key_values 输入)加速顺序解码。

  • hidden_states (tuple(torch.FloatTensor), 可选, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(如果模型有嵌入层,则一个用于嵌入输出,加上每个层的一个用于输出),形状为 (batch_size, sequence_length, hidden_size)

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

  • attentions (tuple(torch.FloatTensor), 可选, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

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

尽管 forward pass 的配方需要在此函数中定义,但之后应该调用 Module 实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

示例

>>> from transformers import AutoTokenizer, ZambaForCausalLM

>>> model = ZambaForCausalLM.from_pretrained("Zyphra/Zamba-7B-v1")
>>> tokenizer = AutoTokenizer.from_pretrained("Zyphra/Zamba-7B-v1")

>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."

ZambaForSequenceClassification

class transformers.ZambaForSequenceClassification

< >

( config )

参数

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

带有序列分类头部(线性层)的 Zamba 模型。

ZambaForSequenceClassification 像其他因果模型(如 GPT-2)一样,使用最后一个 token 进行分类。

由于它对最后一个标记进行分类,因此需要知道最后一个标记的位置。如果在配置中定义了 pad_token_id,它会在每一行中找到不是填充标记的最后一个标记。如果没有定义 pad_token_id,它会简单地取批处理中每一行的最后一个值。由于在传入 inputs_embeds 而不是 input_ids 时无法猜测填充标记,因此它也这样做(取批处理中每一行的最后一个值)。

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

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档中与一般用法和行为相关的所有事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, list[torch.FloatTensor], NoneType] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.SequenceClassifierOutputWithPasttuple(torch.FloatTensor)

参数

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

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

    什么是 input ID?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 掩码,用于避免对填充标记索引执行注意力操作。掩码值选择在 [0, 1] 之间:

    • 1 表示未被掩盖的标记,
    • 0 表示被掩盖的标记。

    什么是注意力掩码?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是 position ID?

  • past_key_values (Union[~cache_utils.Cache, list[torch.FloatTensor], NoneType]) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速序列解码。这通常包括模型在解码上一阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含两个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。这也被称为传统缓存格式。

    模型将输出与输入相同的缓存格式。如果没有传入 past_key_values,将返回传统缓存格式。

    如果使用 past_key_values,用户可以选择只输入形状为 (batch_size, 1) 的最后一个 input_ids(那些没有将其过去的键值状态提供给此模型的),而不是形状为 (batch_size, sequence_length) 的所有 input_ids

  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果您希望对如何将 input_ids 索引转换为关联向量有比模型内部嵌入查找矩阵更多的控制,这会很有用。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 之间。如果 config.num_labels == 1,则计算回归损失(均方损失),如果 config.num_labels > 1,则计算分类损失(交叉熵)。
  • use_cache (bool, 可选) — 如果设置为 True,将返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。更多详细信息请参见返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。更多详细信息请参见返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是纯元组。

返回

transformers.modeling_outputs.SequenceClassifierOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.SequenceClassifierOutputWithPast 或一个 torch.FloatTensor 元组(如果传入 return_dict=False 或当 config.return_dict=False 时),其中包含根据配置 (ZambaConfig) 和输入而定的各种元素。

  • loss (形状为 (1,)torch.FloatTensor可选,当提供 labels 时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。

  • logits (形状为 (batch_size, config.num_labels)torch.FloatTensor) — 分类(如果 config.num_labels==1,则为回归)分数(SoftMax 之前)。

  • past_key_values (Cache, 可选, 当传递 use_cache=True 或当 config.use_cache=True 时返回) — 这是一个 Cache 实例。有关详细信息,请参阅我们的 kv 缓存指南

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 past_key_values 输入)加速顺序解码。

  • hidden_states (tuple(torch.FloatTensor), 可选, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(如果模型有嵌入层,则一个用于嵌入输出,加上每个层的一个用于输出),形状为 (batch_size, sequence_length, hidden_size)

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

  • attentions (tuple(torch.FloatTensor), 可选, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

ZambaForSequenceClassification 的 forward 方法覆盖了 __call__ 特殊方法。

尽管 forward pass 的配方需要在此函数中定义,但之后应该调用 Module 实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

单标签分类示例

>>> import torch
>>> from transformers import AutoTokenizer, ZambaForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("Zyphra/Zamba-7B-v1")
>>> model = ZambaForSequenceClassification.from_pretrained("Zyphra/Zamba-7B-v1")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = ZambaForSequenceClassification.from_pretrained("Zyphra/Zamba-7B-v1", num_labels=num_labels)

>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...

多标签分类示例

>>> import torch
>>> from transformers import AutoTokenizer, ZambaForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("Zyphra/Zamba-7B-v1")
>>> model = ZambaForSequenceClassification.from_pretrained("Zyphra/Zamba-7B-v1", problem_type="multi_label_classification")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = ZambaForSequenceClassification.from_pretrained(
...     "Zyphra/Zamba-7B-v1", num_labels=num_labels, problem_type="multi_label_classification"
... )

>>> labels = torch.sum(
...     torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss
< > 在 GitHub 上更新