《TinyLlama: An Open-Source Small Language Model》全文翻译

【Title】

TinyLlama:开源小语言模型

【Abstract】

        我们推出了 TinyLlama,这是一个紧凑的 1.1B 语言模型,在大约 1 万亿个令牌上进行了大约 3 个时期的预训练。 TinyLlama 基于 Llama 2(Touvron 等人,2023b)的架构和标记器构建,利用开源社区贡献的各种进步(例如 FlashAttention(Dao,2023)),实现了更好的计算效率。 尽管规模相对较小,TinyLlama 在一系列下游任务中表现出了出色的性能。 它的性能明显优于规模相当的现有开源语言模型。 我们的模型检查点和代码可在 GitHub 上公开获取:https://github.com/jzhang38/TinyLlama。

【Introduction】

        自然语言处理 (NLP) 的最新进展在很大程度上是通过扩大语言模型大小来推动的(Brown 等人,2020;Chowdhery 等人,2022;Touvron 等人,2023a,b)。 在广泛的文本语料库上预训练的大型语言模型 (LLM) 已证明其在各种任务上的有效性(OpenAI,2023;Touvron 等人,2023b)。 一些实证研究证明了法学硕士的涌现能力,这些能力可能只在具有足够多参数的模型中体现出来,例如少样本提示(Brown et al., 2020)和链式推理(Wei et al., 2020)。 ,2022)。 其他研究侧重于对法学硕士的扩展行为进行建模(Kaplan 等人,2020;Hoffmann 等人,2022)。 霍夫曼等人。 (2022)建议,为了训练计算最优模型,模型的大小和训练数据量应该以相同的速度增加。 这提供了在计算预算固定时如何最佳选择模型大小和分配训练数据量的指南。

        尽管这些工作显示出对大型模型的明显偏好,但使用较大数据集训练较小模型的潜力仍未得到充分探索。 Touvron 等人没有训练计算最优的语言模型。 (2023a) 强调了推理预算的重要性,而不是仅仅关注训练计算最优语言模型。 推理最优语言模型的目标是在特定推理约束内实现最佳性能,这是通过使用比缩放定律建议的标记更多的标记来训练模型来实现的(Hoffmann 等人,2022)。 图夫龙等人。 (2023a) 表明,较小的模型在使用更多数据进行训练时,可以匹配甚至超越较大的模型。 此外,Thaddée (2023) 指出,现有的缩放法则 (Hoffmann et al., 2022) 在较小模型训练时间较长的情况下可能无法准确预测。

        受这些新发现的推动,这项工作的重点是探索较小模型在使用比缩放定律建议的数量多得多的标记进行训练时的行为(Hoffmann 等人,2022)。 具体来说,我们使用大约 3 万亿个令牌训练具有 1.1B 个参数的 Transformer 仅解码器模型(Vaswani 等人,2017)。 据我们所知,这是第一次尝试使用如此大量的数据来训练具有 1B 参数的模型。 遵循与 Llama 2(Touvron 等人,2023b)相同的架构和分词器,我们将模型命名为 TinyLlama。 与现有类似规模的开源语言模型相比,TinyLlama 显示出具有竞争力的性能。 具体来说,TinyLlama 在各种下游任务中都超越了 OPT-1.3B (Zhang et al., 2022) 和 Pythia1.4B (Biderman et al., 2023)。

        我们的 TinyLlama 是开源的,旨在提高语言模型研究人员的可访问性。 我们相信其卓越的性能和紧凑的尺寸使其成为语言模型研究的研究人员和从业者的一个有吸引力的平台。

【Pretraining】

        本节介绍我们如何预训练 TinyLlama。 首先,我们介绍预训练语料库和数据采样方法的细节。 接下来,我们详细介绍模型架构和预训练期间使用的超参数。

2.1 Pre-training data

        我们的主要目标是使预训练过程有效且可重复。 我们采用自然语言数据和代码数据的混合来预训练 TinyLlama,从 SlimPajama (Soboleva et al., 2023) 获取自然语言数据,从 Starcoderdata (Li et al., 2023) 获取代码数据。 我们采用 Llama 的 tokenizer (Touvron et al., 2023a) 来处理数据。

        SlimPajama 这是一个基于 RedPajama(Together Computer,2023)为训练语言模型而创建的大型开源语料库。 最初的 RedPajama 语料库是一项开源研究成果,旨在重现 Llama 的预训练数据(Touvron 等人,2023a),其中包含超过 1.2 万亿个代币。 SlimPajama 是通过对原始RedPajama 进行清理和去重而衍生出来的。

        Starcoderdata 收集该数据集是为了训练 StarCoder(Li 等人,2023),这是一种强大的开源大型代码语言模型。 它包含 86 种编程语言的约 2500 亿个代币。 除了代码之外,它还包括 GitHub 问题和涉及自然语言的文本代码对。 为了避免数据重复,我们删除了 SlimPajama 的 GitHub 子集,仅从 Starcoderdata 中删除了示例代码数据。

        合并这两个语料库后,我们总共有大约 9500 亿个代币用于预训练。 根据 Muennighoff 等人的观察,TinyLlama 在这些令牌上接受了大约三个 epoch 的训练。 (2023),与使用唯一数据相比,对数据进行最多四个时期的重复训练会导致性能下降最小。 在训练过程中,我们对自然语言数据进行采样,以实现自然语言数据和代码数据之间大约 7:3 的比例。

2.2 Architecture

表1:模型架构细节 

我们采用与 Llama 2 类似的模型架构(Touvron 等人,2023b)。 我们使用基于 Vaswani 等人的 Transformer 架构。 (2017),详细信息如下:

位置嵌入我们使用 RoPE(旋转位置嵌入)(Su et al., 2021)将位置信息注入到我们的模型中。 RoPE 是最近被许多主流大型语言模型广泛采用的方法,例如 PaLM (Anil et al., 2023)、Llama (Touvron et al., 2023a) 和 Qwen (Bai et al., 2023)。 

RMSNorm 在预归一化中,为了获得更稳定的训练,我们在每个变压器子层之前对输入进行归一化。 此外,我们应用 RMSNorm(Zhang 和 Sennrich,2019)作为我们的标准化技术,可以提高训练效率。

SwiGLU 我们没有使用传统的 ReLU 非线性,而是遵循 Llama 2,将 Swish 和门控线性单元结合在一起,称为 SwiGLU (Shazeer, 2020),作为 TinyLlama 中的激活函数。

分组查询注意力 为了减少内存带宽开销并加快推理速度,我们在模型中使用分组查询注意力(Ainslie et al., 2023)。 我们有 32 个用于查询注意力的头,并使用 4 组键值头。 通过这种技术,模型可以在多个头之间共享键和值表示,而不会牺牲太多性能。

2.3 Speed Optimizations

完全分片数据并行 (FSDP) 在训练期间,我们的代码库集成了 FSDP1,以有效利用多 GPU 和多节点设置。 这种集成对于跨多个计算节点扩展训练过程至关重要,从而显着提高训练速度和效率。

Flash Attention 另一个关键改进是集成了 Flash Attention 2(Dao,2023),这是一种优化的注意力机制。 该存储库还提供融合层范数、融合交叉熵损失和融合旋转位置嵌入,它们在提高计算吞吐量方面发挥着关键作用。

xFormers 我们已将 xFormers(Lefaudeux 等人,2022)存储库中的融合 SwiGLU 模块替换为原始 SwiGLU 模块,进一步提高了我们代码库的效率。 借助这些功能,我们可以减少内存占用,使 1.1B 模型能够适应 40GB 的 GPU RAM。

性能分析以及与其他模型的比较 这些元素的结合使我们的训练吞吐量达到了每 A100-40G GPU 每秒 24,000 个令牌。 与 Pythia-1.0B(Biderman 等人,2023)和 MPT-1.3B 2 等其他模型相比,我们的代码库表现出了卓越的训练速度。 例如,TinyLlama-1.1B 模型对于 300B 代币仅需要 3,456 A100 GPU 小时,而 Pythia 为 4,830 小时,MPT 为 7,920 小时。 这显示了我们优化的有效性以及在大规模模型训练中节省大量时间和资源的潜力。

2.4 Training

我们基于 lit-gpt.3 构建框架。遵循 Llama 2(Touvron 等人,2023b),我们在预训练阶段采用自回归语言建模目标。 与 Llama 2 的设置一致,我们利用 AdamW 优化器(Loshchilov 和 Hutter,2019),将 β1 设置为 0.9,β2 为 0.95。 此外,我们使用余弦学习率计划,最大学习率为 4.0 × 10−4,最小学习率为 4.0 × 10−5。 我们使用 2,000 个预热步骤来促进优化学习。4 我们将批量大小设置为 2M 令牌。 我们将权重衰减指定为0.1,并使用梯度裁剪阈值1.0来调节梯度值。 我们在项目中使用 16 个 A100-40G GPU 预训练 TinyLlama。

图 1:我们的代码库与 Pythia 和 MPT 的训练速度比较。 

【Results】

        我们在广泛的常识推理和问题解决任务上评估 TinyLlama,并将其与具有相似模型参数的几种现有开源语言模型进行比较。 

        基线模型 我们主要关注具有纯解码器架构的语言模型,包含大约 10 亿个参数。 具体来说,我们将 TinyLlama 与 OPT-1.3B (Zhang et al., 2022)、Pythia-1.0B 和 Pythia-1.4B (Biderman et al., 2023) 进行比较。

        常识推理任务为了了解 TinyLlama 的常识推理能力,我们考虑以下任务:Hellaswag (Zellers et al., 2019)、OpenBookQA (Mihaylov et al., 2018)、WinoGrande (Sakaguchi et al., 2021)、ARC- Easy 和 ARC-Challenge(Clark 等人,2018)、BoolQ(Clark 等人,2019)和 PIQA(Bisk 等人,2020)。 我们采用语言模型评估框架(Gao et al., 2023)来评估模型。 按照之前的实践(Biderman 等人,2023),模型在这些任务的零样本设置中进行评估。 结果如表 2 所示。我们注意到,TinyLlama 在许多任务上都优于基线,并获得了最高的平均分数。

表 2:常识推理任务的零样本性能。 

训练期间性能的演变 我们在预训练期间跟踪了 TinyLlama 在常识推理基准上的准确性,如图 2 所示。一般来说, TinyLlama 随着计算资源的增加而改进,在大多数基准测试中超过了 Pythia-1.4B 的准确性。

 图 2:预训练期间常识推理基准的性能演变。 Pythia-1.4B的性能也包含在图中进行比较。

问题解决评估我们还使用 InstructEval 基准评估 TinyLlama 的问题解决能力(Chia 等人,2023)。 该基准包括以下任务:

• 大规模多任务语言理解(MMLU)(Hendrycks 等人,2021):该任务用于衡量模型跨各个学科的世界知识和解决问题的能力。 我们在 5 次拍摄设置中评估模型。

• BIG-Bench Hard (BBH)(Suzgun 等人,2023):这是 BIG-Bench 基准(Srivastava 等人,2022)中 23 项挑战性任务的子集,旨在衡量语言模型遵循复杂指令的能力 。 这些模型在 3 次设置中进行评估。

• 段落离散推理 (DROP)(Dua 等人,2019):此阅读理解任务衡量模型的数学推理能力。 我们在 3-shot 设置中评估模型。

• HumanEval(Zheng et al., 2023):该任务用于衡量模型的编程能力。 这些模型在零样本设置中进行评估。 

评估结果如表 3 所示。我们观察到,与现有模型相比,TinyLlama 表现出了更好的问题解决能力。

表 3:InstructEval 基准测试中问题解决任务的表现。 

【Conclusion】

        在本文中,我们介绍了 TinyLlama,一种开源的小型语言模型。 为了提高开源LLM预训练社区的透明度,我们发布了所有相关信息,包括我们的预训练代码、所有中间模型检查点以及数据处理步骤的详细信息。 凭借其紧凑的架构和良好的性能,TinyLlama 可以在移动设备上启用最终用户应用程序,并作为一个轻量级平台来测试与语言模型相关的各种创新想法。 我们将利用该项目开放、上线阶段积累的丰富经验,旨在开发TinyLlama的改进版本,为其配备多种功能,以增强其在各种任务中的性能和多功能性。 我们将在即将发布的报告中记录进一步的发现和详细结果。

【Acknowledgements】

们对开源社区在我们研究的开放、实时阶段给予的大力支持表示感谢。 特别感谢Qian Liu、Longxu Dou、Hai Leong Chieu 和Larry Law 对我们项目的帮助。 本研究/项目得到新加坡教育部学术研究基金 (AcRF) Tier 2 计划(MOE AcRF Tier 2 奖项编号:MOE-T2EP20122-0011)、新加坡教育部 Tier 3 的支持 计划(奖项编号:MOET320200004)、新加坡国家研究基金会和 DSO 国家实验室的 AI 新加坡计划(AISG 奖项编号:AISG2-RP-2020-016)、AI 新加坡博士奖学金(AISG 奖项编号:AISG2- Doctor-2021-08-007)、SUTD 启动项目 (SKI 2021_03_11) 以及拨款 RS-INSUR-00027-E0901-S00。 本材料中表达的任何意见、调查结果和结论或建议均为作者的观点,并不反映资助机构的观点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE项目使用.env配置多种环境以及如何加载环境

第一步,创建多个环境配置文件 Vue CLI 项目默认使用 .env 文件来定义环境变量。你可以通过创建不同的 .env 文件来为不同环境设置不同的环境变量,例如: .env —— 所有模式共用.env.local —— 所有模式共用,但不会被 git 提交&…

C语言 三目运算符

C语言 逻辑分支语句中 还有一种 三目运算符 我们编写代码如下 #include <stdio.h>int main() {const char* a 1 1 ? "表达式1" : "表达式2";printf("%s", a);return 0; }这里 我们根据逻辑 先定义一个a 然后 它的值 等于一个 三目运算…

【CodeGeeX】国产的免费AI编程助手

CodeGeeX&#xff08;官网&#xff1a;https://codegeex.cn/&#xff09;是一款基于大模型的全能的智能编程助手。它可以实现代码的生成与补全、自动添加注释、代码翻译以及智能问答等功能&#xff0c;能够帮助开发者显著提高工作效率。CodeGeeX支持主流的编程语言&#xff0c;…

C++练级之路——类和对象(下)

目录 1、构造函数初始化列表 2、类型转换 3、explicit关键字 4、static成员 5、友元 友元函数 友元类 6、内部类 7、匿名对象 8、拷贝构造时的一些编译器优化 差不多结束了&#xff0c;类和对象&#xff01; 1、构造函数初始化列表 初始化列表&#xff1a;以一个冒号…

python:元组,字符串,切片

一、元组# 列表可以修改内容&#xff0c;元组可以不被修改 # 在程序内封装数据&#xff0c;不希望数据被篡改&#xff0c;所以使用元组 # 语法&#xff1a; 不限制类型 # 定于元组的字面量&#xff1a; &#xff08;元素&#xff0c;元素&#xff0c;元素.....&#xff09; # 定…

萌新_1 环境安装(基于QQNT框架 Python Flask)

遇到问题加QQ群聊 群主在线解答 点击加入群聊【星辰开发】 一&#xff1a;安装QQ 目前为开发&#xff0c;推荐都安装到一台电脑上 直接安装到本地windows电脑&#xff0c; 优点方便开发 一键安装 Windows 用户一键安装方案 https://github.com/super1207/install_llob/rel…

LLMs——扩展数据受限的语言模型解决方案

概述 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;大型语言模型的发展一直是研究的热点。这些模型通过增加参数数量和训练数据量来提升性能&#xff0c;但这种增长趋势是否会有一个极限&#xff1f;实际上&#xff0c;研究者们已经注意到&#xff0c;为了有效地…

大话设计模式-依赖倒转原则

依赖倒转原则 在大话设计模式这本书中&#xff0c;作者通过电话修电脑这个例子引入了面向对象设计的基本原则之一&#xff1a;依赖倒转原则。 概念 依赖倒转原则是面向对象设计的基本原则之一&#xff0c;它用于减少类之间的耦合&#xff0c;提高系统的灵活性和可维护性。在…

QT C++ sqlite 对多个数据库的操作

//本文描述&#xff0c;QT 对多数据库的操作。 //你可能会想&#xff0c;多数据库的操作时&#xff0c;查询语句怎么知道是哪个数据库。 //QT提供了这样一种构造函数 QSqlQuery(const QSqlDatabase &db) //指定数据库 //在QT6.2.4 MSVC2019调试通过。 //效果见下图&am…

Docker(二)Docker+ server部署极简前端页面

本篇文章介绍如何使用 Dockerserver 将一个极简前端页面进行部署 1.本地运行一个简单的前端页面&#xff0c;再把它部署到服务器上 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

prompt问题【中间不好】

问题1:longchain 关键词在中间容易被忽略掉 Found in the Middle: How Language Models Use Long Contexts Better via Plug-and-Play Positional Encoding 论文对大模型在长文本情况下的性能做了一系列实验研究&#xff0c;发现了一个有趣的“Lost in the middle”现象&#x…

贴片 AMC1200BDWVR 封装 SOIC-8 隔离放大器IC芯片

AMC1200BDWVR的应用领域相当广泛&#xff0c;主要涵盖以下几个方面&#xff1a; 工业控制&#xff1a;在工业自动化系统中&#xff0c;AMC1200BDWVR可用于精确地检测和控制电流&#xff0c;例如在电机驱动和电力转换系统中。 电源管理&#xff1a;该器件适用于各种电源系统&a…

【昇腾产品应用】英码科技EA500I基于昇腾Mind SDK实现实时人体关键点检测

在教育、体育、安防、交通、医疗等领域中&#xff0c;实时人体关键点检测应用发挥着至关重要的作用&#xff0c;比如在体育训练时&#xff0c;实时人体关键点检测可以精确、实时地捕捉运动员的动作&#xff0c;从而进行动作分析和优化&#xff1b;在安防应用场景中&#xff0c;…

Vue3:响应式数据的基本使用(ref、reactive)

一、前言 在Vue3中&#xff0c;如果数据不是响应式数据&#xff0c;当数据的值发生改变时&#xff0c;页面上的数据是不会发生改变的。因此本文主要介绍Vue3中响应式数据的使用&#xff0c;包括ref和reactive的基本使用。 二、ref 1、ref —— 创建基本类型的响应式数据 re…

Python-VBA函数之旅-globals函数

目录 一、globals函数的常见应用场景&#xff1a; 二、globals函数与locals函数对比分析&#xff1a; 1、globals函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;https://blog.csdn.net/ygb_1024?spm101…

Python的round与Excel的round不一样?

Python四舍五入怎么做 round()奇进偶舍round函数既不是“四舍五入”的原则&#xff0c;也不是“四舍六入无成双”的原则。 decimal round() 偶然发现python的round函数和excel的round函数对某些数据的处理结果不一致。有看到博主提到是奇进偶舍的方法&#xff0c;但经过验证和…

49-PCIE转网口电路设计

视频链接 PCIE转网口电路设计01_哔哩哔哩_bilibili PCIe转网口电路设计 1、PCIE转网口电路设计基本介绍 pcie转网口的设计&#xff0c;一般有intel (i350)和网讯&#xff08;wx1860&#xff09;两种方案。 2、PCIE转网口的方案 2.1、I350 2.2、WX1860 (网迅) 国产化&#…

linux C -- 消息队列

linux C -- 消息队列 前言一、System V(IPC)消息队列接口调用主要涉及到 msgget、msgsnd、msgrcv 和 msgctl 四个接口&#xff1a; 1、创建消息队列 msgget2、发送消息到队列3、从队列接收信息4、控制消息队列 msgctl5、删除消息队列 二、代码编写1、发送部分的代码2、代码完成…

BYOL(NeurIPS 2020)原理解读

paper&#xff1a;Bootstrap your own latent: A new approach to self-supervised Learning third-party implementation&#xff1a;https://github.com/open-mmlab/mmpretrain/blob/main/mmpretrain/models/selfsup/byol.py 本文的创新点 本文提出了一种新的自监督学习方…

uniapp picker 多列选择器用法

uniapp picker 多列选择器联动筛选器交互处理方法&#xff0c; uniapp 多列选择器 mode"multiSelector" 数据及筛选联动交互处理&#xff0c; 通过接口获取数据&#xff0c;根据用户选择当前列选项设置子列数据&#xff0c;实现三级联动效果&#xff0c; 本示例中处…