《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。 本材料中表达的任何意见、调查结果和结论或建议均为作者的观点,并不反映资助机构的观点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】#3 基本程序控制

文章目录 一、分支结构if语句(Python没有switch)tips:紧凑形式:适用于简单表达式的二分支结构 二、循环结构1. for语句range函数 2. while语句3. 循环保留字:break/continue与带else的循环语句 一、分支结构if语句(Pyt…

关于伴行天使车载监护器的技术路线

为了判断分析并反馈孩童是否昏睡状态,以预防因分心后排而导致的交通事故,本团队根据基于回归树对齐算法中获取的数据,建立了疲劳度评分机制。 本评分机制采用人脸关键点智能标注模型检测人脸,通过人脸识别68特征点检测、分别获取…

16.读取指定路径下的txt文档然后合并内容为一个txt文档。

1.题目要求 分别读取路径为 ./middle/phone/base/1_student_0.txt, ./middle/vr/base/1_teacher.txt, ./nearby/phone/base/1_student_0.txt, ./nearby/vr/base/1_teacher.txt, ./outside/phone/base/1_student_0.txt, ./outside/vr/base/1_teacher.txt 里面的文件&#xff…

【MATLAB源码-第43期】基于matlab的turbo码误码率仿真比较不同迭代次数,采用logmap/sova算法。

操作环境: MATLAB 2022a 1、算法描述 Turbo码是一种前向纠错码 (Forward Error Correction, FEC),在 1993 年由法国的两位研究员 Claude Berrou 和 Alain Glavieux 提出。这种编码技术以其接近 Shannon 极限的高性能而受到广泛关注。以下是关于 Turbo…

【word】文档标题如何自动编号

我在写一个word文档的时候,每一级标题的格式都设置好了,包括字体,大小等等,但是如何自动编号呢? 在写中期报告的时候,我对每一级标题的格式都创建了一个单独的样式,像这样: 对于每一…

Linux——信号量与基于环形队列的生产者消费者模型

目录 前言 一、信号量 二、信号量的接口 1.初始化 2.销毁 3.申请信号量 4. 释放信号量 三、基于环形队列的生产者消费者模型 1.环形队列的理解 2.生产者消费者的设计 3.单消费者单生产者环形队列的实现 4.多消费者多生产者环形队列的实现 前言 之前,…

AI的说服力如人类?Anthropic最新研究揭秘机器的辩论能力|TodayAI

人们常常对人工智能模型在对话中的说服力表现持怀疑态度。长久以来,社会上一直存在一个疑问:人工智能是否会达到人类那样,在对话中具有改变他人想法的能力? 直到最近,这一领域的实证研究相对有限,对于人工…

HTML5 新增语义标签及属性

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 ✍HTML5 新增语义标签及属性💎1 HTML5 新增的块级语义化标签&…

海外代理IP在跨境电商中发挥什么作用?

在我国跨境电商的发展中,海外代理IP的应用日益广泛,它不仅帮助商家成功打入国际市场,还为他们在多变的全球电商竞争中保持优势。下面是海外代理IP在跨境电商中五个关键的应用场景。 1、精准的市场分析 了解目标市场的消费者行为、产品趋势以…

pyinstaller工具打包python项目详细教程

使用 Pyinstaller工具 编译打包 Python 项目生成 exe 可执行文件 1.pyinstaller介绍: 介绍:PyInstaller 是一个将 Python 程序转换为独立可执行文件的工具。它能够在 Windows、Linux、Mac OS X、AIX 和 Solaris 等多种系统上运行。详细介绍可参考pyins…

记录--病理切片图像处理

简介 数字病理切片,也称为全幻灯片成像(Whole Slide Imaging,WSI)或数字切片扫描,是将传统的玻片病理切片通过高分辨率扫描仪转换为数字图像的技术。这种技术对病理学领域具有革命性的意义,因为它允许病理…

Git分布式版本控制系统——在IDEA中使用Git(二)

四、IDEA中本地仓库的操作 1.将文件加入暂存区 2.将暂存区的文件提交到版本库(相当于git commit) 3.查看日志 五、IDEA中远程仓库的操作 1.查看远程仓库 2.添加远程仓库 3.推送至远程仓库 4.从远程仓库拉取

pyqt实现星三角减压启动

这个对于plc上实现是非常容易得。它本来就是逻辑控制器,如果用代码实现它,该怎么做呢?这个实现起来看似简单,实则是有不少坑的(大神除外)。我一直想用类来封装,让它继承QObject,为啥非要继承QOb…

为什么MySQL数据库超过2000万条数据,查询依然很快:B+树和数据页结构解析

MYSQL数据库单表建议最大2000万条数据,很多人都说如果超过了2000万条数据,性能就会下降的特别厉害。但是你实际上存储后,发现即使超过了2000万但是查询依旧很快,这是为什么? Mysql为了查询速度,内部使用了…

私域流量变现干货:轻松盘活,高效增长!

你知道如何增长私域流量并将这些流量转化为实际收益,让我们的品牌价值最大化吗? 今天,就分享几点干货,帮助大家盘活私域流量,实现高效增长! 1、精准定位和用户画像 首先,了解您的私域流量源于…

JavaWeb开发03-Mybatis入门-基础操作-XML映射文件-动态SQL

一、Mybatis-入门 Java程序控制数据库 1.入门 定义实体类:一定要和表中的字段一一对应 配置连接数据库数据 建立Mapper层语句,来获取数据库数据以及将其封装到user的list中去。 2.配置SQL提示 为了进行查询数据库中有哪些表,所以得连接数据…

详解IP证书申请

申请IP证书,也被称为IP SSL证书,是一种特殊的SSL证书,它不同于传统的域名验证(DV)证书,是通过验证公网IP地址而不是域名来确保安全连接。这种证书用于保护IP地址,并在安装后起到加密作用。以下是…

VTK —— 一、Windows10下编译VTK源码,并用Vs2017代码测试(附编译流程、附编译好的库、vtk测试源码)

效果 编译 1、下载VTK8.2.0源码        2、解压源码后,进入目录创建build目录,同时在build内创建install目录 (下图install目录是在cmake第一次后才手动创建,建议在创建build时创建)        3、打开CMake,如下图填入…

CSS 这就是一个按照我看到的css ,边用边总结的笔记~

margin 和 paddingdisplay外部表现类(display-outside) : block , inline内部表现类(display-inside) : flex,gird,table,flow,flow-root,ruby margin 和 padding 可以设置1~4个属性 属性个数属性值1一起设置 上下左右2分别设置 上下 , 左右3分别设置 上 , 左右 , 下4分别设置…

戏作打油诗《无知》

笔者经营多年的《麻辣崇州论坛》,半月前突被攻击我在“霸屏”,没处讲理,特戏作打油诗《无知》一首,为那个无理取闹、砸我“麻辣崇州论坛”的无知小儿画像如下。 请点击链接,一目了然:崇州论坛-麻辣社区 没…