GPTBigCode
概述
GPTBigCode 模型是由 BigCode 在 SantaCoder:不要好高骛远! 中提出的。列出的作者有: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 文本到代码基准测试上对其进行了评估。我们发现,对近似重复项进行更积极的过滤可以进一步提高性能,而且令人惊讶的是,从 GitHub 星级为 5 星或以上的存储库中选择文件会显著降低性能。尽管模型规模要小得多,但我们的最佳模型在 MultiPL-E 的 Java、JavaScript 和 Python 部分的从左到右生成和填充方面都优于以前的开源多语言代码生成模型(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 模型不兼容)。
您可以在 原始拉取请求 中阅读有关优化的更多信息。
结合 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
类 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
) — 是否使用多查询注意力 (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
< source >( config )
参数
- config (GPTBigCodeConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,只会加载配置。 请查看 from_pretrained() 方法来加载模型权重。
裸 GPT_BIGCODE 模型转换器,输出原始隐藏状态,没有任何特定的头部。
此模型继承自 PreTrainedModel。请查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解与一般使用和行为相关的所有内容。
forward
< source >( input_ids: Optional = None past_key_values: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None encoder_hidden_states: Optional = None encoder_attention_mask: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.Tensor
形状为(batch_size, input_ids_length)
) — 如果past_key_values
为None
,则input_ids_length
=sequence_length
,否则为past_key_values[0][0].shape[-2]
(输入过去键值状态的sequence_length
)。 词汇表中输入序列标记的索引。如果使用
past_key_values
,则只有尚未计算其过去的input_ids
才应作为input_ids
传递。可以使用 AutoTokenizer 获取索引。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (长度为
config.n_layers
的Tuple[torch.Tensor]
) — 包含模型计算的预先计算的隐藏状态(注意力块中的键和值)(参见下面的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 标记。
- position_ids (
torch.Tensor
, 形状为(batch_size, sequence_length)
, 可选) — 位置嵌入中每个输入序列标记的位置索引。在[0, config.max_position_embeddings - 1]
范围内选择。 - 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 而不是普通元组。
返回值
transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或一个 torch.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_layers
的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=True
和config.add_cross_attention=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每一层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。解码器交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
GPTBigCodeModel 的 forward 方法会覆盖 __call__
特殊方法。
尽管需要在此函数中定义前向传递的方法,但之后应该调用 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
类 transformers.GPTBigCodeForCausalLM
< 源代码 >( config )
参数
- config (GPTBigCodeConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
GPT_BIGCODE 模型转换器,顶部带有语言建模头(线性层,权重与输入嵌入绑定)。
此模型继承自 PreTrainedModel。请查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解与一般使用和行为相关的所有内容。
forward
< 源代码 >( input_ids: Optional = None past_key_values: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None encoder_hidden_states: Optional = None encoder_attention_mask: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.Tensor
,形状为(batch_size, input_ids_length)
) — 如果past_key_values
为None
,则input_ids_length
=sequence_length
;否则,input_ids_length
=past_key_values[0][0].shape[-2]
(输入 past key value 状态的sequence_length
)。词汇表中输入序列标记的索引。如果使用
past_key_values
,则只应将尚未计算其过去的input_ids
作为input_ids
传递。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.__call__()。
- past_key_values (长度为
config.n_layers
的Tuple[torch.Tensor]
) — 包含模型计算的预先计算的隐藏状态(注意力块中的键和值)(请参阅下面的past_key_values
输出)。 可用于加速序列解码。 已将past
提供给该模型的input_ids
不应作为input_ids
传递,因为它们已被计算。 - attention_mask (形状为
(batch_size, sequence_length)
的torch.Tensor
,可选)— 掩码,用于避免对填充标记索引执行注意力。 在[0, 1]
中选择的掩码值:- 1 表示对应标记未被掩码,
- 0 表示对应标记已被掩码。
如果使用
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
,可选)— 段标记索引,用于指示输入的第一部分和第二部分。 在[0, 1]
中选择的索引:- 0 对应于句子 A 标记,
- 1 对应于句子 B 标记。
- position_ids (形状为
(batch_size, sequence_length)
的torch.Tensor
,可选)— 位置嵌入中每个输入序列标记的位置索引。 在[0, config.max_position_embeddings - 1]
范围内选择。 - 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
索引转换为关联向量,这将非常有用。如果使用
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.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或一个 torch.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
时返回) — 长度为config.n_layers
的torch.FloatTensor
元组的元组,每个元组包含自注意力和交叉注意力层的缓存键值状态(如果模型在编码器-解码器设置中使用)。仅在config.is_decoder = True
时相关。包含预先计算的隐藏状态(注意力块中的键和值),可以使用这些状态(请参阅
past_key_values
输入)来加速顺序解码。
GPTBigCodeForCausalLM forward 方法重写了 __call__
特殊方法。
尽管需要在此函数中定义前向传递的方法,但之后应该调用 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
类 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: Optional = None past_key_values: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None )
参数
- input_ids (
torch.Tensor
类型为(batch_size, input_ids_length)
) —input_ids_length
= 如果past_key_values
为None
则为sequence_length
,否则为past_key_values[0][0].shape[-2]
(输入过去键值状态的sequence_length
)。词汇表中输入序列标记的索引。如果使用
past_key_values
,则只应将尚未计算过去的input_ids
作为input_ids
传递。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.**call**()。
- past_key_values (长度为
config.n_layers
的Tuple[torch.Tensor]
) — 包含模型计算的预先计算的隐藏状态(注意力块中的键和值)(请参阅下面的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* 标记。
- position_ids (
torch.Tensor
类型为(batch_size, sequence_length)
,可选) — 位置嵌入中每个输入序列标记的位置索引。在[0, config.max_position_embeddings - 1]
范围内选择。 - 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,)
, 可选) — 用于计算序列分类/回归损失的标签。 索引应该在[0, ..., config.num_labels - 1]
中。 如果config.num_labels == 1
,则计算回归损失(均方误差);如果config.num_labels > 1
,则计算分类损失(交叉熵)。
GPTBigCodeForSequenceClassification 前向方法,重载 __call__
特殊方法。
尽管需要在此函数中定义前向传递的方法,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则会忽略它们。
GPTBigCodeForTokenClassification
类 transformers.GPTBigCodeForTokenClassification
< 源代码 >( config )
参数
- config (GPTBigCodeConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,只会加载配置。 查看 from_pretrained() 方法来加载模型权重。
GPT_BIGCODE 模型顶部有一个标记分类头(隐藏状态输出顶部的线性层),例如用于命名实体识别 (NER) 任务。
此模型继承自 PreTrainedModel。请查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解与一般使用和行为相关的所有内容。
forward
< 源代码 >( input_ids: Optional = None past_key_values: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None )
参数
- input_ids (
torch.Tensor
形状为(batch_size, input_ids_length)
) — 如果past_key_values
为None
,则input_ids_length
=sequence_length
,否则为past_key_values[0][0].shape[-2]
(输入过去键值状态的sequence_length
)。 词汇表中输入序列标记的索引。如果使用
past_key_values
,则只应将尚未计算过去的input_ids
作为input_ids
传递。可以使用 AutoTokenizer 获取索引。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (长度为
config.n_layers
的Tuple[torch.Tensor]
) — 包含模型计算的预先计算的隐藏状态(注意力块中的键和值)(请参阅下面的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_ 标记。
- position_ids (
torch.Tensor
, 形状为(batch_size, sequence_length)
, 可选) — 位置嵌入中每个输入序列标记的位置索引。在[0, config.max_position_embeddings - 1]
范围内选择。 - 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)
, 可选) — 用于计算序列分类/回归损失的标签。索引应该在[0, ..., config.num_labels - 1]
范围内。如果config.num_labels == 1
,则计算回归损失(均方误差);如果config.num_labels > 1
,则计算分类损失(交叉熵)。
GPTBigCodeForTokenClassification forward 方法重写了 __call__
特殊方法。
尽管需要在此函数中定义前向传递的方法,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则会忽略它们。