完全开源的大语言模型 OLMo:加速语言模型科学研究 OLMo : Accelerating the Science of Language Models_olmo模型技术报告-程序员宅基地

技术标签: 语言模型  人工智能  自然语言处理  大语言模型  


论文名称:OLMo : Accelerating the Science of Language Models

摘要

语言模型(LMs)已经在自然语言处理研究和商业产品中变得无处不在。随着它们在商业上的重要性不断增长,最强大的模型已经变得封闭,隐藏在专有接口后面,其训练数据、架构和开发的重要细节未披露。考虑到这些细节在科学研究这些模型时的重要性,包括它们的偏见和潜在风险,我们认为研究界有必要获得强大、真正开放的LMs。为此,本技术报告详细介绍了OLMo的首次发布,这是一款最先进的、真正开放的语言模型,以及用于构建和研究语言建模科学的框架。与大多数之前仅发布模型权重和推理代码的努力不同,我们发布了OLMo和整个框架,包括训练数据、训练和评估代码。我们希望这一发布能赋予和加强开放研究社区,并激发新一波创新。

Weight: https://huggingface.co/allenai/OLMo-7B
Code: https://github.com/allenai/OLMo
Data: https://huggingface.co/datasets/allenai/dolma
Evaluation: https://github.com/allenai/OLMo-Eval
Adaptation: https://github.com/allenai/open-instruct
W&B logs: https://wandb.ai/ai2-llm/OLMo-7B/reports/OLMo-7B–Vmlldzo2NzQyMzk5

1 引言

多年来,语言模型一直是自然语言处理技术的核心(Rosenfeld, 2000; Bengio et al., 2003; Mikolov et al., 2013; Peters et al., 2018; Brown et al., 2020)。最近,由于大规模预训练和人工标注对齐,它们变得具有商业价值(OpenAI, 2023)。然而,随着它们的商业价值增加,最大的模型已经被封锁在专有接口后面,重要细节未披露。

我们认为,对于研究界来说,完全获得开放的语言模型对于科学研究这些模型、它们的优势和劣势、以及偏见和风险至关重要。因此,我们推出了OLMo,这是一款最先进、真正开放的语言模型和框架,用于构建、研究和推进LMs,包括训练数据、训练和评估代码、中间模型检查点和训练日志。

最近的LM发布在开放程度上有所不同。例如,Mistral 8x7B提供了模型权重和简要报告(Jiang et al., 2024),而LLaMA附带了深入的适应训练说明(Touvron et al., 2023b),Mosaic Pretrained Transformer提供了许多细节,包括数据集分布,尽管没有提供数据本身(MosaicML NLP Team, 2023)。Falcon的预训练数据部分发布(Almazrouei et al., 2023),而最开放的模型 - Pythia套件(Biderman et al., 2023)和BLOOM(BigScience et al., 2022)-发布了训练代码、模型检查点、训练数据等。

通过OLMo,我们发布了从数据到训练再到评估工具的整个框架:多个硬件类型上的多个训练检查点、训练日志和使用的确切数据集,采用宽松许可证。我们不是唯一一个这样做的团队;最近LLM360的工作也致力于实现类似的目标(Liu et al., 2023)。OLMo缩小了从它们的模型到像LLaMA2这样的最先进模型能力之间的差距。这个项目受益于之前所有这些不同开放程度的努力所学到的经验教训,我们相信,大量多样化的开放模型是理解语言模型的科学进展和改进其效用的工程进展的最佳希望。

OLMo框架包括构建和研究语言模型所需的工具和资源。对于训练和建模,它包括完整的模型权重、训练代码、训练日志、消融实验、权重和偏差日志以及推理代码。这一首次发布包括我们语言模型的四个7B规模的变体,对应不同的架构、优化器和训练硬件,以及一个1B规模的模型,所有模型至少训练了 2   T 2 \mathrm{~T} 2 T个标记。我们还发布了数百个中间检查点,可作为HuggingFace上的修订版本提供。对于数据集构建和分析,它包括用于这些模型的完整训练数据,包括生成训练数据的代码,来自AI2的Dolma(Soldaini et al., 2024),以及用于分析预训练数据的WIMBD(Elazar et al., 2023)。对于评估,它包括AI2的Catwalk(Groeneveld et al., 2023)用于下游评估和Paloma(Magnusson et al., 2023)用于基于困惑度的评估。对于指导调整,我们发布了Open Instruct(Ivison et al., 2023; Wang et al., 2023),目前正在使用它来生成一个经过调整(指导调整和RLHFed)的OLMo版本,我们将很快发布。最后,所有代码和权重均在Apache 2.0许可下发布。[^1]

这是一系列计划发布的第一步,接下来将继续发布更大的模型、指导调整的模型,以及更多的模态和变体。因此,我们希望促进对这些模型尚未完全理解的方面的研究,例如预训练数据与模型能力之间的关系,设计和超参数选择的影响,以及各种优化方法及其对模型训练的影响。此外,我们报告了在这一规模成功训练语言模型所需的经验教训和重要细节。

2 OLMo框架

本节描述了OLMo框架,包括OLMo模型(第2.1节)、我们的预训练数据集Dolma(第2.2节)和我们的评估框架(第2.4节)。

2.1 OLMo模型和架构

我们采用基于Vaswani等人(2017)的解码器-仅变压器架构,并提供如表1所述的1B和7B变体,65B版本即将推出。我们的具体架构在Vaswani等人(2017)的基础上进行了几项改进,遵循其他最近的大型语言模型,如PaLM(Chowdhery等人,2022)、LLaMA系列(Touvron等人,2023a,b)、OpenLM(Gururangan等人,2023)和Falcon(Almazrouei等人,2023)。表2对比了我们的7B架构与这些其他系列中类似规模的模型。

大小 层数 隐藏大小 注意力头数 训练标记数
1B 16 2048 16 2   T 2 \mathrm{~T} 2 T
7B 32 4086 32 2.46   T 2.46 \mathrm{~T} 2.46 T
65B* 80 8192 64

表1:OLMo模型规模及训练的最大标记数。

  • 在撰写本文时,我们的65B模型仍在训练中。

我们通常通过在我们的硬件上优化训练吞吐量的方式来选择超参数,同时最小化损失峰值和慢发散的风险。通过我们的循环内评估设置,我们消融选择,考虑到可用的计算资源(第2.4节)。表2将我们的设计选择与最近最先进的开放语言模型进行了比较。我们对Vanilla Transformer架构的主要更改可以总结如下:

  1. 无偏见。遵循LLaMA、PaLM等,我们从架构中排除了所有偏见项,以提高训练稳定性。
  2. 非参数化层归一化。我们使用层归一化的非参数化公式(Ba等,2016),其中在归一化中没有仿射变换,即没有“自适应增益”(或偏差)。我们认为这是最安全的选择,而且与我们考虑的其他变体相比速度最快:参数化层归一化和RMSNorm(Zhang和Sennrich,2019)。
  3. SwiGLU激活函数。与LLaMA、PaLM等人一样,我们使用SwiGLU激活函数(Shazeer,2020)而不是ReLU,且根据LLaMA,激活隐藏大小约为 8 3 d \frac{8}{3} d 38d,但增加到最接近的128的倍数(例如我们7B模型的11,008)以提高吞吐量。 2 { }^{2} 2
  4. 旋转位置嵌入(RoPE)。与LLaMA、PaLM等人一样,我们用旋转位置嵌入(RoPE;Su等,2021)替换绝对位置嵌入。
  5. 词汇表。我们使用GPT-NeoX-20B(Black等,2022)的修改版本的基于BPE的分词器,其中包含用于屏蔽个人可识别信息(PII)的额外标记。最终词汇表大小为50,280。然而,为了最大化训练吞吐量,我们将模型中对应的嵌入矩阵大小增加到50,304,使其成为128的倍数。

2.2 预训练数据:Dolma

尽管在访问模型参数方面取得了进展,但预训练数据仍然不够开放。预训练数据通常不会与开放模型(更不用说封闭模型)一起发布,关于这些数据的文档通常缺乏足够详细的信息,以便重现或充分理解工作。这使得支持某些语言模型研究线索变得困难,例如理解训练数据如何影响模型的能力和局限性。为了促进语言模型预训练的开放研究,我们构建并发布了我们的预训练数据集Dolma,这是一个包含来自7个不同数据源的5B文档中的 3   T 3 \mathrm{~T} 3 T标记的多样化、多源语料库,这些数据源(1)在大规模语言模型预训练中经常出现,(2)对普通公众可访问(Soldaini等人,2024)。表3提供了每个数据源的数据量的高级概述。

表2:7-8B规模的LM架构比较。在“层归一化类型”行中,“parametric”和“non-parametric”分别指通常的带有自适应增益和偏差的层归一化实现。

表3:Dolma的构成

Dolma是通过一系列步骤构建的,包括(1)语言过滤,(2)质量过滤,(3)内容过滤,(4)去重,(5)多源混合,和(6)标记化。我们建议读者参阅Dolma报告(Soldaini等人,2024年)以获取有关其设计原则、构建细节以及内容更详细摘要的更多信息。该报告提供了关于在Dolma的中间状态上训练语言模型的额外分析和实验结果,以分享我们对重要数据筛选实践的认识,包括内容或质量过滤器、去重和混合来自多个来源的数据的作用。我们在策展过程中以及在最终发布时都会保持来自每个来源的文档分开。我们开源了我们的高性能数据筛选工具;这个工具包可以用于进一步对Dolma进行实验、重现我们的工作,并实现对预训练语料库的快速和简便的策展。最后,我们还开源了我们的WIMBD工具(Elazar等人,2023年)来帮助进行数据集分析。

2.3 自适应

预训练模型通常不会直接使用,而是进一步微调以提高性能、安全性和可用性。通常情况下,模型首先接受指令训练(Mishra等人,2022年;Wei等人,2022年;Sanh等人,2022年),然后进一步根据人类偏好进行训练(Ouyang等人,2022年)以提高生成质量。我们展示了使用OLMo作为进一步微调的基础模型的有效性,通过使用我们的Open Instruct(TÜLU)数据和训练设置(Ivison等人,2023年)训练OLMo成为通用聊天助手。我们的方法首先使用混合的精炼和人工编写的指令数据进行指令微调,然后使用直接偏好优化(DPO)(Rafailov等人,2023年)进一步调整模型以符合精炼偏好数据。我们尝试在预训练结束时混合Tulu指令数据,就像最近的模型DeepSeek-AI等人(2024年)所做的那样,但并没有得出明确的结论。

2.4 评估

我们在两个阶段进行基础模型评估:在线评估用于制定模型设计决策,离线评估用于评估模型检查点。对于离线阶段,我们使用Catwalk框架(Groeneveld等人,2023年),这是一个公开可用的评估工具,可以访问各种数据集和任务格式。使用Catwalk,我们进行下游评估以及对新的困惑度基准Paloma(Magnusson等人,2023年)进行内在语言建模评估。

对于下游和困惑度评估,我们使用我们固定的评估流程来与公开可用的模型进行比较。我们还报告了对我们调整后的模型的单独评估。

循环内训练消融:在模型训练过程中,我们进行下游评估以做出关于模型架构、初始化、优化器、学习率调度和数据混合的决策。我们将这称为我们的在线评估,因为它在每1000个训练步骤(或约4B个训练标记)中循环运行,并提供有关正在训练的模型质量的早期和持续信号。这些评估依赖于我们在第4.1节中详细介绍的离线评估所使用的许多核心任务和实验设置,这也反映了EleutherAI评估工具(Gao等人,2023年)的任务和评估结构。

下游评估:继很多先前的工作(Brown等人,2020年;Black等人,2022年;Touvron等人,2023a,b,等)之后,我们报告了在一组下游任务上的零样本性能。我们的评估套件包括8个核心任务,与Touvron等人(2023a)和Touvron等人(2023b)报告的常识推理任务集密切对应(请参见表6列出的任务列表)。鉴于正在评估的模型规模,这些任务是在模型开发初期选择的,因为它们的自然性(例如,所有任务都可以被制定为文本完成评分任务)以及能够在整个训练过程中提供有意义的信号(请参见图1)。

内在语言建模评估:为了衡量OLMo-7B在训练数据之外的语言分布拟合情况,我们使用了Paloma(Magnusson等人,2023年),这是一个包含585个不同文本领域的新困惑度基准。这些领域从nytimes.com到Reddit上的r/depression等18个不同数据源中抽取,以分层样本的形式。这样可以更平等地包含在其源语料库中代表性不足的文本领域。

我们的目标不仅是将OLMo-7B与其他模型进行性能比较,还要展示它如何实现更全面和更可控的科学评估。OLMo-7B是具有明确去污染功能的最大语言模型。根据Paloma描述的方法,我们移除了任何泄漏自Paloma评估数据的预训练文档。没有去污染,其他模型可能会低估困惑度(即高估模型的样本外拟合)。我们还发布了中间检查点,允许与另外两个发布检查点的模型Pythia-6.9B(Biderman等人,2023年)和RPJ-INCITE-7B(Together Computer,2023年)进行更丰富的比较(请参见图2)。

自适应评估:我们还遵循我们的Open Instruct评估套件Wang等人(2023年);Ivison等人(2023年)来评估经过指令微调和DPO训练后的OLMo。我们专注于评估模型聊天能力和安全性,以展示使用OLMo作为进一步微调基础的有效性。

3 训练OLMo

本节描述了我们的预训练设置,包括我们的分布式训练框架(第3.1节)、优化器设置(第3.2节)、数据准备(第3.3节)和硬件(第3.4节)。

3.1 分布式训练框架

我们使用ZeRO优化器策略(Rajbhandari等人,2019年)通过PyTorch的FSDP框架(Zhao等人,2023年)来训练我们的模型,该框架通过在GPU上划分模型权重及其对应的优化器状态来减少内存消耗。在7B规模下,这使得我们可以在我们的硬件上每个GPU使用4096个标记的微批量大小进行训练(请参见第3.4节)。对于OLMo-1B和-7B模型,我们使用约4M标记(2048个实例,每个实例具有2048个标记序列)的恒定全局批量大小。对于OLMo-65B模型(目前正在训练),我们使用一个批量大小预热,从大约 2 M 2 \mathrm{M} 2M标记(1024个实例)开始,然后每100B标记加倍,直到达到大约16M标记(8192个实例)。

为了提高吞吐量,我们通过FSDP的内置设置和PyTorch的amp模块使用混合精度训练(Micikevicius等人,2017年)。后者确保某些操作(如softmax)始终以全精度运行,以提高稳定性,而所有其他操作则以bfloat16格式的半精度运行。在我们的特定设置下,每个GPU上的分片模型权重和优化器状态保持全精度。在前向和后向传递期间,每个变压器块内的权重仅在全尺寸参数在每个GPU上实现时才转换为bfloat16。梯度在全精度上跨GPU进行减少。

3.2 优化器

我们使用AdamW优化器(Loshchilov和Hutter,2019年),其超参数如表4所示。对于所有模型大小,我们在5000步(21B标记)内逐渐升高学习率,然后在剩余的训练过程中线性衰减到最高学习率的十分之一。在预热期之后,我们裁剪梯度,使参数梯度的总 l 2 l^{2} l2-范数不超过1.0。表5比较了我们在7B规模上的优化器设置与其他最近使用AdamW的LM模型的设置。

3.3 数据

我们从我们的开放数据集Dolma(Soldaini等人,2024年)中提取了2T标记样本构建我们的训练数据集,我们在第2.2节中进行了描述。每个文档的标记在附加特殊的EOS标记到每个文档末尾后连接在一起,然后我们将连续的2048个标记块组合成训练实例。每次训练运行时,训练实例都以完全相同的方式进行了洗牌。数据顺序和每个训练批次的确切组成可以从我们发布的工件中重建。

我们发布的所有模型都经过至少 2   T 2 \mathrm{~T} 2 T标记(在我们的训练数据上的一个时代)的训练,有些模型甚至通过以不同的洗牌顺序开始第二个时代的数据训练而进行了超出的训练。根据先前的工作(Muennighoff等人,2023年)的说法,重复这一小量数据的影响应该可以忽略。

3.4 硬件

为了验证我们的代码库在NVIDIA和AMD GPU上都可以使用而不会损失性能,我们在两个不同的集群上训练了模型:[^2]

大小 峰值学习率 Beta值 Epsilon 权重衰减 批量大小(标记)
1B 4.0 E − 4 4.0 \mathrm{E}-4 4.0E4 ( 0.9 , 0.95 ) (0.9,0.95) (0.9,0.95) 1.0 E − 5 1.0 \mathrm{E}-5 1.0E5 0.1 ∼ 4 M \sim 4 \mathrm{M} 4M
7B 3.0 E − 4 3.0 \mathrm{E}-4 3.0E4 ( 0.9 , 0.95 ) (0.9,0.95) (0.9,0.95) 1.0 E − 5 1.0 \mathrm{E}-5 1.0E5 0.1 ∼ 4 M \sim 4 \mathrm{M} 4M
65B* 1.5 E − 4 1.5 \mathrm{E}-4 1.5E4 ( 0.9 , 0.95 ) (0.9,0.95) (0.9,0.95) 1.0 E − 5 1.0 \mathrm{E}-5 1.0E5 0.1 ∼ 2 M → ∼ 4 M → ∼ 8 M → ∼ 16 M \sim 2 \mathrm{M} \rightarrow \sim 4 \mathrm{M} \rightarrow \sim 8 \mathrm{M} \rightarrow \sim 16 \mathrm{M} 2M→∼4M→∼8M→∼16M

表4:OLMo模型的AdamW预训练超参数。

  • 在撰写本文时,我们的65B模型仍在训练中。
OLMo-7B LLaMA2-7B OpenLM-7B Falcon-7B
预热步数 5000 2000 2000 1000
峰值学习率 3.0 E − 04 3.0 \mathrm{E}-04 3.0E04 3.0 E − 04 3.0 \mathrm{E}-04 3.0E04 3.0 E − 04 3.0 \mathrm{E}-04 3.0E04 6.0 E − 04 6.0 \mathrm{E}-04 6.0E04
最小学习率 3.0 E − 05 3.0 \mathrm{E}-05 3.0E05 3.0 E − 05 3.0 \mathrm{E}-05 3.0E05 3.0 E − 05 3.0 \mathrm{E}-05 3.0E05 1.2 E − 05 1.2 \mathrm{E}-05 1.2E05
beta1 0.9 0.9 0.9 0.99
beta2 0.95 0.95 0.95 0.999
epsilon 1.0 E − 05 1.0 \mathrm{E}-05 1.0E05 1.0 E − 05 1.0 \mathrm{E}-05 1.0E05 1.0 E − 05 1.0 \mathrm{E}-05 1.0E05 1.0 E − 05 1.0 \mathrm{E}-05 1.0E05
学习率调度 线性 余弦 余弦 余弦
梯度裁剪 全局 1.0 全局 1.0 全局 1.0 全局 1.0
梯度减少数据类型 FP32 FP32 FP32 BF16
优化器状态数据类型 FP32 最可能为FP32 FP32 FP32

表5:在7B规模上预训练优化器设置的比较。本表中的每个模型均使用AdamW作为其优化器。

  • LUMI:由LUMI超级计算机提供, 4 { }^{4} 4我们在该集群上使用了高达256个节点,每个节点由4个AMD MI250X GPU组成,内存为128GB 5 { }^{5} 5,互连速度为800Gbps。
  • MosaicML:由MosaicML 6 { }^{6} 6(Databricks)提供,我们在该集群上使用了27个节点,每个节点由8个NVIDIA A100 GPU组成,内存为40GB,互连速度为800Gbps。

尽管为了优化训练吞吐量而存在批量大小上的轻微差异,但两次运行在我们的评估套件中表现几乎相同,达到了 2   T 2 \mathrm{~T} 2 T tokens。

4 结果

用于评估OLMo-7B的检查点在Dolma(Soldaini等人,2024年)数据集上训练至2.46T tokens,采用了第3.2节中提到的线性学习率衰减调度。在我们的实验中,我们发现将该检查点在Dolma数据集上进一步调整1000步,学习率线性衰减至0,可以提升模型在第2.4节中描述的困惑度和最终任务评估套件上的性能。我们将OLMo与其他公开可用模型进行了比较,包括LLaMA-7B(Touvron等人,2023a)、LLaMA2-7B(Touvron等人,2023b)、MPT-7B(MosaicML NLP团队,2023)、Pythia-6.9B(Biderman等人,2023)、Falcon-7B(Almazrouei等人,2023)和RPJ-INCITE-7B(Together Computer,2023)。

4.1 下游评估

设置 我们的核心下游评估套件(见表6)包括:arc(arc_easy和arc_challenge)(Clark等人,2018)、boolq(Clark等人,2019)、openbookqa(Mihaylov等人,[^3]

7B Models arc challenge arc easy boolq hella- swag open bookqa piqa sciq wino- grande avg.
Falcon 47.5 70.4 74.6 75.9 53.0 78.5 93.9 68.9 70.3
LLaMA 44.5 67.9 75.4 76.2 51.2 77.2 93.9 70.5 69.6
Llama 2 48.5 69.5 80.2 76.8 48.4 76.7 94.5 69.4 70.5
MPT 46.5 70.5 74.2 77.6 48.6 77.3 93.7 69.9 69.8
Pythia 44.1 61.9 61.1 63.8 45.0 75.1 91.1 62.0 63.0
RPJ-INCITE 42.8 68.4 68.6 70.3 49.4 76.0 92.9 64.7 66.6
OLMo-7B 48.5 65.4 73.4 76.4 50.4 78.4 93.8 67.9 69.3

表6:OLMo-7B和其他6个公开可用的可比较模型检查点在第2.4节描述的8个核心任务上进行零射评估。对于OLMo-7B,我们报告了 2.46   T 2.46 \mathrm{~T} 2.46 T token检查点的结果。

2018年),sciq(Welbl等人,2017),hellaswag(Zellers等人,2019),piqa(Bisk等人,2020)和winogrande(Sakaguchi等人,2021)。在附录A中,我们还报告了一组额外的辅助任务的结果,这些任务不属于我们的核心评估集,我们发现这些任务的性能趋势不太稳定(见图4)。

在所有情况下,我们使用Brown等人(2020)推广的排名分类方法进行零射评估。根据这种方法,候选文本完成(例如,不同的多选项)按可能性进行排名(通常通过某种归一化因子进行归一化),并报告预测准确性。虽然Catwalk实现了几种常见的可能性归一化策略,包括按标记数(每标记归一化)(Brown等人,2020;Liang等人,2022)进行归一化,按字符数(每字符归一化)(Gao等人,2023)进行归一化,以及结合答案的无条件可能性(Brown等人,2020),但我们为每个数据集单独选择了归一化策略。具体来说,我们对arc和openbookqa使用无条件归一化,对hellaswag、piqa和winogrande使用每标记归一化,对boolq和sciq不进行归一化(即,作为单标记预测任务的任务)。

结果 表6总结了OLMo-7B的零射评估结果,并将其与6个可比较规模的公开可用模型进行了比较。我们报告了我们在第2.4节描述的评估套件中的8个核心任务的结果。总体而言,OLMo-7B在我们的比较表中竞争力强,与所有6个公开可用模型检查点竞争激烈。

在图1中,我们绘制了8个核心最终任务的准确度得分进展。除OBQA外,大多数任务在OLMo-7B在更多tokens上训练时显示出准确度数字上升的趋势。在最后1000个训练步骤中将LR线性降至0的好处在许多任务的准确度上出现了明显提升。有关额外评估结果和讨论,请参见附录A中的表9。

4.2 内在语言建模评估

设置 对于内在评估,Paloma提出了一系列分析,从单独检查每个领域的性能到对领域组合的更概括结果。我们报告了两个粒度级别的结果:在Paloma的18个来源中的11个的总体性能,如Magnusson等人(2023)所述,以及对这些来源中每个单独来源的更详细结果。这个特定的11个Paloma来源子集排除了不公开可用的来源,涉及边缘或有毒文本,或由Paloma的净化方法不支持的代码数据。这包括C4(Raffel等人,2020)、mC4-en(Chung等人,2023)、Wikitext 103(Merity等人,2016)、Penn Treebank(Marcus等人,1999;Nunes,2020)、RedPajama(Together Computer,2023)、Falcon-RefinedWeb(Penedo等人,2023)、Dolma(Soldaini等人,2024)、M2D2 S2ORC(Reid等人,2022)、M2D2 Wikipedia(Reid等人,2022)、C4 100 domains(Chronopoulou等人,2022)和Dolma 100 Subreddits(Soldaini等人,2024)。为了公平比较具有不同词汇量的模型,我们报告了Gao等人(2020)定义的每字节比特率,覆盖了这些来源的测试集。

结果 在图2的Sources Combined子图中,我们展示了OLMo-7B在Paloma的11个数据源组合上与6个规模相当的语言模型的性能。

图1:OLMo-7B在Catwalk评估套件中8个核心最终任务得分的准确度得分进展。我们可以看到在训练更多tokens时,将LR衰减至0在大多数任务上的好处。

总体而言,我们发现OLMo在与Paloma明确净化的训练数据进行比较时具有竞争力。通过比较最终模型(见形状)以及中间检查点(见虚线),OLMo的结果遵循其他模型的类似缩放趋势。请注意,中间检查点的性能受到检查点在学习率调度中的位置的影响。因此,训练步骤较少的模型往往会具有更陡的训练曲线,而不一定更具样本效率,如果训练持续时间在所有模型中是固定的。然而,MPT-7B在这个子图中脱颖而出,比其他模型更快地改进。这可能是由于许多因素,包括预训练数据的组成及其与Paloma领域的匹配(例如,MPT在 27 % 27 \% 27%的非Common Crawl数据上训练,而LLaMA为 18 % 18 \% 18%,RedPajama为 12.2 % 12.2 \% 12.2%,OLMo为 11.2 % 11.2 \% 11.2%),以及各种数据预处理决策(例如,MPT在C4上使用了Abbas等人,2023的语义去重)。

图2中的其余子图通过分别报告每个组合在聚合Paloma指标中结合的11个数据源的每字节比特数,提供了更详细的分析。从中我们可以看到样本效率的差异较大,主要受训练和评估分布的相似性驱动。值得注意的是,OLMo-7B在以Common Crawl为主的评估中表现良好,例如C4,尽管不同的对Common Crawl的后处理方式最适合使用具体数据训练的模型,例如Falcon-7B在Falcon RefinedWeb上。与其他模型相比,OLMo-7B在与不太相关于抓取的网页文本的来源上,如WikiText-103、M2D2 S2ORC和M2D2 Wikipedia上的评估中,样本效率较低。RedPajama评估显示了类似的模式,也许是因为其7个领域中只有2个来自Common Crawl,并且Paloma在每个来源中平等加权领域。由于来自维基百科和ArXiv论文等策划来源的异构数据比抓取的网页文本少得多,因此在适应这些语言分布时保持样本效率将是具有挑战性的,因为预训练语料库被扩展。

4.3 适应性评估

设置 我们在适应之前评估OLMo,并在监督微调和DPO训练阶段之后评估,重点关注Wang等人(2023)使用的安全性和聊天评估。我们还与表6中的模型的官方发布的指令调整变体进行比较。最后,我们还与TÜLU 2模型进行比较,以便与使用相同的后训练数据混合和程序训练的模型进行比较。

4.4 电力消耗和碳足迹

根据先前的文献(Strubell等,2019;Patterson等,2021;Wu等,2022;Dodge等,2022),我们通过计算训练所需的总功耗,然后乘以模型训练地点电网的碳排放强度,估算了在预训练模型时消耗的总能量和排放的碳量。虽然报告这些运营排放是标准做法,但它并不考虑其他排放来源,如硬件和数据中心基础设施的制造、运输和处置所产生的固有排放、使用期间的终身运营排放、反弹效应,或者其他环境影响,比如水消耗或采矿。因此,我们的估算应被视为下限。

我们通过每25毫秒测量单个节点的功耗,计算整个训练过程的平均值,并乘以节点的总数来计算我们模型的总功耗。然后,我们通过乘以一个功耗使用效率(PUE)因子来考虑数据中心的能源效率,我们将其设置为1.1,代表节能数据中心典型的10%能源消耗额外开销。我们估计预训练我们的7B模型消耗了239兆瓦时的能量。

为了计算碳排放量,我们将总功耗乘以一个碳排放强度因子,以每千瓦时排放的二氧化碳( k g C O 2 \mathrm{kg} \mathrm{CO}_{2} kgCO2)为单位,基于每个模型训练所在数据中心的物理位置。在澳大利亚训练的A100-40GB GPU模型,我们假设碳排放强度因子为0.610,这是2022年澳大利亚的国家平均值。在LUMI超级计算机上训练的MI250X GPU模型,LUMI完全使用可再生的、碳中性的能源,因此我们假设碳排放强度因子为0。LUMI完全由水力发电供电,一些来源(Ubierna等,2022)测量水力发电的碳排放强度因子为0.024,这将意味着总碳排放量为3.54吨二氧化碳当量。然而,我们依赖于官方的LUMI数据进行计算,因此我们估计预训练排放总量为69.78吨二氧化碳当量。在表8中,我们根据公开可获得的PUE数据、当地电网的碳排放强度以及报告的功耗,比较了我们的模型与其他先前发布的模型。

我们希望通过公开发布我们的模型,让其他人避免从头开始预训练模型,同时了解开发最先进模型的真实成本。我们还强调,我们的估算是下限,因为它们不包括其他关键开发部分,如调试、超参数调整和停机时间。

5 发布的工件

通过分享所有流水线阶段的工件,我们旨在鼓励开放研究,并减少学术界和从业者重复、通常昂贵的努力。我们发布以下内容:

  1. 训练和建模代码。 13 { }^{13} 13

表8:预训练期间的 C O 2 \mathrm{CO}_{2} CO2排放量。我们使用公开可获得的PUE数据、当地电网的碳排放强度以及报告的功耗,估算了各种模型的总碳排放量。Gopher-280B(Rae等,2022)、BLOOM-176B(Luccioni等,2022)、OPT-175B(Zhang等,2022)、T5-11B(Patterson等,2021)、LLaMA(Touvron等,2023a)和LLaMA2(Touvron等,2023b)的数字取自各自的论文。详见第4.4节,了解如何计算tCO2eq的细节。

  • LUMI完全使用水力发电 12 { }^{12} 12,一些估算(Ubierna等,2022)测量水力发电的强度因子为0.024,意味着总排放量为3.54吨二氧化碳当量。
  1. 7B模型、 14 7   B { }^{14} 7 \mathrm{~B} 147 B-twin-2T 15 { }^{15} 15 1   B 1 \mathrm{~B} 1 B模型的训练模型权重。 16 { }^{16} 16对于所有模型,我们不仅发布最终模型权重,还发布间隔为1000步的500多个中间检查点。
  2. 通过我们的Open Instruct 19 { }^{19} 19库(Wang等,2023;Ivison等,2023)使用指导调整、7B-SFT 17 { }^{17} 17和RLHF的调整OLMo-7B,7B-Instruct 18 { }^{18} 18,包括其训练和评估代码和数据。
  3. 训练数据Dolma(Soldaini等,2024)。 20 { }^{20} 20
  4. Dolma的工具包,用于构建新数据集, 21 { }^{21} 21以及用于数据集分析的WIMBD(Elazar等,2023)。 22 { }^{22} 22
  5. 使用Catwalk 24 { }^{24} 24进行下游评估的评估代码。 23 { }^{23} 23(Groeneveld等,2023),以及用于基于困惑度评估的Paloma 25 { }^{25} 25(Magnusson等,2023)。
  6. 在训练期间记录到Weights & Biases的完整指标集。 26 { }^{26} 26

我们打算在此发布后继续跟进,提供更多的训练日志、消融实验和发现。[^5]

6 许可证

我们的目标是促进科学发展,赋予科学界灵活使用我们资源和工件的许可,因此所有代码和权重均采用Apache 2.0许可发布。 27 { }^{27} 27一些组织最近发布的模型采用的许可禁止使用其模型的输出来训练人工智能或机器学习系统,而我们明确允许用户这样做。我们也不限制商业使用。我们希望我们的模型能够使其他模型变得更好。我们认识到我们的模型被滥用的风险相对较低,因为它们主要被设计为科学工件,而不是广泛公众采用的产品(我们的模型尚未被改编为聊天机器人)。此外,过去一年中已经发布了许多采用非常宽松许可的可比模型,因此对我们的工作采用更严格的许可不会消除该领域的整体风险。我们认为,在更加开放的一面进行这种权衡是最佳选择。

7 结论和未来工作

本技术报告介绍了我们首次发布的OLMo,这是一种最先进的、真正开放的语言模型,以及用于构建和研究语言建模科学的框架。与大多数先前的努力只发布模型权重和推理代码不同,我们发布了OLMo和整个框架,包括训练数据和训练以及评估代码。很快,我们还将发布训练日志、消融实验、发现和Weights & Biases日志。我们还在探索将OLMo与指导调整和不同风格的RLHF相结合。我们将发布调整后的模型以及我们所有的模型适应代码和数据。

我们打算持续支持和扩展OLMo及其框架,并继续推动开放语言模型的边界,以赋予开放研究社区更多的力量。为此,我们期待将不同的模型大小、模态、数据集、安全措施和评估引入OLMo系列。我们希望这次和未来的发布能够赋予和加强开放研究社区,并激发新一波创新。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wjjc1017/article/details/137513069

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签