介绍 Tinyllama,一个开源的小型语言模型。 发布所有相关信息,包括预训练、所有中间模型检查点以及数据处理步骤的详细信息。 凭借其紧凑的架构和令人满意的性能,Tinyllama 支持移动设备上的最终用户应用程序,并作为测试与语言模型相关的各种创新想法的轻量级平台。 **借鉴从这个开放式实时阶段项目中获得的丰富经验,目的是开发 Tinyllama 的改进版本,使其具有各种能力,以提高其在各种任务中的性能和多功能性。 **进一步的调查结果和详细结果将记录在今后的报告中。
在大规模文本语料库上预先训练的大型语言模型 (LLM) 已在各种任务中证明了它们的有效性。 一些实验研究已经证明了 LLM 中的涌现能力,这些能力可能仅在具有足够大参数量的模型中才明显,例如少样本提示和逻辑链推理。 其他研究则侧重于对LLM的缩放行为进行建模。 Hoffmann 等人(2022 年)表明,为了训练计算最优模型,模型大小和训练数据量应以相同的速度增加。 这为选择模型大小和分配具有固定计算预算的训练数据量提供了指导。
尽管这些努力有利于大型模型,但在较大的数据集上训练较小模型的潜力仍未得到探索。 Touvron et al. (2023a) 强调了推理预算的重要性,而不是仅仅关注训练计算优化的语言模型。 针对特定推理约束的推理优化语言模型旨在实现最佳性能。 这是通过使用比缩放定律建议的更多令牌来训练模型来实现的。 Touvron 等人(2023a)证明,在更多数据上训练的较小模型可以匹配甚至优于较大的模型。 此外,Thaddée (2023) 认为,当较小的模型训练较长时间时,现有的缩放定律可能不准确。
受到这些新发现的启发,本文着眼于探索代币数量何时远远超过缩放定律 ()。scaling law) 在较小模型表现良好时建议。具体来说,使用大约 3 万亿个代币,一个用户拥有 11b参数Transformer解码器模型。 这是第一次尝试使用如此大量的数据来训练具有 1b 参数的模型。 遵循与 Llama 2 相同的架构和分词器,该模型被命名为 Tinylama。
以下是预训练 tinyllama 的方法。 首先,详细介绍了预训练的语料库和数据抽样方法。 接下来,详细阐述了预训练过程中使用的模型架构和超参数。
预训练数据
主要目标是使预训练过程高效且可重复。 自然语言数据和数据的混合用于预训练tinyllama,其中自然语言数据用于slimpajama,数据用于starcoderdata。 Llama Tokenizer 用于处理数据。
SlimPajama:一个用于训练语言模型的大型开源语料库,基于 RedPajama。 原始的 RedPajama 语料库是一项开源研究工作,旨在复制超过 1 个2 万亿个 LLAMA 预训练数据代币。 Slimpajama 是通过清洁和重复数据删除从 redpajama 衍生而来的。 StarCoderData:收集此数据集是为了训练 StarCoder,这是一个强大的开源大型语言模型。 它包含 86 种编程语言的约 2500 亿个代币。 除了 **,它还包括 github 问题和涉及自然语言的文本 - **对。 为了避免数据重复,删除了 SlimPajama 中的 GitHub 子集,并且仅从 StarCoderData 中采样了 ** 数据。 将这两个语料库组合在一起后,总共有近似值950 亿个代币用于预训练。Tinyllama 在这些标记物上接受了大约 3 次训练时代正如 Muennighoff 等人(2023 年)所观察到的那样,与使用唯一数据相比,在相同数据上训练多达 4 个 epoch 的性能几乎没有下降。 在训练过程中,对自然语言数据进行采样以实现:自然语言数据和 ** 数据之间的比例为 7:3
建筑
表 1:模型架构详细信息。
它采用了与 Llama 2 类似的模型架构。 所使用的 Transformer 架构的具体细节如下:
位置嵌入:使用绳索(旋转位置嵌入将位置信息注入模型。 ROPE是最近被许多主流大语言模型广泛采用的方法,如PALM、LLAMA、QWEN等。 rmsnorm:在预归一化中,输入在每个 Transformer 子层之前归一化,以实现更稳定的训练。 此外,RMSNORM作为归一化技术,可以提高训练效率。 Swiglu:它没有使用传统的 Relu 非线性,而是遵循 Llama 2,将 Swish 和门控线性单元(称为 Swiglu)组合在一起,作为 Tinyllama 中的激活函数。 分组查询注意力:为了减少内存带宽开销并加速推理,在模型中使用了分组查询注意力。 有 32 个查询注意头,并使用 4 个键值注意头组。 使用此技巧,模型可以在多个标头之间共享键和值表示形式,而不会损失太多性能。 速度优化
完全分段数据并行性 (FSDP):在训练期间,该库集成了 FSDP1,以有效利用多 GPU 和多节点设置。 这种集成对于跨多个计算节点扩展训练过程至关重要,从而显着提高了训练速度和效率。 Flash Attention:另一个关键改进是集成了 Flash Attention 2,这是一种优化的注意力机制。 该仓库还提供收敛层归一化、收敛交叉熵损失和收敛旋转位置嵌入,它们在提高计算吞吐量方面发挥着关键作用。 Xformers:将 Xformers 仓库中的融合 Swiglu 模块替换为原有的 Swiglu 模块,进一步提升了 ** 库的效率。 借助这些功能,可以减少内存占用,并使 11 亿参数模型适合 40GB GPU RAM。 性能分析及与其他机型的比较
这些元素的组合将每个 A100-40G GPU 的训练吞吐量提高到每秒 24,000 个令牌。 与其他模型(如 pythia-10 亿和 mpt-13 亿)相比,该库表现出卓越的训练速度。 例如,Tinyllama-11 亿参数模型只需 3,456 个 A100 GPU 小时即可获得 300 亿个标记,而 Pythia 需要 4,830 小时,MPT 需要 7,920 小时。 这显示了优化的有效性,以及在大规模模型训练中节省大量时间和资源的潜力。
图 1:库与 Pythia 和 MPT 的训练速度比较。
在 lit-gpt3 上构建框架。 在LLAMA 2之后,在预训练阶段采用了自动回归语言建模目标。 与 Llama 2 的设置一致,使用 ADAMW 优化器。 此外,使用余弦学习率计划。 使用 2,000 个步骤来促进优化学习。 将批处理大小设置为 2,000,000 个令牌。 将权重衰减设置为 01、使用10 梯度剪裁阈值来调整梯度值。 Tinyllama 在项目中接受了 16 个 A100-40G GPU 的预训练。
Tinyllama 的性能优于现有类似规模的开源语言模型。 具体来说,Tinyllama 在各种下游任务中的表现优于 OP-13B 和 Pythia 14B。 Tinyllama 是开源的,旨在提高语言模型研究人员的可访问性。
Tinyllama 在各种常识推理和解决问题的任务上进行了评估,并与几个具有相似模型参数的现有开源语言模型进行了比较。
基线模型
主要关注的是具有约 10 亿个参数的解码器架构的语言模型。 具体来说,将 Tinyllama 与 OPT-13B、Pythia-10 亿和 Pythia-14 亿进行比较。
常识推理任务
要了解 Tinylama 的常识推理能力,请考虑以下任务:Hellaswag、OpenBookQA、WinoGrande、Arc-Easy 和 Arc-Challenge、BoolQ 和 Piqa。 采用语言模型评估工具来评估这些模型。 按照以前的实践,这些模型以零样本方式在这些任务上进行了评估。 结果如表2所示。 值得注意的是,tinyllama 在许多任务上的表现优于基准模型,并取得了最高的平均分。
表 2:常识推理任务的零样本表现。
训练期间的表现演变
它在 Common Sense Inference 基准测试中的准确性是在 Tinyllama 的预训练过程中跟踪的,如图 2 所示。 总体而言,随着计算资源的增加,Tinyllama 的性能有所提高,在大多数基准测试中都优于 Pythia 的 -14 亿精度。
图 2:预训练期间常识推理基准性能的演变。 Pythia-1 也包含在图中4b的性能用于比较。
问题解决评估
Tinyllama 解决问题的能力也使用 Instructeval 基准进行了评估。 基准测试包括以下任务:
大规模多任务语言理解 (MMLU):此任务用于衡量模型对世界的了解和在各种主题上解决问题的能力。 我们在 5 个样本的设置中评估了这些模型。 BIG-Bench Hard (BBH):这是 BIG-Bench 基准测试(Srivast**a 等人,2022 年)中 23 个困难任务的子集,旨在衡量语言模型遵循复杂指令的能力。 这些模型在 3 个样本的设置中进行评估。 段落离散推理(下降):此阅读理解任务用于衡量模型的数学推理能力。 我们在 3 样本设置中评估了这些模型。 humaneval:此任务用于衡量模型的编程能力。 这些模型在零样本的基础上进行评估。 评估结果如表3所示。 据观察,与现有模型相比,Tinyllama 表现出更好的解决问题的能力。
表 3:Instructeval 基准测试中解决问题任务的性能。
*标题:Tinyllama:开源小型语言模型* 链接: