Starcoder2
概述
StarCoder2 是一个用于代码的开源大语言模型系列,共有 3 种不同大小的模型,参数量分别为 30 亿、70 亿和 150 亿。旗舰模型 StarCoder2-15B 在 The Stack v2 中超过 4 万亿个 token 和 600 多种编程语言上进行训练。所有模型都使用分组查询注意力机制,上下文窗口为 16,384 个 token,滑动窗口注意力为 4,096 个 token,并使用中间填充目标进行训练。这些模型已与 Anton Lozhkov、Raymond Li、Loubna Ben Allal、Federico Cassano、Joel Lamy-Poirier、Nouamane Tazi、Ao Tang、Dmytro Pykhtar、Jiawei Liu、Yuxiang Wei、Tianyang Liu、Max Tian、Denis Kocetkov、Arthur Zucker、Younes Belkada、Zijian Wang、Qian Liu、Dmitry Abulkhanov、Indraneil Paul、Zhuang Li、Wen-Ding Li、Megan Risdal、Jia Li、Jian Zhu、Terry Yue Zhuo、Evgenii Zheltonozhskii、Nii Osae Osae Dade、Wenhao Yu、Lucas Krauß、Naman Jain、Yixuan Su、Xuanli He、Manan Dey、Edoardo Abati、Yekun Chai、Niklas Muennighoff、Xiangru Tang、Muhtasham Oblokulov、Christopher Akiki、Marc Marone、Chenghao Mou、Mayank Mishra、Alex Gu、Binyuan Hui、Tri Dao、Armel Zebaze、Olivier Dehaene、Nicolas Patry、Canwen Xu、Julian McAuley、Han Hu、Torsten Scholak、Sebastien Paquet、Jennifer Robinson、Carolyn Jane Anderson、Nicolas Chapados、Mostofa Patwary、Nima Tajbakhsh、Yacine Jernite、Carlos Muñoz Ferrandis、Lingming Zhang、Sean Hughes、Thomas Wolf、Arjun Guha、Leandro von Werra 和 Harm de Vries 共同撰写的论文 StarCoder 2 and The Stack v2: The Next Generation 中发布。
该论文的摘要如下:
BigCode 项目是一个专注于负责任地开发用于代码的大型语言模型 (Code LLMs) 的开放科学合作项目,该项目推出了 StarCoder2。我们与软件遗产 (SWH) 合作,在 SWH 源代码档案的数字公共资源的基础上构建了 The Stack v2。除了跨越 619 种编程语言的 SWH 代码库外,我们还仔细选择了其他高质量数据源,例如 GitHub 拉取请求、Kaggle 笔记本和代码文档。这使得训练集的规模比第一个 StarCoder 数据集大 4 倍。我们在 3.3 到 4.3 万亿个 token 上训练了参数量分别为 30 亿、70 亿和 150 亿的 StarCoder2 模型,并在全面的 Code LLM 基准测试集中对其进行了全面评估。我们发现,我们的小型模型 StarCoder2-3B 在大多数基准测试中都优于其他同等大小的 Code LLM,并且也优于 StarCoderBase-15B。我们的大型模型 StarCoder2-15B 显著优于其他同等大小的模型。此外,它的性能与 CodeLlama-34B 相当甚至更好,而 CodeLlama-34B 的大小是它的两倍多。虽然 DeepSeekCoder-33B 是在高资源语言代码补全方面表现最好的模型,但我们发现 StarCoder2-15B 在数学和代码推理基准测试中以及一些低资源语言方面表现优于它。我们根据 OpenRAIL 许可证提供模型权重,并通过发布源代码数据的软件遗产持久标识符 (SWHID) 来确保训练数据的完全透明度。
License
这些模型根据 BigCode OpenRAIL-M v1 许可协议 授权。
Usage tips
可以在 HuggingFace 集中库 中找到 StarCoder2 模型。可以在 StarCoder2 的 GitHub 代码库 中找到一些推断和微调的示例。
这些即用型检查点可以通过 HuggingFace 集中库下载和使用。
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> model = AutoModelForCausalLM.from_pretrained("bigcode/starcoder2-7b", device_map="auto")
>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/starcoder2-7b")
>>> prompt = "def print_hello_world():"
>>> model_inputs = tokenizer([prompt], return_tensors="pt").to("cuda")
>>> generated_ids = model.generate(**model_inputs, max_new_tokens=10, do_sample=False)
>>> tokenizer.batch_decode(generated_ids)[0]
'def print_hello_world():\n print("Hello World!")\n\ndef print'
Starcoder2Config
class transformers.Starcoder2Config
< source >( vocab_size = 49152 hidden_size = 3072 intermediate_size = 12288 num_hidden_layers = 30 num_attention_heads = 24 num_key_value_heads = 2 hidden_act = 'gelu_pytorch_tanh' max_position_embeddings = 4096 initializer_range = 0.018042 norm_epsilon = 1e-05 use_cache = True bos_token_id = 50256 eos_token_id = 50256 rope_theta = 10000.0 rope_scaling = None sliding_window = None attention_dropout = 0.0 residual_dropout = 0.0 embedding_dropout = 0.0 use_bias = True **kwargs )
Parameters
- vocab_size (
int
, optional, defaults to 49152) — StarCoder2 模型的词汇量大小。定义了在调用 Starcoder2Model 时,传递的inputs_ids
可以表示的不同 token 的数量 - hidden_size (
int
, optional, defaults to 3072) — 隐藏表示的维度。 - intermediate_size (
int
, optional, defaults to 12288) — MLP 表达式的维度。 - num_hidden_layers (
int
, optional, defaults to 30) — Transformer 编码器中的隐藏层数量。 - num_attention_heads (
int
, optional, defaults to 24) — Transformer 编码器中每个注意力层的注意力头数量。 - num_key_value_heads (
int
, optional, defaults to 2) — 这是用于实现分组查询注意力的键值头数量。 如果num_key_value_heads=num_attention_heads
,模型将使用多头注意力(MHA),如果num_key_value_heads=1
模型将使用多查询注意力(MQA),否则将使用 GQA。 在将多头检查点转换为 GQA 检查点时,每个组键和值头应通过对该组中所有原始头进行均值池化来构建。 有关更多详细信息,请查看 这篇论文。 如果未指定,将默认为8
。 - hidden_act (
str
orfunction
, optional, defaults to"gelu_pytorch_tanh"
) — 解码器中的非线性激活函数(函数或字符串)。 - max_position_embeddings (
int
, optional, defaults to 4096) — 此模型可能使用的最大序列长度。 Starcoder2 的滑动窗口注意力允许最多 4096*32 个令牌的序列。 - initializer_range (
float
, optional, defaults to 0.02) — 初始化所有权重矩阵的截断正态初始化的标准差。 - norm_epsilon (
float
, optional, defaults to 1e-05) — 层归一化的 Epsilon 值 - use_cache (
bool
, optional, defaults toTrue
) — 模型是否应返回最后键值注意力(并非所有模型都使用)。 仅在config.is_decoder=True
时相关。 - bos_token_id (
int
, optional, defaults to 50256) — “序列开始”令牌的 id。 - rope_scaling (
Dict
, 可选) — 包含 RoPE 嵌入缩放配置的字典。注意:如果您应用新的 rope 类型并且希望模型在更长的max_position_embeddings
上工作,建议您相应地更新此值。预期的内容:rope_type
(str
): 要使用的 RoPE 子变体。可以是 [‘default’, ‘linear’, ‘dynamic’, ‘yarn’, ‘longrope’, ‘llama3’] 中的一个,其中 ‘default’ 是原始的 RoPE 实现。factor
(float
, 可选): 用于除 ‘default’ 之外的所有 rope 类型。应用于 RoPE 嵌入的缩放因子。在大多数缩放类型中,factor
为 x 将使模型能够处理长度为 x * 原始最大预训练长度的序列。original_max_position_embeddings
(int
, 可选): 用于 ‘dynamic’, ‘longrope’ 和 ‘llama3’。预训练期间使用的原始最大位置嵌入。attention_factor
(float
, 可选): 用于 ‘yarn’ 和 ‘longrope’。应用于注意力计算的缩放因子。如果未指定,则默认为实现建议的值,使用factor
字段推断建议值。beta_fast
(float
, 可选): 仅用于 ‘yarn’。设置线性斜坡函数中外推边界(仅)的参数。如果未指定,则默认为 32。beta_slow
(float
, 可选): 仅用于 ‘yarn’。设置线性斜坡函数中插值边界(仅)的参数。如果未指定,则默认为 1。short_factor
(List[float]
, 可选): 仅用于 ‘longrope’。应用于短上下文(<original_max_position_embeddings
)的缩放因子。必须是一个与隐藏大小除以注意头数除以 2 相同长度的数字列表long_factor
(List[float]
, 可选): 仅用于 ‘longrope’。应用于长上下文(<original_max_position_embeddings
)的缩放因子。必须是一个与隐藏大小除以注意头数除以 2 相同长度的数字列表low_freq_factor
(float
, 可选): 仅用于 ‘llama3’。应用于 RoPE 低频分量的缩放因子high_freq_factor
(float
, 可选*): 仅用于 ‘llama3’。应用于 RoPE 高频分量的缩放因子 - sliding_window (
int
, 可选) — 滑动窗口注意力窗口大小。如果未指定,将默认为None
(无滑动窗口)。 - attention_dropout (
float
, 可选, 默认值为 0.0) — 注意力概率的丢弃率。 - residual_dropout (
float
, 可选, 默认值为 0.0) — 残差连接丢弃值。 - embedding_dropout (
float
, 可选, 默认值为 0.0) — 嵌入丢弃。 - use_bias (
bool
, 可选, 默认值为True
) — 是否在模型的线性层上使用偏差项。
这是一个配置类,用于存储 Starcoder2Model 的配置。它用于根据指定的参数实例化 Starcoder2 模型,定义模型架构。使用默认值实例化配置将生成与 bigcode/starcoder2-7b 模型相似的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 文档以获取更多信息。
>>> from transformers import Starcoder2Model, Starcoder2Config
>>> # Initializing a Starcoder2 7B style configuration
>>> configuration = Starcoder2Config()
>>> # Initializing a model from the Starcoder2 7B style configuration
>>> model = Starcoder2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Starcoder2Model
class transformers.Starcoder2Model
< 源代码 >( config: Starcoder2Config )
Parameters
- config (Starcoder2Config) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。查看 from_pretrained() 方法来加载模型权重。config — Starcoder2Config
Starcoder2 模型的裸模型,输出原始隐藏状态,没有任何特定的头部。此模型继承自 PreTrainedModel。查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入的大小、修剪头部等)。
此模型也是一个 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解与一般用法和行为相关的所有事项。
包含 config.num_hidden_layers 层的 Transformer 解码器。每层都是一个 Starcoder2DecoderLayer
forward
< source > ( input_ids: LongTensor = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Optional = None inputs_embeds: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None cache_position: Optional = None )
Parameters
- input_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
) — 输入序列标记在词汇表中的索引。如果您提供填充,默认情况下将忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
形状为(batch_size, sequence_length)
,可选) — 掩码,避免对填充标记索引执行注意力。在[0, 1]
中选择掩码值:- 1 表示未屏蔽的标记,
- 0 表示屏蔽的标记。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
如果使用
past_key_values
,则可以选择仅输入最后一个decoder_input_ids
(那些没有向该模型提供其过去键值状态的decoder_input_ids
),形状为(batch_size, 1)
,而不是所有形状为(batch_size, sequence_length)
的input_ids
。如果您想更改填充行为,您应该阅读
modeling_opt._prepare_decoder_attention_mask
并根据您的需要进行修改。有关默认策略的更多信息,请参阅 论文 中的图 1。- 1 表示头部未屏蔽,
- 0 表示头部屏蔽。
- position_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
,可选) — 位置嵌入中每个输入序列标记的位置索引。在[0, config.n_positions - 1]
范围内选择。 - past_key_values (
Cache
或tuple(tuple(torch.FloatTensor))
,可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的先前阶段返回的past_key_values
,当use_cache=True
或config.use_cache=True
时。允许两种格式:
- 一个 Cache 实例,请参阅我们的 kv 缓存指南;
- 长度为
config.n_layers
的tuple(tuple(torch.FloatTensor))
,每个元组包含 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的张量)。这也称为传统缓存格式。
模型将输出与输入相同的缓存格式。如果没有传递
past_key_values
,则将返回传统缓存格式。如果使用
past_key_values
,用户可以选择仅输入形状为(batch_size, 1)
的最后一个input_ids
(那些没有提供其过去键值状态的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
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。 - cache_position (
torch.LongTensor
形状为(sequence_length)
, 可选) — 表示输入序列令牌在序列中的位置的索引。与position_ids
不同,此张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。
Starcoder2Model 正向方法,重写了 __call__
特殊方法。
尽管正向传播的配方需要在此函数中定义,但应该随后调用 Module
实例而不是此函数,因为前者负责运行前处理和后处理步骤,而后者会静默地忽略它们。
Starcoder2ForCausalLM
forward
< 源代码 > ( input_ids: LongTensor = None attention_mask: Optional = None position_ids: Optional = None past_key_values: 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 cache_position: Optional = None num_logits_to_keep: int = 0 ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
Parameters
- input_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
) — 词汇表中输入序列令牌的索引。如果提供填充,默认情况下将忽略填充。可以使用 attention_mask (
torch.Tensor
形状为(batch_size, sequence_length)
, 可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值选择在[0, 1]
中:- 1 表示未被掩码的标记,
- 0 表示被掩码的标记。
索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
如果使用
past_key_values
,则可以选择仅输入最后一个decoder_input_ids
(见past_key_values
)。如果您想更改填充行为,您应该阅读
modeling_opt._prepare_decoder_attention_mask
并根据您的需要修改。有关默认策略的更多信息,请参阅 论文 中的图 1。- 1 表示头部未被掩码,
- 0 表示头部被掩码。
- position_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
, 可选) — 输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.n_positions - 1]
. - past_key_values (
Cache
或tuple(tuple(torch.FloatTensor))
, 可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的先前阶段返回的past_key_values
,当use_cache=True
或config.use_cache=True
时。允许两种格式:
- 一个 Cache 实例,请参阅我们的 kv 缓存指南;
- 长度为
config.n_layers
的tuple(tuple(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
,这些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
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是简单的元组。 - cache_position (
torch.LongTensor
of shape(sequence_length)
, optional) — 表示输入序列令牌在序列中的位置的索引。与position_ids
相反,此张量不受填充的影响。它用于在正确位置更新缓存并推断完整的序列长度。Args — labels (
torch.LongTensor
of shape(batch_size, sequence_length)
, optional): 用于计算掩蔽语言建模损失的标签。索引应位于[0, ..., config.vocab_size]
或 -100 中(参见input_ids
文档字符串)。索引设置为-100
的令牌将被忽略(掩蔽),损失仅针对标签在[0, ..., config.vocab_size]
中的令牌计算。num_logits_to_keep (
int
, optional): 计算最后num_logits_to_keep
个令牌的 logits。如果为0
,则计算所有input_ids
的 logits(特殊情况)。生成只需要最后一个令牌的 logits,并且仅为该令牌计算它们可以节省内存,对于长序列或大型词汇量而言,这将变得非常重要。
Returns
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.CausalLMOutputWithPast 或 torch.FloatTensor
的元组(如果传递了 return_dict=False
或 config.return_dict=False
时),包含取决于配置 (Starcoder2Config) 和输入的各种元素。
-
loss (
torch.FloatTensor
of shape(1,)
, optional, returned whenlabels
is provided) — 语言建模损失(用于下一个令牌预测)。 -
logits (
torch.FloatTensor
of shape(batch_size, sequence_length, config.vocab_size)
) — 语言建模头的预测分数(在 SoftMax 之前的每个词汇令牌的分数)。 -
past_key_values (
tuple(tuple(torch.FloatTensor))
, optional, returned whenuse_cache=True
is passed or whenconfig.use_cache=True
) —tuple(torch.FloatTensor)
的元组,长度为config.n_layers
,每个元组包含 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的张量。包含预先计算的隐藏状态(自注意力块中的键和值),可用于(参见
past_key_values
输入)加速顺序解码。 -
hidden_states (
tuple(torch.FloatTensor)
, optional, returned whenoutput_hidden_states=True
is passed or whenconfig.output_hidden_states=True
) —torch.FloatTensor
的元组(如果模型具有嵌入层,则一个用于嵌入的输出,加上每个层的输出)形状为(batch_size, sequence_length, hidden_size)
。模型在每层输出处的隐藏状态,加上可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, optional, returned whenoutput_attentions=True
is passed or whenconfig.output_attentions=True
) —torch.FloatTensor
的元组(每个层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
The Starcoder2ForCausalLM forward method, overrides the __call__
special method.
尽管正向传播的配方需要在此函数中定义,但应该随后调用 Module
实例而不是此函数,因为前者负责运行前处理和后处理步骤,而后者会静默地忽略它们。
Example
>>> from transformers import AutoTokenizer, Starcoder2ForCausalLM
>>> model = Starcoder2ForCausalLM.from_pretrained("bigcode/starcoder2-7b")
>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/starcoder2-7b")
>>> 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."
Starcoder2ForSequenceClassification
class transformers.Starcoder2ForSequenceClassification
< source >( config )
Parameters
- config (Starcoder2Config) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
带有一个序列分类头(线性层)的 Starcoder2 模型转换器。
Starcoder2ForSequenceClassification 使用最后一个令牌进行分类,就像其他因果模型(例如 GPT-2)一样。
由于它对最后一个令牌进行分类,因此它需要知道最后一个令牌的位置。如果配置中定义了 pad_token_id
,它会找到每行中不是填充令牌的最后一个令牌。如果没有定义 pad_token_id
,它会简单地获取批次中每行的最后一个值。由于它在传递 inputs_embeds
而不是 input_ids
时无法猜测填充令牌,因此它执行相同的操作(获取批次中每行的最后一个值)。
此模型继承自 PreTrainedModel。查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是一个 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解与一般用法和行为相关的所有事项。
forward
< source > ( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Union = 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 )
Parameters
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列令牌在词汇表中的索引。如果您提供填充,默认情况下将忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
形状为(batch_size, sequence_length)
,可选) — 用于避免对填充标记索引进行注意力的掩码。掩码值在[0, 1]
中选择:- 1 表示未被屏蔽的标记,
- 0 表示被屏蔽的标记。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
如果使用
past_key_values
,则可以选择仅输入最后一个decoder_input_ids
(请参阅past_key_values
)。如果您想更改填充行为,您应该阅读
modeling_opt._prepare_decoder_attention_mask
并修改以满足您的需求。有关默认策略的更多信息,请参阅 论文 中的图 1。- 1 表示头部未被屏蔽,
- 0 表示头部被屏蔽。
- position_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
,可选) — 输入序列标记在位置嵌入中的位置索引。在[0, config.n_positions - 1]
范围内选择。 - past_key_values (
Cache
或tuple(tuple(torch.FloatTensor))
,可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的先前阶段返回的past_key_values
,当use_cache=True
或config.use_cache=True
时。允许两种格式:
- Cache 实例,请参阅我们的 kv 缓存指南;
- 长度为
config.n_layers
的tuple(tuple(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
。 - return_dict (
bool
,可选) — 是否返回 ModelOutput,而不是普通元组。 - cache_position (
torch.LongTensor
形状为(sequence_length)
,可选) — 表示输入序列标记在序列中的位置的索引。与position_ids
相反,该张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。 - labels (
torch.LongTensor
形状为(batch_size,)
,可选) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]
中。如果config.num_labels == 1
,则计算回归损失(均方误差损失),如果config.num_labels > 1
,则计算分类损失(交叉熵)。
The Starcoder2ForSequenceClassification forward method, overrides the __call__
special method.
尽管正向传播的配方需要在此函数中定义,但应该随后调用 Module
实例而不是此函数,因为前者负责运行前处理和后处理步骤,而后者会静默地忽略它们。
Starcoder2ForTokenClassification
class transformers.Starcoder2ForTokenClassification
< source >( config )
Parameters
- config (Starcoder2Config) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法加载模型权重。
The Starcoder2 Model transformer with a token classification head on top (a linear layer on top of the hidden-states output) e.g. for Named-Entity-Recognition (NER) tasks.
此模型继承自 PreTrainedModel。查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是一个 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解与一般用法和行为相关的所有事项。
forward
< source > ( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None past_key_values: 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 )
Parameters
- input_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
) — 词汇表中输入序列标记的索引。如果您提供填充,默认情况下将忽略填充。索引可以使用 AutoTokenizer 获得。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 。
- attention_mask (
torch.Tensor
形状为(batch_size, sequence_length)
,可选) — 用于避免在填充标记索引上执行注意力的掩码。在[0, 1]
中选择掩码值:- 1 表示 未掩码 的标记,
- 0 表示 已掩码 的标记。
索引可以使用 AutoTokenizer 获得。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 。
如果使用
past_key_values
,则可以选择仅输入最后的decoder_input_ids
(参见past_key_values
)。如果您想更改填充行为,您应该阅读
modeling_opt._prepare_decoder_attention_mask
并根据您的需要进行修改。有关默认策略的更多信息,请参见 论文 中的图表 1。- 1 表示头部 未掩码,
- 0 表示头部 已掩码。
- position_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
,可选) — 位置嵌入中每个输入序列标记位置的索引。在[0, config.n_positions - 1]
范围内选择。 - past_key_values (
Cache
或tuple(tuple(torch.FloatTensor))
, 可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。 这通常包含模型在解码先前阶段返回的past_key_values
,当use_cache=True
或config.use_cache=True
时。允许两种格式:
- 一个 Cache 实例,请参阅我们的 kv 缓存指南;
- 长度为
config.n_layers
的tuple(torch.FloatTensor)
元组,每个元组包含两个形状为(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 (形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
, 可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入input_ids
。 如果您希望比模型内部的嵌入查找矩阵对如何将input_ids
索引转换为关联向量有更多控制权,这将非常有用。 - use_cache (
bool
, 可选) — 如果设置为True
,则会返回past_key_values
键值状态,可用于加速解码(请参阅past_key_values
)。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量中的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量中的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。 - cache_position (形状为
(sequence_length)
的torch.LongTensor
, 可选) — 指示输入序列标记在序列中的位置的索引。 与position_ids
相反,此张量不受填充的影响。 它用于在正确的位置更新缓存并推断完整序列长度。 - labels (形状为
(batch_size,)
的torch.LongTensor
, 可选) — 用于计算序列分类/回归损失的标签。 索引应在[0, ..., config.num_labels - 1]
中。 如果config.num_labels == 1
,则计算回归损失(均方损失),如果config.num_labels > 1
,则计算分类损失(交叉熵)。
的 Starcoder2ForTokenClassification 正向方法,覆盖了 __call__
特殊方法。
尽管正向传播的配方需要在此函数中定义,但应该随后调用 Module
实例而不是此函数,因为前者负责运行前处理和后处理步骤,而后者会静默地忽略它们。