Transformers 文档

OLMo

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

入门

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: Accelerating the Science of Language Models 中提出。

OLMo 是一系列旨在促进语言模型科学的 **O**pen **L**anguage **Mo**dels。OLMo 模型是在 Dolma 数据集上训练的。我们发布所有代码、检查点、日志(即将推出)以及训练这些模型所涉及的详细信息。

论文中的摘要如下

语言模型 (LM) 已成为自然语言处理 (NLP) 研究和商业产品中无处不在的存在。随着其商业价值的激增,最强大的模型变得封闭起来,被封闭在专有接口后面,其训练数据、架构和开发的重要细节未公开。鉴于这些细节在科学研究这些模型(包括其偏差和潜在风险)中的重要性,我们认为研究界必须能够使用强大的、真正开放的 LM。为此,本技术报告详细介绍了首个发布的 OLMo,一个最先进的、真正开放的语言模型及其构建和研究语言建模科学的框架。与大多数只发布模型权重和推理代码的先前工作不同,我们发布了 OLMo 和整个框架,包括训练数据以及训练和评估代码。我们希望此次发布能赋能和加强开放研究社区,并激发新一轮的创新。

该模型由 shanearora 贡献。原始代码可在 此处 找到。

OlmoConfig

class transformers.OlmoConfig

< >

( 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 可以表示的不同令牌数量。
  • 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, 可选) — 这是用于实现分组查询注意力的键值头数。 如果 num_key_value_heads=num_attention_heads,模型将使用多头注意力 (MHA),如果 num_key_value_heads=1,模型将使用多查询注意力 (MQA),否则将使用 GQA。 当将多头检查点转换为 GQA 检查点时,每个组键和值头应通过对该组中所有原始头的平均池化来构建。 有关更多详细信息,请查看 这篇论文。 如果未指定,将默认为 num_attention_heads
  • hidden_act (strfunction, 可选,默认值为 "silu") — 解码器中的非线性激活函数(函数或字符串)。
  • max_position_embeddings (int, 可选,默认值为 2048) — 此模型可能使用的最大序列长度。
  • initializer_range (float, 可选,默认值为 0.02) — 用于初始化所有权重矩阵的截断正态初始化的标准差。
  • use_cache (bool, 可选,默认值为 True) — 模型是否应返回最后的键值注意力(并非所有模型都使用)。 仅当 config.is_decoder=True 时才相关。
  • pad_token_id (int, 可选,默认值为 1) — 填充标记 ID。
  • bos_token_id (int, 可选) — 流的开始标记 ID。
  • eos_token_id (int, 可选,默认值为 50279) — 流的结束标记 ID。
  • tie_word_embeddings (bool, 可选,默认值为 False) — 是否绑定权重嵌入
  • rope_theta (float, 可选,默认值为 10000.0) — RoPE 嵌入的基本周期。
  • attention_bias (bool, defaults to False, 可选, 默认值为 False) — 在自注意力机制中,是否在查询、键、值和输出投影层使用偏置。
  • attention_dropout (float, 可选, 默认值为 0.0) — 注意力概率的丢弃率。
  • clip_qkv (float, 可选) — 如果不为 None,则查询、键和值注意力状态的元素会被裁剪,使其绝对值不超过此值。

这是用于存储 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

< >

( config: OlmoConfig )

参数

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

不带任何特定头的裸 Olmo 模型,输出原始隐藏状态。此模型继承自 PreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入的大小、剪枝头等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有事宜。

包含 config.num_hidden_layers 层的 Transformer 解码器。每层都是一个 OlmoDecoderLayer

forward

< >

( input_ids: LongTensor = None attention_mask: Optional = None position_ids: Optional = None past_key_values: Union = 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 )

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 词汇表中输入序列令牌的索引。如果您提供填充,默认情况下会忽略填充。

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

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), 可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示未屏蔽的标记,
    • 0 表示屏蔽的标记.

    什么是注意力掩码?

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

    如果使用 past_key_values,可以选择仅输入最后一个 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] 范围内选择。

    什么是位置 ID?

  • past_key_values (Cachetuple(tuple(torch.FloatTensor)), 可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的先前阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv 缓存指南;
    • tuple(torch.FloatTensor) 的元组,长度为 config.n_layers,每个元组具有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。这也被称为传统缓存格式。

    模型将输出与输入相同的缓存格式。如果未传递 past_key_values,则将返回传统缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后一个 input_ids(那些没有为此模型提供过去键值状态的 input_ids),形状为 (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, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回一个 ModelOutput 而不是一个简单的元组。
  • cache_position (torch.LongTensor 形状为 (sequence_length), 可选) — 指示输入序列标记在序列中的位置的索引。与 position_ids 不同,此张量不受填充的影响。它用于在正确的位置更新缓存并推断完整的序列长度。

The OlmoModel 正向方法,覆盖了 __call__ 特殊方法。

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

forward

< >

( input_ids: LongTensor = None attention_mask: 可选 = None position_ids: 可选 = None past_key_values: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None use_cache: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None cache_position: 可选 = None num_logits_to_keep: int = 0 ) transformers.modeling_outputs.CausalLMOutputWithPast or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length)) — 词汇表中输入序列标记的索引。默认情况下,如果提供填充,则填充将被忽略。

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

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length)可选) — 掩码以避免对填充标记索引执行注意力。掩码值选择在 [0, 1] 中:

    • 1 表示未屏蔽的标记,
    • 0 表示屏蔽的标记。

    什么是注意力掩码?

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

    如果使用 past_key_values,可以选择仅输入最后一个 input_ids(那些没有将其过去的键值状态提供给此模型的 input_ids),形状为 (batch_size, 1),而不是所有 input_ids,形状为 (batch_size, sequence_length)

    如果您想更改填充行为,您应该阅读 modeling_opt._prepare_decoder_attention_mask 并修改以满足您的需求。有关默认策略的更多信息,请参阅 论文 中的图表 1。

    • 1 表示头部未屏蔽
    • 0 表示头部屏蔽
  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列标记的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是位置 ID?

  • past_key_values (Cache or tuple(tuple(torch.FloatTensor))可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加快顺序解码速度。这通常包括模型在解码的先前阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • Cache 实例,请参阅我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(tuple(torch.FloatTensor)),每个元组包含两个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。这也被称为传统缓存格式。

    模型将输出与输入相同的缓存格式。如果没有传递 past_key_values,将返回传统缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后一个 input_ids(那些没有将其过去的键值状态提供给此模型的 input_ids),形状为 (batch_size, 1),而不是所有 input_ids,形状为 (batch_size, sequence_length)

  • 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, sequence_length), 可选): 用于计算掩蔽语言建模损失的标签。索引应在 [0, ..., config.vocab_size] 或 -100 中(参见 input_ids 文档字符串)。索引设置为 -100 的标记将被忽略(掩蔽),仅计算标签在 [0, ..., config.vocab_size] 中的标记的损失。

    num_logits_to_keep (int, 可选): 为最后 num_logits_to_keep 个标记计算 logits。如果为 0,则为所有 input_ids 计算 logits(特殊情况)。生成仅需要最后一个标记的 logits,仅为该标记计算 logits 可以节省内存,这对于长序列或大型词汇量来说非常重要。

返回

transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutputWithPasttorch.FloatTensor 的元组(如果传递了 return_dict=Falseconfig.return_dict=False),包含各种元素,具体取决于配置 (OlmoConfig) 和输入。

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

  • logits (torch.FloatTensor 形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(在 SoftMax 之前的每个词汇标记的分数)。

  • past_key_values (tuple(tuple(torch.FloatTensor)), 可选, 当传递 use_cache=Trueconfig.use_cache=True 时返回) — 长度为 config.n_layerstuple(torch.FloatTensor) 的元组,每个元组包含两个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。

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

  • hidden_states (tuple(torch.FloatTensor), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 的元组(一个用于嵌入的输出,如果模型具有嵌入层,再加上每个层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层的输出处的隐藏状态,以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

OlmoForCausalLM 正向方法,覆盖 __call__ 特殊方法。

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

示例

>>> from transformers import AutoTokenizer, OlmoForCausalLM

>>> model = OlmoForCausalLM.from_pretrained("allenai/OLMo-1B-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("allenai/OLMo-1B-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 sure if you’re conscious of this, but I’m'

< > 在 GitHub 上更新