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 文本到代码基准上评估了它们。我们发现,更积极地过滤近重复项可以进一步提高性能,而且令人惊讶的是,从拥有 5 个以上 GitHub 星星的存储库中选择文件会显着降低性能。我们最好的模型在 Java、JavaScript 和 Python 部分的 MultiPL-E 上,在从左到右生成和填充方面,都优于以前的开源多语言代码生成模型(InCoder-6.7B 和 CodeGen-Multi-2.7B),尽管模型规模明显更小。所有模型均根据 OpenRAIL 许可证在 此 https URL 上发布。

该模型是一个优化的 GPT2 模型,支持多查询注意力机制。

实现细节

与 GPT2 相比的主要区别。

  • 添加了对多查询注意力机制的支持。
  • 使用 gelu_pytorch_tanh 代替经典的 gelu
  • 避免不必要的同步(此功能已在 #20061 中添加到 GPT2,但在参考代码库中没有)。
  • 使用线性层代替 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 中阅读有关优化的更多信息

结合 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|>'

预期加速

下面是一个预期加速图,比较了在使用 bigcode/starcoder 检查点的 transformers 中的原生实现与使用两种不同序列长度的模型的 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 可以表示的不同 token 的数量。
  • 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) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。
  • embd_pdrop (float, 可选, 默认为 0.1) — 嵌入层的 dropout 比率。
  • attn_pdrop (float, 可选, 默认为 0.1) — 注意力机制的 dropout 比率。
  • 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) — 是否使用多查询注意力机制 (True) 或多头注意力机制 (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 (GPTBigCodeConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 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[typing.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) — 如果 past_key_valuesNone,则 input_ids_length = sequence_length;否则 input_ids_length = past_key_values[0][0].shape[-2] (输入过去的键值状态的 sequence_length)。 词汇表中输入序列 tokens 的索引。

    如果使用 past_key_values,则只有未计算过去的 input_ids 应作为 input_ids 传递。

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

    什么是输入 IDs?

  • past_key_values (长度为 config.n_layersTuple[torch.Tensor]) — 包含模型计算的预先计算的隐藏状态(注意力块中的键和值)(请参阅下面的 past_key_values 输出)。 可用于加速顺序解码。 已将其过去状态提供给此模型的 input_ids 不应作为 input_ids 传递,因为它们已被计算过。
  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor, 可选) — 用于避免在 padding token 索引上执行注意力的掩码。 掩码值在 [0, 1] 中选择:

    • 1 表示 未被掩盖 的 tokens,
    • 0 表示 被掩盖 的 tokens。

    如果使用 past_key_values,则 attention_mask 需要包含用于 past_key_values 的掩盖策略。 换句话说,attention_mask 始终必须具有以下长度:len(past_key_values) + len(input_ids)

    什么是注意力掩码?

  • token_type_ids (形状为 (batch_size, input_ids_length)torch.Tensor, 可选) — 分段 token 索引,用于指示输入的第一部分和第二部分。 索引在 [0, 1] 中选择:

    • 0 对应于 句子 A token,
    • 1 对应于 句子 B token。

    什么是 token 类型 IDs?

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

    什么是位置 IDs?

  • head_mask (形状为 (num_heads,)(num_layers, num_heads)torch.Tensor, 可选) — 用于使自注意力模块的选定 head 无效的掩码。 掩码值在 [0, 1] 中选择:

    • 1 表示 head 未被掩盖
    • 0 表示 head 被掩盖
  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.Tensor, 可选) — 或者,您可以选择直接传递嵌入表示,而不是传递 input_ids。 如果您希望比模型的内部嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为关联向量,这将非常有用。

    如果使用 past_key_values,则可以选择仅输入最后一个 inputs_embeds(请参阅 past_key_values)。

  • 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.BaseModelOutputWithPastAndCrossAttentionstorch.FloatTensor 的元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包括各种元素,具体取决于配置 (GPTBigCodeConfig) 和输入。

  • last_hidden_state (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor) — 模型最后一层输出处的隐藏状态序列。

    如果使用 past_key_values,则仅输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个隐藏状态。

  • past_key_values (tuple(tuple(torch.FloatTensor)), 可选, 当传递 use_cache=True 或当 config.use_cache=True 时返回) — 长度为 config.n_layerstuple(tuple(torch.FloatTensor)) 元组,每个元组具有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量,并且如果 config.is_encoder_decoder=True,则可选地具有 2 个形状为 (batch_size, num_heads, encoder_sequence_length, embed_size_per_head) 的附加张量。

    包含预先计算的隐藏状态(自注意力块中的键和值,以及可选地,如果 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__ 特殊方法。

虽然 forward 传递的配方需要在该函数中定义,但是应该在之后调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

示例

>>> from transformers import AutoTokenizer, GPTBigCodeModel
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/gpt_bigcode-santacoder")
>>> model = GPTBigCodeModel.from_pretrained("bigcode/gpt_bigcode-santacoder")

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

>>> last_hidden_states = outputs.last_hidden_state

GPTBigCodeForCausalLM

class transformers.GPTBigCodeForCausalLM

< >

( config )

参数

  • config (GPTBigCodeConfig) — 模型配置类,包含模型的所有参数。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法以加载模型权重。

带有语言建模头的 GPT_BIGCODE 模型转换器(权重与输入嵌入绑定的线性层)。

此模型继承自 PreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与通用用法和行为相关的所有事项。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[typing.Tuple[typing.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) — 如果 past_key_valuesNone,则 input_ids_length = sequence_length;否则 input_ids_length = past_key_values[0][0].shape[-2] (输入过去的键值状态的 sequence_length)。 词汇表中输入序列 tokens 的索引。

    如果使用 past_key_values,则只有未计算过去的 input_ids 应作为 input_ids 传递。

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

    什么是输入 IDs?

  • past_key_values (长度为 config.n_layersTuple[torch.Tensor]) — 包含模型计算的预先计算的隐藏状态(注意力块中的键和值)(请参阅下面的 past_key_values 输出)。 可用于加速顺序解码。 已将其过去状态提供给此模型的 input_ids 不应作为 input_ids 传递,因为它们已被计算过。
  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor, 可选) — 用于避免在 padding token 索引上执行注意力的掩码。 掩码值在 [0, 1] 中选择:

    • 1 表示 未被掩盖 的 tokens,
    • 0 表示 被掩盖 的 tokens。

    如果使用 past_key_values,则 attention_mask 需要包含用于 past_key_values 的掩盖策略。 换句话说,attention_mask 始终必须具有以下长度:len(past_key_values) + len(input_ids)

    什么是注意力掩码?

  • token_type_ids (形状为 (batch_size, input_ids_length)torch.Tensor, 可选) — 分段 token 索引,用于指示输入的第一部分和第二部分。 索引在 [0, 1] 中选择:

    • 0 对应于 句子 A token,
    • 1 对应于 句子 B token。

    什么是 token 类型 IDs?

  • position_ids (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列标记的位置索引。 在范围 [0, config.max_position_embeddings - 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 索引转换为关联的向量,这将非常有用。

    如果使用 past_key_values,则可以选择仅输入最后一个 inputs_embeds(请参阅 past_key_values)。

  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,并且可以用于加速解码(请参阅 past_key_values)。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于语言建模的标签。 请注意,标签在模型内部被移动,即您可以设置 labels = input_ids。 索引在 [-100, 0, ..., config.vocab_size] 中选择。 所有设置为 -100 的标签都将被忽略(掩蔽),损失仅针对 [0, ..., config.vocab_size] 中的标签计算。

返回值

transformers.modeling_outputs.CausalLMOutputWithCrossAttentionstuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutputWithCrossAttentionstorch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),其中包含各种元素,具体取决于配置 (GPTBigCodeConfig) 和输入。

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

  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(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 (tuple(tuple(torch.FloatTensor))可选,当传递 use_cache=True 或当 config.use_cache=True 时返回) — torch.FloatTensor 元组的元组,长度为 config.n_layers,每个元组包含自注意力层的缓存键、值状态以及交叉注意力层的缓存键、值状态(如果模型在编码器-解码器设置中使用)。 仅当 config.is_decoder = True 时相关。

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

GPTBigCodeForCausalLM forward 方法,覆盖了 __call__ 特殊方法。

虽然 forward 传递的配方需要在该函数中定义,但是应该在之后调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

示例

>>> import torch
>>> from transformers import AutoTokenizer, GPTBigCodeForCausalLM

>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/gpt_bigcode-santacoder")
>>> model = GPTBigCodeForCausalLM.from_pretrained("bigcode/gpt_bigcode-santacoder")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> outputs = model(**inputs, labels=inputs["input_ids"])
>>> loss = outputs.loss
>>> logits = outputs.logits

GPTBigCodeForSequenceClassification

class transformers.GPTBigCodeForSequenceClassification

< >

( config )

参数

  • config (GPTBigCodeConfig) — 模型配置类,包含模型的所有参数。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法以加载模型权重。

带有序列分类头(线性层)的 GPTBigCode 模型转换器。

GPTBigCodeForSequenceClassification 使用最后一个标记进行分类,就像其他因果模型(例如 GPT-1)一样。

由于它对最后一个标记进行分类,因此需要知道最后一个标记的位置。 如果在配置中定义了 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[typing.Tuple[typing.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 )

参数

  • 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[torch.Tensor],长度为 config.n_layers) — 包含模型计算的预计算隐藏状态(注意力块中的键和值)(请参阅下面的 past_key_values 输出)。 可用于加速顺序解码。 已将过去状态提供给此模型的 input_ids 不应作为 input_ids 传递,因为它们已被计算。
  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免对填充标记索引执行注意力的掩码。 掩码值在 [0, 1] 中选择:

    • 1 表示标记未被掩蔽
    • 0 表示标记被掩蔽

    如果使用 past_key_values,则 attention_mask 需要包含用于 past_key_values 的掩蔽策略。 换句话说,attention_mask 始终必须具有长度:len(past_key_values) + len(input_ids)

    什么是注意力掩码?

  • token_type_ids (torch.Tensor,形状为 (batch_size, input_ids_length)可选) — 段落标记索引,用于指示输入的第一个和第二个部分。 索引在 [0, 1] 中选择:

    • 0 对应于句子 A 标记,
    • 1 对应于句子 B 标记。

    什么是标记类型 ID?

  • position_ids (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列标记的位置索引。 在范围 [0, config.max_position_embeddings - 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 索引转换为关联的向量,这将非常有用。

    如果使用 past_key_values,则可以选择仅输入最后一个 inputs_embeds(请参阅 past_key_values)。

  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,并且可以用于加速解码(请参阅 past_key_values)。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。 详见返回张量下的 attentions 部分了解更多细节。
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。 详见返回张量下的 hidden_states 部分了解更多细节。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是纯粹的元组。
  • labels (torch.Tensor,形状为 (batch_size,)optional) — 用于计算序列分类/回归损失的标签。 索引应在 [0, ..., config.num_labels - 1] 中。 如果 config.num_labels == 1,则计算回归损失(均方误差损失);如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

GPTBigCodeForSequenceClassification 的 forward 方法覆盖了 __call__ 特殊方法。

虽然 forward 传递的配方需要在该函数中定义,但是应该在之后调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

GPTBigCodeForTokenClassification

class transformers.GPTBigCodeForTokenClassification

< >

( config )

参数

  • config (GPTBigCodeConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,仅加载配置。 查看 from_pretrained() 方法以加载模型权重。

GPT_BIGCODE 模型,顶部带有一个 token 分类头(隐藏状态输出之上的一个线性层),例如用于命名实体识别 (NER) 任务。

此模型继承自 PreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与通用用法和行为相关的所有事项。

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[typing.Tuple[typing.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 )

参数

  • 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() 了解详情。

    什么是输入 IDs?

  • past_key_values (Tuple[torch.Tensor],长度为 config.n_layers) — 包含模型计算的预计算隐藏状态(注意力块中的键和值)(参见下面的 past_key_values 输出)。 可用于加速顺序解码。 已将其过去状态提供给此模型的 input_ids 不应作为 input_ids 传递,因为它们已被计算过。
  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)optional) — 用于避免在 padding 标记索引上执行注意力的掩码。 掩码值在 [0, 1] 中选择:

    • 1 表示标记未被掩码
    • 0 表示标记被掩码

    如果使用 past_key_values,则 attention_mask 需要包含用于 past_key_values 的掩码策略。 换句话说,attention_mask 始终必须具有以下长度:len(past_key_values) + len(input_ids)

    什么是注意力掩码?

  • token_type_ids (torch.Tensor,形状为 (batch_size, input_ids_length)optional) — 段落标记索引,用于指示输入的第一部分和第二部分。 索引在 [0, 1] 中选择:

    • 0 对应于句子 A 标记,
    • 1 对应于句子 B 标记。

    什么是标记类型 IDs?

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

    什么是位置 IDs?

  • head_mask (torch.Tensor,形状为 (num_heads,)(num_layers, num_heads)optional) — 用于使自注意力模块的选定头无效的掩码。 掩码值在 [0, 1] 中选择:

    • 1 表示头未被掩码
    • 0 表示头被掩码
  • inputs_embeds (torch.Tensor,形状为 (batch_size, sequence_length, hidden_size)optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。 如果您希望比模型的内部嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为关联的向量,这将非常有用。

    如果使用 past_key_values,则可以选择仅输入最后的 inputs_embeds(参见 past_key_values)。

  • use_cache (bool, optional) — 如果设置为 True,则返回 past_key_values 键值状态,并可用于加速解码(参见 past_key_values)。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。 详见返回张量下的 attentions 部分了解更多细节。
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。 详见返回张量下的 hidden_states 部分了解更多细节。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是纯粹的元组。
  • labels (torch.Tensor,形状为 (batch_size, sequence_length)optional) — 用于计算序列分类/回归损失的标签。 索引应在 [0, ..., config.num_labels - 1] 中。 如果 config.num_labels == 1,则计算回归损失(均方误差损失);如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

GPTBigCodeForTokenClassification 的 forward 方法覆盖了 __call__ 特殊方法。

虽然 forward 传递的配方需要在该函数中定义,但是应该在之后调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

< > 更新于 GitHub