Transformers 文档
OLMo
并获取增强的文档体验
开始使用
OLMo
概述
OLMo 模型在 OLMo: 加速语言模型科学研究 中提出,作者为 Dirk Groeneveld, Iz Beltagy, Pete Walsh, Akshita Bhagia, Rodney Kinney, Oyvind Tafjord, Ananya Harsh Jha, Hamish Ivison, Ian Magnusson, Yizhong Wang, Shane Arora, David Atkinson, Russell Authur, Khyathi Raghavi Chandu, Arman Cohan, Jennifer Dumas, Yanai Elazar, Yuling Gu, Jack Hessel, Tushar Khot, William Merrill, Jacob Morrison, Niklas Muennighoff, Aakanksha Naik, Crystal Nam, Matthew E. Peters, Valentina Pyatkin, Abhilasha Ravichander, Dustin Schwenk, Saurabh Shah, Will Smith, Emma Strubell, Nishant Subramani, Mitchell Wortsman, Pradeep Dasigi, Nathan Lambert, Kyle Richardson, Luke Zettlemoyer, Jesse Dodge, Kyle Lo, Luca Soldaini, Noah A. Smith, Hannaneh Hajishirzi。
OLMo 是一系列开放语言模型,旨在推动语言模型科学的发展。OLMo 模型在 Dolma 数据集上训练。我们发布了所有代码、检查点、日志(即将推出)以及参与训练这些模型的详细信息。
论文摘要如下:
语言模型(LM)在 NLP 研究和商业产品中已变得无处不在。随着其商业重要性的激增,最强大的模型变得封闭,被专有接口限制,其训练数据、架构和开发的重要细节未公开。鉴于这些细节在科学研究这些模型(包括其偏差和潜在风险)中的重要性,我们认为研究社区必须能够访问强大、真正开放的 LM。为此,本技术报告详细介绍了 OLMo 的首次发布,这是一个最先进的、真正开放的语言模型及其构建和研究语言建模科学的框架。与大多数先前仅发布模型权重和推理代码的工作不同,我们发布了 OLMo 和整个框架,包括训练数据以及训练和评估代码。我们希望此次发布能够增强和加强开放研究社区,并激发新一轮的创新浪潮。
此模型由 shanearora 贡献。 原始代码可以在 这里 找到。
OlmoConfig
class transformers.OlmoConfig
< source >( vocab_size = 50304 hidden_size = 4096 intermediate_size = 11008 num_hidden_layers = 32 num_attention_heads = 32 num_key_value_heads = None hidden_act = 'silu' max_position_embeddings = 2048 initializer_range = 0.02 use_cache = True pad_token_id = 1 bos_token_id = None eos_token_id = 50279 tie_word_embeddings = False rope_theta = 10000.0 rope_scaling = None attention_bias = False attention_dropout = 0.0 clip_qkv = None **kwargs )
参数
- vocab_size (
int
, 可选, 默认为 50304) — OLMo 模型的词汇表大小。定义了在调用 OlmoModel 时传递的inputs_ids
可以表示的不同 token 的数量。 - hidden_size (
int
, 可选, 默认为 4096) — 隐藏层表示的维度。 - intermediate_size (
int
, 可选, 默认为 11008) — MLP 表示的维度。 - num_hidden_layers (
int
, 可选, 默认为 32) — Transformer 解码器中隐藏层的数量。 - num_attention_heads (
int
, 可选, 默认为 32) — Transformer 解码器中每个注意力层的注意力头的数量。 - num_key_value_heads (
int
, 可选) — 这是用于实现分组查询注意力(Grouped Query Attention)的 key_value 头的数量。如果num_key_value_heads=num_attention_heads
,模型将使用多头注意力(Multi Head Attention, MHA);如果num_key_value_heads=1
,模型将使用多查询注意力(Multi Query Attention, MQA);否则使用 GQA。当将多头检查点转换为 GQA 检查点时,每个组 key 和 value 头应通过对该组内所有原始头进行均值池化来构建。有关更多详细信息,请查看这篇论文。如果未指定,则默认为num_attention_heads
。 - hidden_act (
str
或function
, 可选, 默认为"silu"
) — 解码器中的非线性激活函数(函数或字符串)。 - max_position_embeddings (
int
, 可选, 默认为 2048) — 此模型可能使用的最大序列长度。 - initializer_range (
float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态分布初始化器的标准差。 - use_cache (
bool
, 可选, 默认为True
) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅当config.is_decoder=True
时相关。 - pad_token_id (
int
, 可选, 默认为 1) — Padding token id(填充 token ID)。 - bos_token_id (
int
, 可选) — Beginning of stream token id(流开始 token ID)。 - eos_token_id (
int
, 可选, 默认为 50279) — End of stream token id(流结束 token ID)。 - tie_word_embeddings (
bool
, 可选, 默认为False
) — 是否绑定词嵌入权重 - rope_theta (
float
, 可选, 默认为 10000.0) — RoPE 嵌入的基础周期。 - rope_scaling (
Dict
, 可选) — 包含 RoPE 嵌入的缩放配置的字典。当前支持两种缩放策略:linear 和 dynamic。它们的缩放因子必须是大于 1 的浮点数。期望的格式是{"type": 策略名称, "factor": 缩放因子}
。当使用此标志时,请勿将max_position_embeddings
更新为预期的新最大值。有关这些缩放策略如何运作的更多信息,请参阅以下帖子:https://www.reddit.com/r/LocalLLaMA/comments/14mrgpr/dynamically_scaled_rope_further_increases/。这是一个实验性功能,未来版本中可能会有破坏性的 API 更改。 - attention_bias (
bool
, 默认为False
, 可选, 默认为False
) — 是否在自注意力期间在 query、key、value 和输出投影层中使用偏置。 - attention_dropout (
float
, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。 - clip_qkv (
float
, 可选) — 如果不为None
,则 query、key 和 value 注意力状态的元素将被裁剪,使其绝对值不超过此值。
这是用于存储 OlmoModel 配置的配置类。它用于根据指定的参数实例化 OLMo 模型,定义模型架构。使用默认值实例化配置将产生与 allenai/OLMo-7B-hf 相似的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。
>>> from transformers import OlmoModel, OlmoConfig
>>> # Initializing a OLMo 7B style configuration
>>> configuration = OlmoConfig()
>>> # Initializing a model from the OLMo 7B style configuration
>>> model = OlmoModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
OlmoModel
class transformers.OlmoModel
< source >( config: OlmoConfig )
参数
- config (OlmoConfig) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
- config — OlmoConfig
裸 Olmo 模型输出原始隐藏状态,而没有任何特定的头部在其之上。此模型继承自 PreTrainedModel。查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是 PyTorch torch.nn.Module 子类。像常规 PyTorch 模块一样使用它,并参阅 PyTorch 文档以了解所有与通用用法和行为相关的事项。
Transformer 解码器,由 config.num_hidden_layers 层组成。每一层都是一个 OlmoDecoderLayer
forward(前向传播)
< source >( input_ids: LongTensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[transformers.cache_utils.Cache] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None **flash_attn_kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] )
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。如果您提供 padding,默认情况下将被忽略。索引可以使用 AutoTokenizer 获得。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形状为(batch_size, sequence_length)
,可选) — Mask,用于避免在 padding token 索引上执行 attention。Mask 值在[0, 1]
中选择:- 1 表示 tokens 未被 mask,
- 0 表示 tokens 已被 mask。
索引可以使用 AutoTokenizer 获得。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
如果使用了
past_key_values
,则可以选择仅输入最后的input_ids
(请参阅past_key_values
)。如果您想更改 padding 行为,您应该阅读
modeling_opt._prepare_decoder_attention_mask
并根据您的需要进行修改。有关默认策略的更多信息,请参见 论文 中的图 1。- 1 表示 head 未被 mask,
- 0 表示 head 已被 mask。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 每个输入序列 token 在位置嵌入中的位置索引。在范围[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 cache 指南;
- 长度为
config.n_layers
的tuple(torch.FloatTensor)
元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的 tensors。 这也称为旧版 cache 格式。
模型将输出与作为输入馈送的 cache 格式相同的格式。如果未传递
past_key_values
,则将返回旧版 cache 格式。如果使用
past_key_values
,用户可以选择仅输入最后的input_ids
(那些没有将其过去键值状态提供给此模型的输入 ID),形状为(batch_size, 1)
,而不是形状为(batch_size, sequence_length)
的所有input_ids
。 - inputs_embeds (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
,可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您希望比模型的内部嵌入查找矩阵更精细地控制如何将input_ids
索引转换为关联的向量,这将非常有用。 - use_cache (
bool
,可选) — 如果设置为True
,则返回past_key_values
键值状态,并且可以用于加速解码(请参阅past_key_values
)。 - output_attentions (
bool
,可选) — 是否返回所有 attention 层的 attentions tensors。 有关更多详细信息,请参阅返回的 tensors 下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回的 tensors 下的hidden_states
。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通元组。 - cache_position (
torch.LongTensor
,形状为(sequence_length)
,可选) — 描述输入序列 tokens 在序列中位置的索引。 与position_ids
相反,此 tensor 不受 padding 的影响。 它用于在正确的位置更新 cache 并推断完整序列长度。
OlmoModel 前向传播方法,覆盖了 __call__
特殊方法。
尽管前向传播的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
OlmoForCausalLM
forward(前向传播)
< source >( input_ids: LongTensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, typing.List[torch.FloatTensor], NoneType] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs: typing_extensions.Unpack[transformers.models.olmo.modeling_olmo.KwargsForCausalLM] ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。如果您提供 padding,默认情况下将被忽略。索引可以使用 AutoTokenizer 获得。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形状为(batch_size, sequence_length)
,可选) — Mask,用于避免在 padding token 索引上执行 attention。Mask 值在[0, 1]
中选择:- 1 表示 tokens 未被 mask,
- 0 表示 tokens 已被 mask。
索引可以使用 AutoTokenizer 获得。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
如果使用了
past_key_values
,则可以选择仅输入最后的input_ids
(请参阅past_key_values
)。如果您想更改 padding 行为,您应该阅读
modeling_opt._prepare_decoder_attention_mask
并根据您的需要进行修改。有关默认策略的更多信息,请参见 论文 中的图 1。- 1 表示 head 未被 mask,
- 0 表示 head 已被 mask。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 每个输入序列 token 在位置嵌入中的位置索引。在范围[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)
元组,其中每个元组包含 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
。 - 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, sequence_length)
的torch.LongTensor
, 可选) — 用于计算掩码语言建模损失的标签。 索引应为[0, ..., config.vocab_size]
或 -100(请参阅input_ids
文档字符串)。 索引设置为-100
的标记将被忽略(掩码),损失仅针对标签在[0, ..., config.vocab_size]
中的标记计算。 - logits_to_keep (
int
或torch.Tensor
, 可选) — 如果是int
,则计算最后logits_to_keep
个标记的 logits。 如果为0
,则计算所有input_ids
的 logits(特殊情况)。 只有最后一个标记 logits 是生成所需的,并且仅针对该标记计算它们可以节省内存,这对于长序列或大词汇量而言变得非常重要。 如果是torch.Tensor
,则必须是 1D,对应于要在序列长度维度中保留的索引。 这在使用打包张量格式(批次和序列长度的单个维度)时很有用。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.CausalLMOutputWithPast 或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (OlmoConfig) 和输入。
-
loss (形状为
(1,)
的torch.FloatTensor
, 可选, 当提供labels
时返回) — 语言建模损失(用于下一个标记预测)。 -
logits (形状为
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 语言建模头的预测分数(SoftMax 之前每个词汇表标记的分数)。 -
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)
的张量)包含预先计算的隐藏状态(自注意力模块中的键和值),可以用于(请参阅
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 之后的注意力权重,用于计算自注意力头中的加权平均值。
OlmoForCausalLM forward 方法,覆盖了 __call__
特殊方法。
尽管前向传播的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例
>>> from transformers import AutoTokenizer, OlmoForCausalLM
>>> model = OlmoForCausalLM.from_pretrained("meta-olmo/Olmo-2-7b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-olmo/Olmo-2-7b-hf")
>>> 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."