Transformers 文件

GPTBigCode

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

GPTBigCode

PyTorch FlashAttention SDPA

概述

GPTBigCode 模型由 BigCode 在論文 SantaCoder: don’t reach for the stars! 中提出。列出的作者包括:Loubna Ben Allal, Raymond Li, Denis Kocetkov, Chenghao Mou, Christopher Akiki, Carlos Munoz Ferrandis, Niklas Muennighoff, Mayank Mishra, Alex Gu, Manan Dey, Logesh Kumar Umapathi, Carolyn Jane Anderson, Yangtian Zi, Joel Lamy Poirier, Hailey Schoelkopf, Sergey Troshin, Dmitry Abulkhanov, Manuel Romero, Michael Lappert, Francesco De Toni, Bernardo García del Río, Qian Liu, Shamik Bose, Urvashi Bhattacharyya, Terry Yue Zhuo, Ian Yu, Paulo Villegas, Marco Zocca, Sourab Mangrulkar, David Lansky, Huu Nguyen, Danish Contractor, Luis Villa, Jia Li, Dzmitry Bahdanau, Yacine Jernite, Sean Hughes, Daniel Fried, Arjun Guha, Harm de Vries, Leandro von Werra。

論文摘要如下:

BigCode 專案是一個開放的科學合作專案,致力於負責任地開發用於程式碼的大型語言模型。本技術報告描述了截至 2022 年 12 月該合作專案的進展,概述了個人身份資訊(PII)編輯流水線的現狀、為降低模型架構風險而進行的實驗,以及為研究更好的訓練資料預處理方法而進行的實驗。我們在 The Stack 的 Java、JavaScript 和 Python 子集上訓練了 11 億引數的模型,並在 MultiPL-E text-to-code 基準上對它們進行了評估。我們發現,更積極地過濾近似重複資料可以進一步提升效能,而且令人驚訝的是,從擁有 5 個以上 GitHub 星標的倉庫中選擇檔案會顯著降低效能。儘管我們的最佳模型小得多,但在 MultiPL-E 的 Java、JavaScript 和 Python 部分,無論是在從左到右的生成還是在填充方面,其效能都超過了以前的開源多語言程式碼生成模型(InCoder-6.7B 和 CodeGen-Multi-2.7B)。所有模型均根據 OpenRAIL 許可證在此 URL 釋出:https://huggingface.co/bigcode

該模型是一個經過最佳化的 GPT2 模型,支援多查詢注意力(Multi-Query Attention)。

實現細節

與 GPT2 的主要區別。

  • 增加了對多查詢注意力(Multi-Query Attention)的支援。
  • 使用 gelu_pytorch_tanh 而不是經典的 gelu
  • 避免不必要的同步(此項後來在 #20061 中被新增到 GPT2,但在參考程式碼庫中沒有)。
  • 使用線性層(Linear layers)而不是 Conv1D(速度提升明顯,但使檢查點不相容)。
  • 合併 _attn_upcast_and_reordered_attn。始終將矩陣乘法與縮放合併。將 reorder_and_upcast_attn 重新命名為 attention_softmax_in_fp32
  • 快取注意力掩碼值以避免每次都重新建立。
  • 使用 jit 融合注意力 fp32 型別轉換、掩碼、softmax 和縮放。
  • 將注意力和因果掩碼合併為一個,為整個模型預先計算,而不是為每個層計算。
  • 將鍵和值的快取合併為一個(這會改變 layer_past/present 的格式,是否會產生問題?)。
  • 對於 MHA,QKV 張量使用 (self.num_heads, 3, self.head_dim) 的記憶體佈局,而不是 (3, self.num_heads, self.head_dim)。(防止合併鍵和值時產生開銷,但使得檢查點與原始的 openai-community/gpt2 模型不相容)。

您可以在原始的 pull request 中閱讀更多關於最佳化的資訊。

[!NOTE] 當使用除“eager”之外的所有注意力實現時,head_mask 引數將被忽略。如果你有 head_mask 並希望它生效,請使用 XXXModel.from_pretrained(model_id, attn_implementation="eager") 載入模型。

結合 Starcoder 和 Flash Attention 2

首先,請確保安裝最新版本的 Flash Attention 2,以包含滑動視窗注意力功能。

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

請確保你擁有的硬體與 Flash-Attention 2 相容。更多資訊請參閱 flash-attn 倉庫的官方文件。同時,請確保以半精度(例如 `torch.float16`)載入你的模型。

要載入並執行使用 Flash Attention 2 的模型,請參考以下程式碼片段。

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

>>> model = AutoModelForCausalLM.from_pretrained("bigcode/gpt_bigcode-santacoder", torch_dtype=torch.float16, attn_implementation="flash_attention_2")
>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/gpt_bigcode-santacoder")

>>> prompt = "def hello_world():"

>>> model_inputs = tokenizer([prompt], return_tensors="pt").to(device)
>>> model.to(device)

>>> generated_ids = model.generate(**model_inputs, max_new_tokens=30, do_sample=False)
>>> tokenizer.batch_decode(generated_ids)[0]
'def hello_world():\n    print("hello world")\n\nif __name__ == "__main__":\n    print("hello world")\n<|endoftext|>'

預期加速效果

以下是一個預期的加速圖表,比較了在 transformers 中使用 `bigcode/starcoder` 檢查點的原生實現與使用兩種不同序列長度的 Flash Attention 2 版本的模型之間的純推理時間。

GPTBigCodeConfig

class transformers.GPTBigCodeConfig

< >

( vocab_size = 50257 n_positions = 1024 n_embd = 768 n_layer = 12 n_head = 12 n_inner = None activation_function = 'gelu_pytorch_tanh' resid_pdrop = 0.1 embd_pdrop = 0.1 attn_pdrop = 0.1 layer_norm_epsilon = 1e-05 initializer_range = 0.02 scale_attn_weights = True use_cache = True bos_token_id = 50256 eos_token_id = 50256 attention_softmax_in_fp32 = True scale_attention_softmax_in_fp32 = True multi_query = True **kwargs )

引數

  • vocab_size (int, 可選, 預設為 50257) — GPT-2 模型的詞彙表大小。定義了呼叫 GPTBigCodeModel 時傳入的 inputs_ids 可以表示的不同詞元數量。
  • n_positions (int, 可選, 預設為 1024) — 此模型可能使用的最大序列長度。通常將其設定為一個較大的值以備不時之需(例如 512、1024 或 2048)。
  • n_embd (int, 可選, 預設為 768) — 嵌入和隱藏狀態的維度。
  • n_layer (int, 可選, 預設為 12) — Transformer 編碼器中的隱藏層數。
  • n_head (int, 可選, 預設為 12) — Transformer 編碼器中每個注意力層的注意力頭數量。
  • n_inner (int, 可選, 預設為 None) — 內部前饋層的維度。None 將其設定為 n_embd 的 4 倍。
  • activation_function (str, 可選, 預設為 "gelu_pytorch_tanh") — 啟用函式,可選列表為 ["relu", "silu", "gelu", "tanh", "gelu_new", "gelu_pytorch_tanh"]
  • resid_pdrop (float, 可選, 預設為 0.1) — 嵌入層、編碼器和池化層中所有全連線層的丟棄機率。
  • embd_pdrop (float, 可選, 預設為 0.1) — 嵌入層的丟棄率。
  • attn_pdrop (float, 可選, 預設為 0.1) — 注意力層的丟棄率。
  • layer_norm_epsilon (float, 可選, 預設為 1e-5) — 層歸一化層中使用的 epsilon。
  • initializer_range (float, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。
  • scale_attn_weights (bool, 可選, 預設為 True) — 是否透過除以 sqrt(hidden_size) 來縮放注意力權重。
  • use_cache (bool, 可選, 預設為 True) — 模型是否應返回最後的鍵/值注意力(並非所有模型都使用)。
  • attention_softmax_in_fp32 (bool, 可選, 預設為 True) — 是否以 float32 格式呼叫融合的 softmax。
  • scale_attention_softmax_in_fp32 (bool, 可選, 預設為 True) — 是否以 float32 格式縮放注意力 softmax。
  • attention_type (bool, 可選, 預設為 True) — 是否使用多查詢注意力 (Multi-Query Attention, True) 或多頭注意力 (Multi-Head Attention, False)。

這是用於儲存 GPTBigCodeModel 配置的配置類。它用於根據指定的引數例項化一個 GPTBigCode 模型,定義模型架構。使用預設值例項化配置將產生與 GPTBigCode gpt_bigcode 架構相似的配置。

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

示例

>>> from transformers import GPTBigCodeConfig, GPTBigCodeModel

>>> # Initializing a GPTBigCode configuration
>>> configuration = GPTBigCodeConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = GPTBigCodeModel(configuration)

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

GPTBigCodeModel

class transformers.GPTBigCodeModel

< >

( config )

引數

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

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

該模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪注意力頭等)。

該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[list[torch.Tensor]] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.Tensor] = None encoder_attention_mask: typing.Optional[torch.Tensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentionstuple(torch.FloatTensor)

引數

  • input_ids (形狀為 (batch_size, input_ids_length)torch.Tensor) — input_ids_length = sequence_length(如果 past_key_valuesNone),否則為 past_key_values[0][0].shape[-2](輸入過去鍵值狀態的 sequence_length)。詞彙表中輸入序列詞元的索引。

    如果使用了 past_key_values,則只有那些尚未計算過其過去狀態的 input_ids 才應作為 input_ids 傳入。

    索引可以使用 AutoTokenizer 獲得。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是 input ID?

  • past_key_values (list[torch.Tensor], 可選) — 預先計算的隱藏狀態(自注意力和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常包括模型在解碼的前一階段返回的 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),而不是所有形狀為 (batch_size, sequence_length)input_ids

  • attention_mask (形狀為 (batch_size, sequence_length)torch.Tensor, 可選) — 用於避免對填充詞元索引執行注意力的掩碼。掩碼值選自 [0, 1]

    • 1 表示詞元未被遮蔽
    • 0 表示詞元被遮蔽

    什麼是注意力掩碼?

  • token_type_ids (形狀為 (batch_size, sequence_length)torch.Tensor, 可選) — 用於指示輸入的第一和第二部分的片段詞元索引。索引選自 [0, 1]

    • 0 對應於 *句子 A* 的詞元,
    • 1 對應於 *句子 B* 的詞元。

    什麼是詞元型別 ID?

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

    什麼是位置 ID?

  • head_mask (形狀為 (num_heads,)(num_layers, num_heads)torch.Tensor, 可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭未被遮蔽
    • 0 表示頭被遮蔽
  • inputs_embeds (形狀為 (batch_size, sequence_length, hidden_size)torch.Tensor, 可選) — 或者,你可以選擇直接傳遞嵌入表示,而不是傳遞 input_ids。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將 input_ids 索引轉換為相關向量,這會很有用。
  • encoder_hidden_states (形狀為 (batch_size, sequence_length, hidden_size)torch.Tensor, 可選) — 編碼器最後一層輸出的隱藏狀態序列。如果模型被配置為解碼器,則在交叉注意力中使用。
  • encoder_attention_mask (形狀為 (batch_size, sequence_length)torch.Tensor, 可選) — 用於避免對編碼器輸入的填充詞元索引執行注意力的掩碼。如果模型被配置為解碼器,則在交叉注意力中使用此掩碼。掩碼值選自 [0, 1]

    • 1 表示詞元未被遮蔽
    • 0 表示詞元被遮蔽
  • use_cache (bool, 可選) — 如果設定為 True,將返回 past_key_values 鍵值狀態,可用於加速解碼(請參閱 past_key_values)。
  • output_attentions (bool, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回的張量下的 attentions
  • output_hidden_states (bool, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回的張量下的 hidden_states
  • return_dict (bool, 可選) — 是否返回 ModelOutput 而不是普通元組。

返回

transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentionstuple(torch.FloatTensor)

一個 transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或一個 torch.FloatTensor 的元組(如果傳遞了 return_dict=False 或當 config.return_dict=False 時),包含各種元素,具體取決於配置 (GPTBigCodeConfig) 和輸入。

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

  • cross_attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.add_cross_attention=True 或當 config.output_attentions=True 時返回) — torch.FloatTensor 的元組(每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。

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

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

GPTBigCodeForCausalLM

class transformers.GPTBigCodeForCausalLM

< >

( config )

引數

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

帶有語言建模頭的 GPT_BIGCODE Transformer 模型(一個線性層,權重與輸入嵌入繫結)。

該模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪注意力頭等)。

該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.Tensor] = None encoder_attention_mask: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs ) transformers.modeling_outputs.CausalLMOutputWithCrossAttentionstuple(torch.FloatTensor)

引數

  • input_ids (形狀為 (batch_size, input_ids_length)torch.Tensor) — input_ids_length = sequence_length(如果 past_key_valuesNone),否則為 past_key_values[0][0].shape[-2](輸入過去鍵值狀態的 sequence_length)。詞彙表中輸入序列詞元的索引。

    如果使用了 past_key_values,則只有那些尚未計算過其過去狀態的 input_ids 才應作為 input_ids 傳入。

    索引可以使用 AutoTokenizer 獲得。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是 input ID?

  • past_key_values (tuple[tuple[torch.Tensor]], 可選) — 預先計算的隱藏狀態(自注意力和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常包括模型在解碼的前一階段返回的 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),而不是所有形狀為 (batch_size, sequence_length)input_ids

  • attention_mask (形狀為 (batch_size, sequence_length)torch.Tensor, 可選) — 用於避免對填充詞元索引執行注意力的掩碼。掩碼值選自 [0, 1]

    • 1 表示詞元未被遮蔽
    • 0 表示詞元被遮蔽

    什麼是注意力掩碼?

  • token_type_ids (形狀為 (batch_size, sequence_length)torch.Tensor, 可選) — 用於指示輸入的第一和第二部分的片段詞元索引。索引選自 [0, 1]

    • 0 對應於 *句子 A* 的詞元,
    • 1 對應於 *句子 B* 的詞元。

    什麼是詞元型別 ID?

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

    什麼是位置 ID?

  • head_mask (形狀為 (num_heads,)(num_layers, num_heads)torch.Tensor, 可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭未被遮蔽
    • 0 表示頭被遮蔽
  • inputs_embeds (形狀為 (batch_size, sequence_length, hidden_size)torch.Tensor, 可選) — 或者,你可以選擇直接傳遞嵌入表示,而不是傳遞 input_ids。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將 input_ids 索引轉換為相關向量,這會很有用。
  • encoder_hidden_states (形狀為 (batch_size, sequence_length, hidden_size)torch.Tensor, 可選) — 編碼器最後一層輸出的隱藏狀態序列。如果模型被配置為解碼器,則在交叉注意力中使用。
  • encoder_attention_mask (形狀為 (batch_size, sequence_length)torch.Tensor, 可選) — 用於避免對編碼器輸入的填充詞元索引執行注意力的掩碼。如果模型被配置為解碼器,則在交叉注意力中使用此掩碼。掩碼值選自 [0, 1]

    • 1 表示詞元未被遮蔽
    • 0 表示詞元被遮蔽
  • labels (形狀為 (batch_size, input_ids_length)torch.Tensor, 可選) — 語言建模的標籤。請注意,標籤在模型內部已移動,即你可以設定 labels = input_ids。索引選自 [-100, 0, ..., config.vocab_size]。所有設定為 -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
  • return_dict (bool, 可選) — 是否返回 ModelOutput 而不是普通元組。

返回

transformers.modeling_outputs.CausalLMOutputWithCrossAttentionstuple(torch.FloatTensor)

一個 transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或一個 torch.FloatTensor 的元組(如果傳遞了 return_dict=False 或當 config.return_dict=False 時),包含各種元素,具體取決於配置 (GPTBigCodeConfig) 和輸入。

  • loss (torch.FloatTensor 形狀為 (1,)可選,當提供 labels 時返回) — 語言建模損失(用於下一個 token 預測)。

  • logits (形狀為 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。

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

  • cross_attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=True 或當 config.output_attentions=True 時返回) — torch.FloatTensor 的元組(每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的交叉注意力權重,用於計算交叉注意力頭中的加權平均。

  • past_key_values (Cache, 可選, 當傳遞 use_cache=True 或當 config.use_cache=True 時返回) — 這是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 KV 快取指南

    包含預先計算的隱藏狀態(注意力塊中的鍵和值),可用於(參見 past_key_values 輸入)加速順序解碼。

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

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

示例

GPTBigCodeForSequenceClassification

class transformers.GPTBigCodeForSequenceClassification

< >

( config )

引數

帶有序列分類頭的 GPTBigCode Transformer 模型(一個線性層)。

GPTBigCodeForSequenceClassification 使用最後一個詞元進行分類,與其他因果模型(如 GPT-1)的做法相同。

因為它對最後一個標記(token)進行分類,所以需要知道最後一個標記的位置。如果配置中定義了 pad_token_id,它會找到每行中最後一個不是填充標記的標記。如果未定義 pad_token_id,它只取批次中每行的最後一個值。由於當傳入 inputs_embeds 而不是 input_ids 時,它無法猜測填充標記,因此它會執行相同的操作(取批次中每行的最後一個值)。

該模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪注意力頭等)。

該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.SequenceClassifierOutputWithPasttuple(torch.FloatTensor)

引數

  • input_ids (torch.Tensor,形狀為 (batch_size, input_ids_length)) — input_ids_length = sequence_length(如果 past_key_valuesNone),否則為 past_key_values[0][0].shape[-2](輸入過去鍵值狀態的 sequence_length)。詞彙表中輸入序列標記的索引。

    如果使用了 past_key_values,則只有那些尚未計算過其過去值的 input_ids 才應作為 input_ids 傳遞。

    索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • past_key_values (tuple[tuple[torch.Tensor]], 可選) — 預計算的隱藏狀態(自注意力和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常由模型在解碼的先前階段返回的 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),而不是所有形狀為 (batch_size, sequence_length)input_ids

  • attention_mask (torch.Tensor,形狀為 (batch_size, sequence_length), 可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值選自 [0, 1]

    • 1 表示標記未被遮蓋
    • 0 表示標記已被遮蓋

    什麼是注意力掩碼?

  • token_type_ids (torch.Tensor,形狀為 (batch_size, sequence_length), 可選) — 段標記索引,用於指示輸入的第一部分和第二部分。索引選自 [0, 1]

    • 0 對應於 *句子 A* 的標記,
    • 1 對應於 *句子 B* 的標記。

    什麼是標記型別 ID?

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

    什麼是位置 ID?

  • head_mask (torch.Tensor,形狀為 (num_heads,)(num_layers, num_heads), 可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭未被遮蓋
    • 0 表示頭已被遮蓋
  • inputs_embeds (torch.Tensor,形狀為 (batch_size, sequence_length, hidden_size), 可選) — 可選地,你可以不傳遞 input_ids,而是直接傳遞一個嵌入表示。如果你想比模型內部的嵌入查詢矩陣更靈活地控制如何將 input_ids 索引轉換為關聯向量,這會很有用。
  • labels (torch.Tensor,形狀為 (batch_size,), 可選) — 用於計算序列分類/迴歸損失的標籤。索引應在 [0, ..., config.num_labels - 1] 範圍內。如果 config.num_labels == 1,則計算迴歸損失(均方損失);如果 config.num_labels > 1,則計算分類損失(交叉熵)。
  • use_cache (bool, 可選) — 如果設定為 True,將返回 past_key_values 鍵值狀態,可用於加速解碼(請參閱 past_key_values)。
  • output_attentions (bool, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 attentions
  • output_hidden_states (bool, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 hidden_states
  • return_dict (bool, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。

返回

transformers.modeling_outputs.SequenceClassifierOutputWithPasttuple(torch.FloatTensor)

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

  • loss (形狀為 (1,)torch.FloatTensor可選,當提供 labels 時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。

  • logits (形狀為 (batch_size, config.num_labels)torch.FloatTensor) — 分類(如果 config.num_labels==1,則為迴歸)分數(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 後的注意力權重,用於計算自注意力頭中的加權平均值。

GPTBigCodeForSequenceClassification 的 forward 方法重寫了 __call__ 特殊方法。

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

單標籤分類示例

>>> import torch
>>> from transformers import AutoTokenizer, GPTBigCodeForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("gpt_bigcode")
>>> model = GPTBigCodeForSequenceClassification.from_pretrained("gpt_bigcode")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = GPTBigCodeForSequenceClassification.from_pretrained("gpt_bigcode", num_labels=num_labels)

>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...

多標籤分類示例

>>> import torch
>>> from transformers import AutoTokenizer, GPTBigCodeForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("gpt_bigcode")
>>> model = GPTBigCodeForSequenceClassification.from_pretrained("gpt_bigcode", problem_type="multi_label_classification")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = GPTBigCodeForSequenceClassification.from_pretrained(
...     "gpt_bigcode", num_labels=num_labels, problem_type="multi_label_classification"
... )

>>> labels = torch.sum(
...     torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss

GPTBigCodeForTokenClassification

class transformers.GPTBigCodeForTokenClassification

< >

( config )

引數

Gpt Bigcode transformer 模型,頂部帶有一個標記分類頭(一個位於隱藏狀態輸出之上的線性層),例如用於命名實體識別(NER)任務。

該模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪注意力頭等)。

該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

引數

  • input_ids (torch.Tensor,形狀為 (batch_size, input_ids_length)) — input_ids_length = sequence_length(如果 past_key_valuesNone),否則為 past_key_values[0][0].shape[-2](輸入過去鍵值狀態的 sequence_length)。詞彙表中輸入序列標記的索引。

    如果使用了 past_key_values,則只有那些尚未計算過其過去值的 input_ids 才應作為 input_ids 傳遞。

    索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • past_key_values (tuple[tuple[torch.Tensor]], 可選) — 預計算的隱藏狀態(自注意力和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常由模型在解碼的先前階段返回的 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),而不是所有形狀為 (batch_size, sequence_length)input_ids

  • attention_mask (torch.Tensor,形狀為 (batch_size, sequence_length), 可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值選自 [0, 1]

    • 1 表示標記未被遮蓋
    • 0 表示標記已被遮蓋

    什麼是注意力掩碼?

  • token_type_ids (torch.Tensor,形狀為 (batch_size, sequence_length), 可選) — 段標記索引,用於指示輸入的第一部分和第二部分。索引選自 [0, 1]

    • 0 對應於 *句子 A* 的標記,
    • 1 對應於 *句子 B* 的標記。

    什麼是標記型別 ID?

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

    什麼是位置 ID?

  • head_mask (torch.Tensor,形狀為 (num_heads,)(num_layers, num_heads), 可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭未被遮蓋
    • 0 表示頭已被遮蓋
  • inputs_embeds (torch.Tensor,形狀為 (batch_size, sequence_length, hidden_size), 可選) — 可選地,你可以不傳遞 input_ids,而是直接傳遞一個嵌入表示。如果你想比模型內部的嵌入查詢矩陣更靈活地控制如何將 input_ids 索引轉換為關聯向量,這會很有用。
  • labels (torch.Tensor,形狀為 (batch_size, sequence_length), 可選) — 用於計算序列分類/迴歸損失的標籤。索引應在 [0, ..., config.num_labels - 1] 範圍內。如果 config.num_labels == 1,則計算迴歸損失(均方損失);如果 config.num_labels > 1,則計算分類損失(交叉熵)。
  • use_cache (bool, 可選) — 如果設定為 True,將返回 past_key_values 鍵值狀態,可用於加速解碼(請參閱 past_key_values)。
  • output_attentions (bool, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 attentions
  • output_hidden_states (bool, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 hidden_states
  • return_dict (bool, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。

返回

transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

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

  • loss (形狀為 (1,)torch.FloatTensor可選,當提供 labels 時返回) — 分類損失。

  • logits (形狀為 (batch_size, sequence_length, config.num_labels)torch.FloatTensor) — 分類分數(SoftMax 之前)。

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

GPTBigCodeForTokenClassification 的 forward 方法重寫了 __call__ 特殊方法。

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

示例

>>> from transformers import AutoTokenizer, GPTBigCodeForTokenClassification
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("gpt_bigcode")
>>> model = GPTBigCodeForTokenClassification.from_pretrained("gpt_bigcode")

>>> inputs = tokenizer(
...     "HuggingFace is a company based in Paris and New York", add_special_tokens=False, return_tensors="pt"
... )

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_token_class_ids = logits.argmax(-1)

>>> # Note that tokens are classified rather then input words which means that
>>> # there might be more predicted token classes than words.
>>> # Multiple token classes might account for the same word
>>> predicted_tokens_classes = [model.config.id2label[t.item()] for t in predicted_token_class_ids[0]]
>>> predicted_tokens_classes
...

>>> labels = predicted_token_class_ids
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...
< > 在 GitHub 上更新

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