Transformers 文件

OLMoE

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

OLMoE

PyTorch FlashAttention SDPA

概述

OLMoE 模型由 Niklas Muennighoff, Luca Soldaini, Dirk Groeneveld, Kyle Lo, Jacob Morrison, Sewon Min, Weijia Shi, Pete Walsh, Oyvind Tafjord, Nathan Lambert, Yuling Gu, Shane Arora, Akshita Bhagia, Dustin Schwenk, David Wadden, Alexander Wettig, Binyuan Hui, Tim Dettmers, Douwe Kiela, Ali Farhadi, Noah A. Smith, Pang Wei Koh, Amanpreet Singh, Hannaneh Hajishirzi 在 OLMoE: Open Mixture-of-Experts Language Models 中提出。

OLMoE 是一系列使用稀疏 **專**家 **混**合 **開**放 **語**言模型的模型(**O**pen **L**anguage **Mo**dels using sparse **M**ixture-**o**f-**E**xperts),旨在推動語言模型科學的發展。我們釋出了訓練這些模型所涉及的所有程式碼、檢查點、日誌和詳細資訊。

論文摘要如下:

我們引入了 OLMoE,一個完全開放的、最先進的語言模型,利用了稀疏專家混合(MoE)。OLMoE-1B-7B 擁有 70 億(B)引數,但每個輸入 token 僅使用 1B 引數。我們對其進行了 5 萬億 token 的預訓練,並進一步調整以建立 OLMoE-1B-7B-Instruct。我們的模型在所有具有相似活躍引數的模型中表現優異,甚至超越了像 Llama2-13B-Chat 和 DeepSeekMoE-16B 這樣更大的模型。我們展示了各種 MoE 訓練實驗,分析了模型中的路由,顯示出高度專業化,並開源了我們工作的所有方面:模型權重、訓練資料、程式碼和日誌。

該模型由 Muennighoff 貢獻。原始程式碼可以在這裡找到。

OlmoeConfig

class transformers.OlmoeConfig

< >

( vocab_size = 50304 hidden_size = 2048 intermediate_size = 2048 num_hidden_layers = 16 num_attention_heads = 16 num_key_value_heads = None hidden_act = 'silu' max_position_embeddings = 4096 initializer_range = 0.02 rms_norm_eps = 1e-05 use_cache = True pad_token_id = 1 bos_token_id = None eos_token_id = 50279 tie_word_embeddings = False rope_theta = 10000.0 rope_scaling = None attention_bias = False attention_dropout = 0.0 clip_qkv = None num_experts_per_tok = 8 num_experts = 64 output_router_logits = False router_aux_loss_coef = 0.01 **kwargs )

引數

  • vocab_size (int, 可選, 預設為 50304) — OLMoE 模型的詞彙表大小。定義了在呼叫 OlmoeModelinputs_ids 可以表示的不同 token 的數量。
  • hidden_size (int, 可選, 預設為 2048) — 隱藏表示的維度。
  • intermediate_size (int, 可選, 預設為 2048) — MLP 表示的維度。
  • num_hidden_layers (int, 可選, 預設為 16) — Transformer 解碼器中隱藏層的數量。
  • num_attention_heads (int, 可選, 預設為 16) — 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, 可選, 預設為 4096) — 此模型可能使用的最大序列長度。
  • initializer_range (float, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的截斷正態初始化器的標準差。
  • rms_norm_eps (float, 可選, 預設為 1e-05) — rms 歸一化層使用的 epsilon 值。
  • use_cache (bool, 可選, 預設為 True) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。僅在 config.is_decoder=True 時相關。
  • pad_token_id (int, 可選, 預設為 1) — 填充 token ID。
  • bos_token_id (int, 可選) — 流開始 token ID。
  • eos_token_id (int, 可選, 預設為 50279) — 流結束 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, 可選, 預設為 False) — 在自注意力過程中,查詢、鍵、值和輸出投影層是否使用偏置。
  • attention_dropout (float, 可選, 預設為 0.0) — 注意力機率的 dropout 比率。
  • clip_qkv (float, 可選) — 如果不是 None,查詢、鍵和值注意力狀態的元素將被裁剪,使其絕對值不超過此值。
  • num_experts_per_tok (int, 可選, 預設為 8) — 每個 token 選擇的專家數量。
  • num_experts (int, 可選, 預設為 64) — 路由專家數量。
  • output_router_logits (bool, 可選, 預設為 False) — 模型是否應返回路由器 logits。啟用此選項還將允許模型輸出輔助損失,包括負載平衡損失和路由器 z 損失。
  • router_aux_loss_coef (float, 可選, 預設為 0.01) — 總損失的輔助損失因子。
  • norm_topk_prob (bool, 可選, 預設為 False) — 是否歸一化 topk 機率。

這是用於儲存 OlmoeModel 配置的配置類。它用於根據指定的引數例項化 OLMoE 模型,定義模型架構。使用預設值例項化配置將生成與 allenai/OLMoE-1B-7B-0924 類似的配置。

配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。

>>> from transformers import OlmoeModel, OlmoeConfig

>>> # Initializing a OLMoE 7B A1B style configuration
>>> configuration = OlmoeConfig()

>>> # Initializing a model from the OLMoE 7B A1B style configuration
>>> model = OlmoeModel(configuration)

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

OlmoeModel

class transformers.OlmoeModel

< >

( config: OlmoeConfig )

引數

  • config (OlmoeConfig) — 包含模型所有引數的模型配置類。用配置檔案初始化並不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法以載入模型權重。

裸 Olmoe 模型,輸出原始隱藏狀態,頂部沒有任何特定頭部。

此模型繼承自 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.MoeModelOutputWithPasttuple(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。

    什麼是注意力遮罩?

  • position_ids (torch.LongTensor,形狀為 (batch_size, sequence_length)可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為 [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(那些沒有將其過去的鍵值狀態提供給此模型的),而不是所有形狀為 (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
  • output_router_logits (bool可選) — 是否返回所有路由器的 logits。它們對於計算路由器損失很有用,不應在推理期間返回。
  • return_dict (bool可選) — 是否返回 ModelOutput 而不是普通的元組。
  • cache_position (torch.LongTensor,形狀為 (sequence_length)可選) — 描述輸入序列標記在序列中位置的索引。與 position_ids 不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。

返回

transformers.modeling_outputs.MoeModelOutputWithPasttuple(torch.FloatTensor)

一個 transformers.modeling_outputs.MoeModelOutputWithPast 或一個 torch.FloatTensor 元組(如果傳入 return_dict=Falseconfig.return_dict=False),根據配置 (OlmoeConfig) 和輸入包含各種元素。

  • last_hidden_state (torch.FloatTensor, 形狀為 (batch_size, sequence_length, 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 後的注意力權重,用於計算自注意力頭中的加權平均值。

  • router_logits (tuple(torch.FloatTensor)可選,當傳入 output_router_probs=Trueconfig.add_router_probs=Trueconfig.output_router_probs=True 時返回) — torch.FloatTensor 元組(每個層一個),形狀為 (batch_size, sequence_length, num_experts)

    由 MoE 路由器計算的原始路由器對數(softmax 後),這些術語用於計算專家混合模型的輔助損失。

OlmoeModel 的 forward 方法,覆蓋了 __call__ 特殊方法。

儘管 forward pass 的配方需要在此函式中定義,但此後應呼叫 Module 例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

OlmoeForCausalLM

class transformers.OlmoeForCausalLM

< >

( config )

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[list[torch.FloatTensor]] = 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 **loss_kwargs ) transformers.modeling_outputs.MoeCausalLMOutputWithPasttuple(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。

    什麼是注意力遮罩?

  • position_ids (torch.LongTensor,形狀為 (batch_size, sequence_length)可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為 [0, config.n_positions - 1]

    什麼是位置 ID?

  • past_key_values (list[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,使用者可以選擇只輸入形狀為 (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, sequence_length)可選) — 用於計算遮罩語言模型損失的標籤。索引應為 [0, ..., config.vocab_size] 或 -100 (參見 input_ids 文件字串)。索引設定為 -100 的標記將被忽略(遮罩),損失僅針對標籤在 [0, ..., config.vocab_size] 中的標記計算。
  • use_cache (bool可選) — 如果設定為 True,將返回 past_key_values 鍵值狀態,可用於加速解碼(參見 past_key_values)。
  • output_attentions (bool可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的 attentions
  • output_hidden_states (bool可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的 hidden_states
  • output_router_logits (bool可選) — 是否返回所有路由器的 logits。它們對於計算路由器損失很有用,不應在推理期間返回。
  • return_dict (bool可選) — 是否返回 ModelOutput 而不是普通的元組。
  • cache_position (torch.LongTensor,形狀為 (sequence_length)可選) — 描述輸入序列標記在序列中位置的索引。與 position_ids 不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。
  • logits_to_keep (Union[int, torch.Tensor],預設為 0) — 如果是 int,則計算最後 logits_to_keep 個標記的 logits。如果是 0,則計算所有 input_ids 的 logits(特殊情況)。只有最後一個標記的 logits 是生成所必需的,並且僅為該標記計算它們可以節省記憶體,這對於長序列或大詞彙量來說非常顯著。如果是 torch.Tensor,則必須是與序列長度維度中要保留的索引相對應的 1D 張量。當使用打包張量格式(批次和序列長度的單維度)時,這很有用。

返回

transformers.modeling_outputs.MoeCausalLMOutputWithPasttuple(torch.FloatTensor)

一個 transformers.modeling_outputs.MoeCausalLMOutputWithPast 或一個 torch.FloatTensor 元組(如果傳入 return_dict=Falseconfig.return_dict=False),根據配置 (OlmoeConfig) 和輸入包含各種元素。

  • 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=Trueconfig.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 後的注意力權重,用於計算自注意力頭中的加權平均值。

OlmoeForCausalLM 的 forward 方法,覆蓋了 __call__ 特殊方法。

儘管 forward pass 的配方需要在此函式中定義,但此後應呼叫 Module 例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

示例

>>> from transformers import AutoTokenizer, OlmoeForCausalLM

>>> model = OlmoeForCausalLM.from_pretrained("allenai/OLMoE-1B-7B-0924")
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/OLMoE-1B-7B-0924")

>>> 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 sure if you’re conscious of this, but I’m'
< > 在 GitHub 上更新

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