Transformers 文档

StableLM

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

StableLM

概述

StableLM 3B 4E1T 由 Stability AI 在 StableLM 3B 4E1T:技术报告 中提出,是多轮预训练语言模型系列中的第一个模型。

模型细节

StableLM 3B 4E1T 是一个仅解码器基础语言模型,在包含 1 万亿个标记的多样化英语和代码数据集上进行了四轮预训练。模型架构基于 Transformer,并使用了部分旋转位置嵌入、SwiGLU 激活函数、层归一化等。

我们还提供了StableLM Zephyr 3B,这是一个针对指令微调的模型版本,可用于基于聊天的应用程序。

使用技巧

  • 该架构类似于LLaMA,但将RoPE应用于25%的头嵌入维度,使用LayerNorm而不是RMSNorm,并可选地使用QKV偏置项。
  • 基于StableLM 3B 4E1T的模型使用与GPTNeoXTokenizerFast相同的标记器。

StableLM 3B 4E1TStableLM Zephyr 3B可以在Huggingface Hub上找到。

以下代码片段演示了如何使用StableLM 3B 4E1T进行推理

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
>>> device = "cuda" # the device to load the model onto

>>> set_seed(0)

>>> tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablelm-3b-4e1t")
>>> model = AutoModelForCausalLM.from_pretrained("stabilityai/stablelm-3b-4e1t")
>>> model.to(device)
>>> model_inputs = tokenizer("The weather is always wonderful in", return_tensors="pt").to(model.device)

>>> generated_ids = model.generate(**model_inputs, max_length=32, do_sample=True)
>>> responses = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
>>> responses
['The weather is always wonderful in Costa Rica, which makes it a prime destination for retirees. That’s where the Pensionado program comes in, offering']

结合StableLM和Flash Attention 2

首先,确保已安装最新版本的Flash Attention v2。

pip install -U flash-attn --no-build-isolation

还要确保您的硬件与Flash-Attention 2兼容。在flash-attn存储库的官方文档中阅读更多相关信息。注意:您必须以半精度加载模型(例如torch.bfloat16)。

现在,要使用Flash Attention 2运行模型,请参考下面的代码片段。

>>> import torch
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
>>> device = "cuda" # the device to load the model onto

>>> set_seed(0)

>>> tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablelm-3b-4e1t")
>>> model = AutoModelForCausalLM.from_pretrained("stabilityai/stablelm-3b-4e1t", torch_dtype=torch.bfloat16, attn_implementation="flash_attention_2")
>>> model.to(device)
>>> model_inputs = tokenizer("The weather is always wonderful in", return_tensors="pt").to(model.device)

>>> generated_ids = model.generate(**model_inputs, max_length=32, do_sample=True)
>>> responses = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
>>> responses
['The weather is always wonderful in Costa Rica, which makes it a prime destination for retirees. That’s where the Pensionado program comes in, offering']

StableLmConfig

transformers.StableLmConfig

< >

( vocab_size = 50304 intermediate_size = 6912 hidden_size = 2560 num_hidden_layers = 32 num_attention_heads = 32 num_key_value_heads = 32 hidden_act = 'silu' max_position_embeddings = 4096 initializer_range = 0.02 layer_norm_eps = 1e-05 use_cache = True tie_word_embeddings = False rope_theta = 10000 rope_scaling = None use_qkv_bias = False qk_layernorm = False use_parallel_residual = False hidden_dropout = 0.0 attention_dropout = 0.0 partial_rotary_factor = 0.25 bos_token_id = 0 eos_token_id = 0 **kwargs )

参数

  • vocab_size (int, 可选, 默认为 50304) — StableLM 模型的词汇量大小。定义了调用StableLmModel时传递的inputs_ids可以表示的不同标记的数量。
  • intermediate_size (int, 可选, 默认为 6912) — MLP 表示的维度。
  • hidden_size (int, 可选, 默认为 2560) — Transformer 解码器中的隐藏层数。
  • num_hidden_layers (int可选,默认为 32) — Transformer 解码器中的隐藏层数。
  • num_attention_heads (int可选,默认为 32) — Transformer 编码器中每个注意力层的注意力头数。
  • num_key_value_heads (int可选,默认为 32) — 这是应使用多少个键值头来实现分组查询注意力。如果 num_key_value_heads=num_attention_heads,则模型将使用多头注意力 (MHA),如果 num_key_value_heads=1,则模型将使用多查询注意力 (MQA),否则将使用 GQA。在将多头检查点转换为 GQA 检查点时,每个组键和值头应通过对该组中所有原始头进行平均池化来构建。有关更多详细信息,请查看这篇论文。如果未指定,则默认为 num_attention_heads
  • hidden_act (strfunction可选,默认为 "silu") — 非线性激活函数(函数或字符串)。
  • max_position_embeddings (int可选,默认为 4096) — 此模型可能使用的最大序列长度。通常将此值设置为一个较大的值以防万一(例如,512 或 1024 或 2048)。
  • initializer_range (float可选,默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • layer_norm_eps (float可选,默认为 1e-05) — 正则化层使用的 epsilon。
  • use_cache (bool可选,默认为 True) — 模型是否应该返回最后的键/值注意力(并非所有模型都使用)。仅当 config.is_decoder=True 时才相关。
  • tie_word_embeddings (bool可选,默认为 False) — 模型的输入和输出词嵌入是否应该绑定。
  • rope_theta (float可选,默认为 10000.0) — RoPE 嵌入的基本周期。
  • rope_scaling (Dict, 可选) — 包含 RoPE 嵌入缩放配置的字典。注意:如果您应用新的 rope 类型并且希望模型在更长的 max_position_embeddings 上工作,我们建议您相应地更新此值。预期内容:rope_type (str):要使用的 RoPE 子变体。可以是 [‘default’, ‘linear’, ‘dynamic’, ‘yarn’, ‘longrope’, ‘llama3’] 中的一个,其中 ‘default’ 是原始 RoPE 实现。factor (float, 可选):用于除 ‘default’ 之外的所有 rope 类型。应用于 RoPE 嵌入的缩放因子。在大多数缩放类型中,factor 为 x 将使模型能够处理长度为 x * 原始最大预训练长度的序列。original_max_position_embeddings (int, 可选):用于 ‘dynamic’, ‘longrope’ 和 ‘llama3’。预训练期间使用的原始最大位置嵌入。attention_factor (float, 可选):用于 ‘yarn’ 和 ‘longrope’。应用于注意力计算的缩放因子。如果未指定,则默认为实现推荐的值,使用 factor 字段推断建议值。beta_fast (float, 可选):仅用于 ‘yarn’。用于在线性斜坡函数中设置外推(仅)边界的参数。如果未指定,则默认为 32。beta_slow (float, 可选):仅用于 ‘yarn’。用于在线性斜坡函数中设置插值(仅)边界的参数。如果未指定,则默认为 1。short_factor (List[float], 可选):仅用于 ‘longrope’。应用于短上下文(< original_max_position_embeddings)的缩放因子。必须是与隐藏大小除以注意力头数除以 2 相同长度的数字列表long_factor (List[float], 可选):仅用于 ‘longrope’。应用于长上下文(< original_max_position_embeddings)的缩放因子。必须是与隐藏大小除以注意力头数除以 2 相同长度的数字列表low_freq_factor (float, 可选):仅用于 ‘llama3’。应用于 RoPE 的低频分量的缩放因子high_freq_factor (float, 可选):仅用于 ‘llama3’。应用于 RoPE 的高频分量的缩放因子
  • use_qkv_bias (bool, 可选,默认为 False) — 模型是否应该为 qkv 层使用偏置。
  • qk_layernorm (bool, 可选,默认为 False) — 是否在投影隐藏状态后,对每个头部进行查询和键的归一化。
  • use_parallel_residual (bool, 可选,默认为 False) — 是否在每个 Transformer 层中使用“并行”公式,这可以在大规模情况下略微提高训练速度。
  • hidden_dropout (float, 可选,默认为 0.0) — 将 MLP 应用于隐藏状态后的 dropout 比率。
  • attention_dropout (float, 可选,默认为 0.0) — 注意力概率的 dropout 比率。
  • partial_rotary_factor (float, 可选,默认为 0.25) — 将具有旋转嵌入的查询和键的百分比。
  • bos_token_id (int, 可选,默认为 0) — 词汇表中 BOS token 的 id。
  • eos_token_id (int, 可选,默认为 0) — 词汇表中 EOS token 的 id。

这是用于存储 ~StableLmModel 配置的配置类。它用于根据指定的参数实例化 StableLM 模型,定义模型架构。使用默认值实例化配置将产生与 StableLM stabilityai/stablelm-3b-4e1t 架构类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。

示例

>>> from transformers import StableLmModel, StableLmConfig

>>> # Initializing a StableLM stablelm-3b style configuration
>>> configuration = StableLmConfig()

StableLmModel

transformers.StableLmModel

< >

( config: StableLmConfig )

参数

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

基本的 StableLm 模型,输出原始隐藏状态,没有任何特定的头部。此模型继承自 PreTrainedModel。查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入的大小、修剪头部等)。

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

包含 config.num_hidden_layers 层的 Transformer 解码器。每一层都是一个 StableLmDecoderLayer

前向传播

< >

( input_ids: LongTensor = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Optional = None inputs_embeds: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None cache_position: Optional = None )

参数

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

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

    什么是输入 ID?

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

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

    什么是注意力掩码?

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

    如果使用 past_key_values,则可以选择仅输入最后一个 decoder_input_ids(请参阅 past_key_values)。

    如果要更改填充行为,则应阅读 modeling_opt._prepare_decoder_attention_mask 并修改以满足您的需求。有关默认策略的更多信息,请参阅 论文 中的图 1。

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

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor)), 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的先前阶段返回的 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(尚未为此模型提供其过去键值状态的 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), 可选) — 描述输入序列标记在序列中的位置的索引。与 position_ids 相反,此张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。

The StableLmModel 正向方法,覆盖了 __call__ 特殊方法。

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

StableLmForCausalLM

transformers.StableLmForCausalLM

< >

( config )

前向传播

< >

( input_ids: LongTensor = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Optional = None inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None cache_position: Optional = None num_logits_to_keep: int = 0 ) transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

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

    什么是注意力掩码?

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

    如果使用 past_key_values,则可以选择仅输入最后一个 decoder_input_ids(请参阅 past_key_values)。

    如果要更改填充行为,则应阅读 modeling_opt._prepare_decoder_attention_mask 并修改为您的需求。有关默认策略的更多信息,请参阅 论文 中的图 1。

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

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor))可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的先前阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(tuple(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 索引转换为关联向量,这将很有用。
  • 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)可选) — 描述输入序列令牌在序列中的位置的索引。与position_ids相反,此张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。

    参数 — labels (torch.LongTensor 形状为(batch_size, sequence_length)可选): 用于计算掩码语言建模损失的标签。索引应在[0, ..., config.vocab_size]或 -100 中(请参阅input_ids文档字符串)。索引设置为-100的令牌将被忽略(掩码),损失仅针对标签在[0, ..., config.vocab_size]中的令牌计算。

    num_logits_to_keep (int, 可选): 计算最后num_logits_to_keep个令牌的 logits。如果为0,则计算所有input_ids的 logits(特殊情况)。生成只需要最后一个令牌的 logits,并且仅为该令牌计算它们可以节省内存,对于长序列或大型词汇量来说,这变得非常重要。

返回

transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

一个transformers.modeling_outputs.CausalLMOutputWithPast 或一个torch.FloatTensor的元组(如果传递了return_dict=False或当config.return_dict=False时),包含根据配置(StableLmConfig)和输入而变化的各种元素。

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

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

  • past_key_values (tuple(tuple(torch.FloatTensor))可选,当传递use_cache=True或当config.use_cache=True时返回) — 长度为config.n_layerstuple(torch.FloatTensor)元组,每个元组具有两个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量。

    包含预先计算的隐藏状态(自注意力块中的键和值),可用于(参见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之后的注意力权重,用于计算自注意力头中的加权平均值。

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

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

示例

>>> from transformers import AutoTokenizer, StableLmForCausalLM

>>> model = StableLmForCausalLM.from_pretrained("stabilityai/stablelm-3b-4e1t")
>>> tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablelm-3b-4e1t")

>>> prompt = "The weather is always wonderful in"
>>> 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]
'The weather is always wonderful in the summer in the city of San Diego. The city is located on the coast of the Pacific Ocean and is surrounded by'

StableLmForSequenceClassification

transformers.StableLmForSequenceClassification

< >

( config )

参数

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

具有序列分类头部(线性层)的 StableLm 变压器。

StableLmForSequenceClassification 使用最后一个令牌进行分类,就像其他因果模型(例如 GPT-2)一样。

由于它对最后一个令牌进行分类,因此需要知道最后一个令牌的位置。如果在配置中定义了pad_token_id,它会找到每一行中不是填充令牌的最后一个令牌。如果没有定义pad_token_id,它只需获取批次中每一行的最后一个值。由于它无法在传递inputs_embeds而不是input_ids时猜测填充令牌,因此它执行相同的操作(获取批次中每一行的最后一个值)。

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

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

前向传播

< >

( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Union = None inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None )

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。默认情况下,如果您提供填充,填充将被忽略。

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

    什么是输入 ID?

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

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

    什么是注意力掩码?

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

    如果使用past_key_values,则可以选择仅输入最后一个decoder_input_ids(参见past_key_values)。

    如果要更改填充行为,则应阅读modeling_opt._prepare_decoder_attention_mask并根据您的需要进行修改。有关默认策略的更多信息,请参阅论文中的图 1。

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

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor))可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的先前阶段返回的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), 可选) — 表示输入序列令牌在序列中的位置的索引。与position_ids相反,此张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。
  • labels (torch.LongTensor 形状为 (batch_size,), 可选) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]范围内。如果config.num_labels == 1,则计算回归损失(均方误差损失),如果config.num_labels > 1,则计算分类损失(交叉熵损失)。

The StableLmForSequenceClassification 前向方法覆盖了__call__特殊方法。

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

StableLmForTokenClassification

class transformers.StableLmForTokenClassification

< >

( config )

参数

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

带有令牌分类头的 StableLm 模型转换器(隐藏状态输出顶部的线性层),例如用于命名实体识别 (NER) 任务。

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

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

前向传播

< >

( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Optional = None inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None )

参数

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

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

    什么是输入 ID?

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

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

    什么是注意力掩码?

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

    如果使用 past_key_values,则可以选择仅输入最后一个 decoder_input_ids(参见 past_key_values)。

    如果要更改填充行为,则应阅读 modeling_opt._prepare_decoder_attention_mask 并根据您的需要进行修改。有关默认策略的更多信息,请参阅 论文 中的图 1。

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

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor)), 可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的先前阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(tuple(torch.FloatTensor)),每个元组包含 2 个形状为 (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 索引转换为关联向量(而不是模型的内部嵌入查找矩阵)进行更多控制,这将非常有用。
  • 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)可选) — 表示输入序列令牌在序列中的位置的索引。与 position_ids 不同,此张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。
  • labels (torch.LongTensor 形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 范围内。如果 config.num_labels == 1,则计算回归损失(均方误差损失),如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

StableLmForTokenClassification 正向方法覆盖了 __call__ 特殊方法。

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

< > 在 GitHub 上更新