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 上更新

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