Transformers 文档

GraniteMoeShared

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

GraniteMoeShared

概述

GraniteMoe模型由Yikang Shen, Matthew Stallone, Mayank Mishra, Gaoyuan Zhang, Shawn Tan, Aditya Prasad, Adriana Meza Soria, David D. Cox 和 Rameswar Panda在Power Scheduler: A Batch Size and Token Number Agnostic Learning Rate Scheduler中提出。

此外,这个GraniteMoeSharedModel类为Moe添加了共享专家。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_path = "ibm-research/moe-7b-1b-active-shared-experts"
tokenizer = AutoTokenizer.from_pretrained(model_path)

# drop device_map if running on CPU
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto")
model.eval()

# change input text as desired
prompt = "Write a code to find the maximum value in a list of numbers."

# tokenize the text
input_tokens = tokenizer(prompt, return_tensors="pt")
# generate output tokens
output = model.generate(**input_tokens, max_new_tokens=100)
# decode output tokens into text
output = tokenizer.batch_decode(output)
# loop over the batch to print, in this example the batch size is 1
for i in output:
    print(i)

此HF实现由Mayank MishraShawn TanSukriti Sharma贡献。

GraniteMoeSharedConfig

class transformers.GraniteMoeSharedConfig

< >

( vocab_size = 32000 hidden_size = 4096 intermediate_size = 11008 num_hidden_layers = 32 num_attention_heads = 32 num_key_value_heads = None hidden_act = 'silu' max_position_embeddings = 2048 initializer_range = 0.02 rms_norm_eps = 1e-06 use_cache = True pad_token_id = None bos_token_id = 1 eos_token_id = 2 tie_word_embeddings = False rope_theta = 10000.0 rope_scaling = None attention_bias = False attention_dropout = 0.0 embedding_multiplier = 1.0 logits_scaling = 1.0 residual_multiplier = 1.0 attention_multiplier = 1.0 num_local_experts = 8 num_experts_per_tok = 2 output_router_logits = False router_aux_loss_coef = 0.001 shared_intermediate_size = 0 **kwargs )

参数

  • vocab_size (int, 可选, 默认值为 32000) — GraniteMoeShared 模型的词汇表大小。定义了调用GraniteMoeSharedModel时传入的inputs_ids所能表示的不同token的数量。
  • hidden_size (int, 可选, 默认值为 4096) — 隐藏表示的维度。
  • intermediate_size (int, 可选, 默认值为 11008) — MLP 表示的维度。
  • num_hidden_layers (int, 可选, 默认值为 32) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认值为 32) — Transformer 解码器中每个注意力层中的注意力头数量。
  • num_key_value_heads (int, 可选) — 用于实现分组查询注意力(Grouped Query Attention)的键值头数量。如果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, 可选, 默认值为 2048) — 该模型可能使用的最大序列长度。
  • initializer_range (float, 可选, 默认值为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • rms_norm_eps (float, 可选, 默认值为 1e-06) — rms 归一化层使用的 epsilon。
  • use_cache (bool, 可选, 默认值为 True) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。仅当config.is_decoder=True时相关。
  • pad_token_id (int, 可选) — 填充token ID。
  • bos_token_id (int, 可选, 默认值为 1) — 流开始token ID。
  • eos_token_id (int, 可选, 默认值为 2) — 流结束token ID。
  • tie_word_embeddings (bool, 可选, 默认值为 False) — 是否绑定词嵌入。
  • rope_theta (float, 可选, 默认值为 10000.0) — RoPE 嵌入的基周期。
  • rope_scaling (Dict, 可选) — 包含 RoPE 嵌入缩放配置的字典。目前支持两种缩放策略:线性缩放和动态缩放。它们的缩放因子必须是大于1的浮点数。预期格式为 {"type": 策略名称, "factor": 缩放因子}。使用此标志时,请勿将max_position_embeddings更新为预期的最大新值。有关这些缩放策略行为的更多信息,请参阅以下讨论串:https://www.reddit.com/r/LocalLLaMA/comments/14mrgpr/dynamically_scaled_rope_further_increases/。这是一个实验性功能,在未来的版本中可能会有破坏性的API更改。
  • attention_bias (bool, 可选, 默认值为 False) — 在自注意力过程中,查询、键、值和输出投影层是否使用偏置。
  • attention_dropout (float, 可选, 默认值为 0.0) — 注意力概率的 dropout 比率。
  • embedding_multiplier (float, 可选, 默认值为 1.0) — 嵌入乘数。
  • logits_scaling (float, 可选, 默认值为 1.0) — 输出 logits 的除数。
  • residual_multiplier (float, 可选, 默认值为 1.0) — 残差乘数。
  • attention_multiplier (float, 可选, 默认值为 1.0) — 注意力乘数。
  • num_local_experts (int, 可选, 默认值为 8) — 专家总数。
  • num_experts_per_tok (int, 可选, 默认值为 2) — 每个token的专家数量。
  • output_router_logits (bool, 可选, 默认值为 False) — 模型是否应返回路由器的 logits。启用此选项也将允许模型输出辅助损失。
  • router_aux_loss_coef (float, 可选, 默认值为 0.001) — 路由器辅助损失系数。
  • shared_intermediate_size (int, 可选, 默认值为 0) — 共享专家的中间大小。0表示没有共享专家。

这是用于存储 GraniteMoeSharedModel 配置的配置类。它用于根据指定的参数实例化 GraniteMoeShared 模型,定义模型架构。使用默认值实例化配置将产生类似于 ibm-research/moe-7b-1b-active-shared-experts 的配置。

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

>>> from transformers import GraniteMoeSharedModel, GraniteMoeSharedConfig

>>> # Initializing a GraniteMoeShared granitemoe-3b style configuration
>>> configuration = GraniteMoeSharedConfig()

>>> # Initializing a model from the granitemoe-7b style configuration
>>> model = GraniteMoeSharedModel(configuration)

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

GraniteMoeSharedModel

class transformers.GraniteMoeSharedModel

< >

( config: GraniteMoeSharedConfig )

参数

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

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

该模型继承自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 use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None output_router_logits: 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 (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 词汇表中输入序列 token 的索引。默认情况下会忽略填充。

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

    什么是输入 ID?

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

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

    什么是注意力掩码?

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

    什么是位置 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) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也称为传统缓存格式。

    模型将输出与作为输入提供的缓存格式相同的缓存格式。如果未传递 past_key_values,则将返回传统缓存格式。

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

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

返回

transformers.modeling_outputs.BaseModelOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BaseModelOutputWithPast 或一个 torch.FloatTensor 元组(如果传递 return_dict=Falseconfig.return_dict=False)包含各种元素,具体取决于配置 (GraniteMoeSharedConfig) 和输入。

  • 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=Trueconfig.use_cache=True 时返回) — 这是一个 Cache 实例。有关更多详细信息,请参阅我们的 kv 缓存指南

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

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

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

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

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

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

尽管前向传播的实现需要在该函数内部定义,但之后应该调用 Module 实例,而不是该函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

GraniteMoeSharedForCausalLM

class transformers.GraniteMoeSharedForCausalLM

< >

( config: GraniteMoeSharedConfig )

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 output_router_logits: 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 **kwargs ) transformers.modeling_outputs.MoeCausalLMOutputWithPasttuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

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

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

    什么是注意力掩码?

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

    什么是位置 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) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也称为传统缓存格式。

    模型将输出与作为输入提供的缓存格式相同的缓存格式。如果未传递 past_key_values,则将返回传统缓存格式。

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

  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。如果您希望对如何将 input_ids 索引转换为关联向量有比模型内部嵌入查找矩阵更多的控制,这会很有用。
  • labels (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 用于计算掩码语言建模损失的标签。索引应为 [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
  • output_router_logits (bool可选) — 是否返回所有路由器的对数。它们对于计算路由器损失很有用,不应在推理期间返回。
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (形状为 (sequence_length)torch.LongTensor可选) — 描述输入序列 token 在序列中位置的索引。与 position_ids 不同,此张量不受填充影响。它用于在正确位置更新缓存并推断完整的序列长度。
  • logits_to_keep (Union[int, torch.Tensor],默认为 0) — 如果是 int 类型,则计算最后 logits_to_keep 个 token 的 logits。如果是 0,则计算所有 input_ids 的 logits(特殊情况)。生成时只需要最后一个 token 的 logits,只计算该 token 的 logits 可以节省内存,这对于长序列或大词汇量非常重要。如果是 torch.Tensor 类型,则必须是 1D 的,对应于序列长度维度中要保留的索引。这在使用打包张量格式时非常有用(批次和序列长度的单个维度)。

返回

transformers.modeling_outputs.MoeCausalLMOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.MoeCausalLMOutputWithPast 或一个 torch.FloatTensor 元组(如果传递 return_dict=Falseconfig.return_dict=False)包含各种元素,具体取决于配置 (GraniteMoeSharedConfig) 和输入。

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

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

  • aux_loss (torch.FloatTensor可选,当提供 labels 时返回) — 稀疏模块的辅助损失。

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

    由 MoE 路由器计算的原始路由器对数(softmax 后),这些术语用于计算专家混合模型的辅助损失。

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

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

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

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

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

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

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

尽管前向传播的实现需要在该函数内部定义,但之后应该调用 Module 实例,而不是该函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例

>>> from transformers import AutoTokenizer, GraniteMoeSharedForCausalLM

>>> model = GraniteMoeSharedForCausalLM.from_pretrained("ibm/PowerMoE-3b")
>>> tokenizer = AutoTokenizer.from_pretrained("ibm/PowerMoE-3b")

>>> 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."
< > 在 GitHub 上更新