Transformers 文件

Bamba

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

PyTorch FlashAttention SDPA

Bamba

Bamba 是一個擁有 90 億引數的僅解碼器語言模型,構建於 Mamba-2 架構之上。它分兩個階段進行預訓練——首先在 Dolma v1.7 資料集的 2T 詞元上進行訓練,然後在來自 FineWebCosmopedia 的額外 200B 詞元上進行訓練。

你可以在 Bamba 合集中找到所有原始的 Bamba checkpoints。

該模型由 ani300fabianlim 貢獻。

點選右側邊欄中的 Bamba 模型,檢視更多如何將 Bamba 應用於不同文字生成任務的示例。

下面的示例演示瞭如何使用 PipelineAutoModel 以及從命令列生成文字。

流水線
自動模型
Transformers CLI
import torch
from transformers import pipeline

pipeline = pipeline(
    task="text-generation",
    model="ibm-ai-platform/Bamba-9B-v2",
    torch_dtype=torch.bfloat16,
    device=0
)
pipeline("Plants create energy through a process known as")

量化透過以較低精度表示權重來減少大型模型的記憶體負擔。有關更多可用量化後端,請參閱量化概述。

以下示例使用torchao僅將權重量化為int4。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TorchAoConfig

quantization_config = TorchAoConfig("int4_weight_only", group_size=128)
tokenizer = AutoTokenizer.from_pretrained("ibm-ai-platform/Bamba-9B-v2")
model = AutoModelForCausalLM.from_pretrained(
   "ibm-ai-platform/Bamba-9B-v2",
   quantization_config=quantization_config,
   device_map="auto",
   attn_implementation="sdpa"
)

inputs = tokenizer("Plants create energy through a process known as", return_tensors="pt").to("cuda")
output = model.generate(**inputs)
print(tokenizer.decode(output[0], skip_special_tokens=True))

注意事項

  • Bamba 支援無填充訓練,這種方式會將不同的訓練樣本連線起來,同時仍將輸入作為單獨的批次進行處理。如果樣本長度不同,它可以透過避免填充詞元帶來的不必要的計算和記憶體開銷,將推理速度顯著提升 約 2 倍(具體取決於模型和資料分佈)並減少記憶體使用。

    無填充訓練需要 `flash-attn`、`mamba-ssm` 和 `causal-conv1d` 包,並且除了 `input_ids` 和 `labels` 之外,還必須向模型傳遞以下引數。

    • position_ids: torch.LongTensor: 每個序列中每個詞元的位置索引。
    • seq_idx: torch.IntTensor: 批次中每個序列的索引。
    • 每個 `FlashAttentionKwargs`
      • cu_seq_lens_q: torch.LongTensor: 所有查詢的累積序列長度。
      • cu_seq_lens_k: torch.LongTensor: 所有鍵的累積序列長度。
      • max_length_q: int: 批次中最長查詢的長度。
      • max_length_k: int: 批次中最長鍵的長度。

    不應提供 `attention_mask` 輸入。DataCollatorWithFlattening 透過使用 `return_seq_idx=True` 和 `return_flash_attn_kwargs=True` 來以程式設計方式生成上述附加引數集。有關更多資訊,請參閱 透過 Flash Attention 封裝提升 Hugging Face 訓練效率部落格文章。

    from transformers import DataCollatorWithFlattening
    
    # Example of using padding-free training
    data_collator = DataCollatorWithFlattening(
        tokenizer=tokenizer,
        return_seq_idx=True,
        return_flash_attn_kwargs=True
    )

BambaConfig

class transformers.BambaConfig

< >

( vocab_size = 128000 tie_word_embeddings = False hidden_size = 4096 intermediate_size = 14336 num_hidden_layers = 32 num_attention_heads = 32 num_key_value_heads = 8 hidden_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 = 262144 attention_dropout = 0.0 attn_layer_indices = None mamba_n_heads = 128 mamba_d_head = 'auto' mamba_n_groups = 1 mamba_d_state = 256 mamba_d_conv = 4 mamba_expand = 2 mamba_chunk_size = 256 mamba_conv_bias = True mamba_proj_bias = False z_loss_coefficient = 0.0 **kwargs )

引數

  • vocab_size (int, 可選, 預設為 128000) — Bamba 模型的詞彙表大小。定義了在呼叫 BambaModel 時傳入的 inputs_ids 可以表示的不同詞元的數量。
  • tie_word_embeddings (bool, 可選, 預設為 False) — 是否將模型的輸入和輸出詞嵌入繫結。請注意,這僅在模型具有輸出詞嵌入層時才相關。
  • hidden_size (int, 可選, 預設為 4096) — 隱藏表示的維度。
  • intermediate_size (int, 可選, 預設為 14336) — MLP 表示的維度。
  • num_hidden_layers (int, 可選, 預設為 32) — Transformer 編碼器中的隱藏層數量。
  • num_attention_heads (int, 可選, 預設為 32) — Transformer 編碼器中每個注意力層的注意力頭數量。
  • num_key_value_heads (int, 可選, 預設為 8) — 這是用於實現分組查詢注意力 (Grouped Query Attention) 的鍵值頭數量。如果 num_key_value_heads=num_attention_heads,模型將使用多頭注意力 (MHA);如果 num_key_value_heads=1,模型將使用多查詢注意力 (MQA);否則使用 GQA。將多頭檢查點轉換為 GQA 檢查點時,每個組的鍵和值頭應透過對該組內所有原始頭進行均值池化來構建。更多細節,請檢視這篇論文。如果未指定,將預設為 8
  • hidden_act (strfunction, 可選, 預設為 "silu") — 解碼器中的非線性啟用函式(函式或字串)。
  • initializer_range (float, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。
  • 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, 可選, 預設為 262144) — 模型的最大快取序列長度
  • attention_dropout (float, 可選, 預設為 0.0) — 注意力機率的 dropout 比例。
  • attn_layer_indices (list, 可選) — 指定將具有完全注意力的層的索引。必須包含最多為 num_hidden_layers 的值。
  • mamba_n_heads (int, 可選, 預設為 128) — v2 實現中使用的 mamba 頭的數量。
  • mamba_d_head (int, 可選, 預設為 "auto") — 頭嵌入維度大小
  • mamba_n_groups (int, 可選, 預設為 1) — v2 實現中使用的 mamba 組的數量。
  • mamba_d_state (int, 可選, 預設為 256) — mamba 狀態空間潛變數的維度
  • mamba_d_conv (int, 可選, 預設為 4) — mamba 卷積核的大小
  • mamba_expand (int, 可選, 預設為 2) — 用於確定 mamba 中間大小的擴充套件因子(相對於 hidden_size)
  • mamba_chunk_size (int, 可選, 預設為 256) — 在進行預填充/訓練時,用於拆分序列的塊大小。
  • mamba_conv_bias (bool, 可選, 預設為 True) — 指示是否在 mamba 混合器塊的卷積層中使用偏置的標誌。
  • mamba_proj_bias (bool, 可選, 預設為 False) — 指示是否在 mamba 混合器塊的輸入和輸出投影([“in_proj”, “out_proj”])中使用偏置的標誌。
  • z_loss_coefficient (float, 可選, 預設為 0.0) — 用於在訓練期間控制 logit 增長的輔助 z 損失的係數。

這是用於儲存 BambaModel 配置的配置類。它根據指定的引數例項化一個 BambaModel 模型,定義模型架構。使用 ibm-fms/Bamba-9.8b-2.2T-hf 的預設值例項化配置。

BambaModel 是一個混合了 mamba2 架構和 SwiGLU 的模型。其檢查點由 IBM、普林斯頓大學和伊利諾伊大學香檳分校聯合訓練。

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

BambaModel

class transformers.BambaModel

< >

( config: BambaConfig )

引數

  • config (BambaConfig) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請查閱 from_pretrained() 方法來載入模型權重。

基礎的 Bamba 模型,輸出原始的隱藏狀態,頂部沒有任何特定的頭(head)。

該模型繼承自 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.bamba.modeling_bamba.HybridMambaAttentionDynamicCache] = 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 cache_position: typing.Optional[torch.LongTensor] = None **kwargs: typing_extensions.Unpack[transformers.models.bamba.modeling_bamba.BambaFlashAttentionKwargs] ) transformers.modeling_outputs.BaseModelOutputWithPasttuple(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 (~models.bamba.modeling_bamba.HybridMambaAttentionDynamicCache, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常包括模型在解碼的前一階段返回的 `past_key_values`,當 `use_cache=True` 或 `config.use_cache=True` 時。

    允許兩種格式:

    • 一個 Cache 例項,請參閱我們的 kv 快取指南
    • 一個長度為 `config.n_layers` 的 `tuple(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)`,而不是所有形狀為 `(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`。
  • cache_position (torch.LongTensor,形狀為 (sequence_length)可選) — 描繪輸入序列標記在序列中位置的索引。與 `position_ids` 相反,此張量不受填充影響。它用於在正確的位置更新快取並推斷完整的序列長度。

返回

transformers.modeling_outputs.BaseModelOutputWithPasttuple(torch.FloatTensor)

一個 transformers.modeling_outputs.BaseModelOutputWithPast 或一個 `torch.FloatTensor` 的元組(如果傳遞了 `return_dict=False` 或當 `config.return_dict=False` 時),根據配置(BambaConfig)和輸入,包含各種元素。

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

BambaModel 的 forward 方法,重寫了 `__call__` 特殊方法。

雖然前向傳播的流程需要在此函式內定義,但之後應呼叫 `Module` 例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。

BambaForCausalLM

class transformers.BambaForCausalLM

< >

( config )

引數

  • config (BambaForCausalLM) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請查閱 from_pretrained() 方法來載入模型權重。

用於因果語言建模的 Bamba 模型。

該模型繼承自 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.bamba.modeling_bamba.HybridMambaAttentionDynamicCache] = 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 cache_position: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs ) 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 表示標記被遮蔽

    什麼是注意力掩碼?

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

    什麼是位置 ID?

  • past_key_values (~models.bamba.modeling_bamba.HybridMambaAttentionDynamicCache, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常包括模型在解碼的前一階段返回的 `past_key_values`,當 `use_cache=True` 或 `config.use_cache=True` 時。

    允許兩種格式:

    • 一個 Cache 例項,請參閱我們的 kv 快取指南
    • 一個長度為 `config.n_layers` 的 `tuple(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)`,而不是所有形狀為 `(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`。
  • 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.CausalLMOutputWithPasttuple(torch.FloatTensor)

一個 transformers.modeling_outputs.CausalLMOutputWithPast 或一個 `torch.FloatTensor` 的元組(如果傳遞了 `return_dict=False` 或當 `config.return_dict=False` 時),根據配置(BambaConfig)和輸入,包含各種元素。

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

BambaForCausalLM 的 forward 方法,重寫了 `__call__` 特殊方法。

雖然前向傳播的流程需要在此函式內定義,但之後應呼叫 `Module` 例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。

示例

>>> from transformers import AutoTokenizer, BambaForCausalLM

>>> model = BambaForCausalLM.from_pretrained("...")
>>> tokenizer = AutoTokenizer.from_pretrained("...")

>>> 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.