摘要
小型语言模型(SLM),尽管在现代智能设备中被广泛采用,但与其大型语言模型(LLM)相比,SLM受到的学术关注明显较少,后者主要部署在数据中心和云环境中。虽然研究人员继续改进LLM的能力以追求人工通用智能,但SLM研究旨在使机器智能更加易于获取、负担得起和高效地用于日常任务。我们重点关注基于变压器的、仅解码器的语言模型,具有100M至5B个参数,调查了59个最先进的开源SLM,分析了它们在三个方面的技术创新:架构、训练数据集和训练算法。此外,我们评估了它们在各个领域的能力,包括**常识推理、上下文学习、数学和编码。**为了进一步了解它们在设备上的运行时成本,我们对它们的推理延迟和内存占用进行了基准测试。通过对我们基准测试数据的深入分析,我们提供了有价值的见解以推进这一领域的研究。
关键词 小语言模型 · 边缘智能 · 设备上的LLM
目录
1简介
2SLM框架、数据集和训练
2.1SLMs概述
2.2模型架构
2.3训练数据集
2.4训练算法
3SLM能力
3.13.1 评估数据集和指标
3.2总体能力
3.3上下文学习能力
4SLM 运行成本
4.1概述
4.1.1推理延迟
4.1.2内存占用量
4.24.2量化和硬件的影响
4.2.1硬件的影响。
4.3延迟和内存分解
5结论和未来方向
参考文献
1 简介
语言模型的发展正在分化。一方面,在追求按照扩展律的人工通用智能的同时,越来越大的语言模型(LLM)在托管着数十万个GPU的数据中心中诞生[34, 71]。这条道路的最终目标是证明机器能够解决最具挑战性的语言任务,并极大地推动人类文明(例如科学)的进步。另一方面,小型语言模型(SLM)被提出用于资源高效部署,尤其是在桌面设备、智能手机甚至可穿戴设备上。对SLM的愿景是实现机器智能的民主化,使其对任何人、任何地方、任何时间都可获得和负担得起 - 就像每个人都拥有的人类大脑一样。
LLM和SLM在重塑我们的日常生活中都很重要,然而后者在学术界中受到的关注显著较少。关于SLM的能力[37,59,79]或者它们在设备上的运行成本[41,36,69]的文献非常有限,通常规模或深度有限。然而,在现实世界中,SLM已经大规模地集成到商用现成设备中[74]。例如,最新的谷歌/三星智能手机内置了LLM服务(Gemini Nano),使第三方移动应用可以通过提示和LoRA模块利用LLM的能力[1]。最近的iOS系统在iPhone和iPad上也包含了一个设备内基础模型,与操作系统深度集成以获得更好的性能和隐私保护[2]。
这项工作首次全面调研了自然语言模型(SLMs),深入讨论了它们的功能、运行时成本以及近年来的创新。本调查的范围仅限于具有1亿至50亿参数的仅解码器变压器架构的语言模型,涵盖了从低端物联网/可穿戴设备(如智能手表)到高端移动设备(如智能手机和平板电脑)的设备范围。总共,我们收集了57种流行的SLMs,并全面评估了它们的能力(常识推理、数学、上下文学习、长上下文检索等)以及设备上的运行时成本(预填和解码速度、内存占用、能源消耗等)。
通过这样深入的调查,我们获得了宝贵的见解,有助于回答关键问题,如:“SLM的发展路径是什么?”“哪些数据集或训练策略更可能产生高性能的SLM?”“不同的SLM架构(例如,深度、宽度、atten类型)和部署环境(量化算法、硬件类型等)如何影响运行时性能?”我们希望这项工作能揭示SLM的全面景观,并使研究社区受益,包括那些在算法、模型、系统和硬件层面工作的人。
总的来说,在这项工作中,我们做出如下贡献。
▪我们对近年发布的小语言模型进行了彻底审查,总结了它们的关键创新,并评估了它们的能力和设备成本。
▪通过这样深入的调查,我们可以从开源的SLM中获得宝贵的见解,这些见解可能有助于未来的SLM研究。我们还总结了几个SLM中的潜在研究课题。
▪我们将所有结果和基准工具公开,以推动和促进SLM研究。
2 SLM框架、数据集和训练
2.1 SLMs概述
图1:SLM总览。*表示这些模型并未开源,因此不会被基准测试。
如图1所示,自2023年底以来,SLM模型的数量显著激增,引起了研究和工业界的广泛关注。为了解它们的能力和成本,我们根据以下条件全面收集SLM模型:
(1)我们仅收集具有仅解码器的transformer架构(可以追溯到GPT-2)的模型,因为它们具有卓越的性能和在实际部署中的表现。目前,我们不包括诸如RWKV [57]和Mamba [29]等transformer变种。
(2)我们只收集具有公开权重的SLM模型,以便我们对其进行评估。
(3)本文中SLM模型的权重范围定义为100M至5B之间。
(4)调查主要关注从预训练过程中获取的基础知识,因此我们只收集SLM的基础模型,除了那些只提供指导版本的模型(例如Microsoft Phi和StabilityAI StableLM)。我们还排除了在其他预训练模型上进行微调的模型。
根据这些标准,我们选择了59种SLM,详细内容见表1。 我们的选择涵盖了来自工业和学术界的一系列模型,基于模型架构、参数大小和数据可用性等因素。 尽管所有选定的SLM都共享相似的架构,但它们在特定超参数和训练数据集方面有所不同,有些数据集仍为闭源。 这些变化导致了在不同任务上表现的差异,我们将在接下来的章节中讨论。
表1:受评SLM的详细配置。我们主要在实验中使用基础模型,异常情况包括仅提供指导版本的StableLM、Phi-3/3.5和Dolly-v2(标有*)。
2.2模型架构
在我们专注于仅解码器的Transformer SLM时,它们的具体配置仍然多样化,如图2(a)所示。Transformer的核心是多头自注意(MHA)机制和前馈神经网络(FFN)。
模型架构分析。我们对模型架构的以下几个组成部分进行了统计分析:1)自注意力的类型;2)前馈神经网络的类型;3)前馈网络的中间比例;4)前馈神经网络的激活函数;5)层归一化的类型;6)词汇量大小。图2(a)显示了SLM的架构,饼图显示了这六个部分的分布。图2(b)展示了这些分布随时间变化的情况。
1.自注意力的类型。自注意力机制是Transformer模型的核心。通常,SLMs主要使用三种类型的注意机制:多头注意力(MHA)、多查询注意力(MQA)、组查询注意力(GQA)和多头潜在注意力(MLA)。多头注意力是一种机制,它通过使用多个注意力头使模型能够同时专注于输入数据的不同部分,这是Transformer模型中最广泛使用的自注意力机制。多查询注意力通过使用单个共享查询简化多头注意力,跨所有头,但允许不同的键和值投影。这降低了空间和时间的复杂性。组查询注意力是多头注意力的一种变体,通过在多个头之间共享查询表示来降低计算复杂性,同时允许单独的键和值表示。其思想是使用较少的查询组,但仍保持注意力机制中的一定多样性。多头潜在注意力通过低秩键-值联合压缩实现比MHA更好的结果,并且需要更少的键-值(KV)缓存。图2(b)显示了从2022年到2024年这些时间段选择三种自注意力机制的变化情况。我们可以看到MHA逐渐被淘汰,并被GQA所取代。
2.前馈神经网络的类型。前馈网络可以总结为两种类型:标准前馈神经网络和门控前馈神经网络。标准前馈神经网络是一个具有激活函数的两层神经网络。门控前馈神经网络则添加了额外的门控层。图2(b)显示了从2022年到2024年这段时间内FFN类型变化的情况。它显示标准FFN逐渐被门控FFN取代。
3.前馈神经网络的中间比率。前馈神经网络的中间比率是指中间维度与隐藏维度的比率。图2(b)⃝3显示,标准前馈神经网络的中间比率通常设定为4,而门控前馈神经网络的中间比率则相当多样化,范围从2到8不等。
4.前馈神经网络的激活函数。前馈神经网络中使用的激活函数主要有4种:ReLU(修正线性单元),GELU(高斯误差线性单元),GELUtanh,SiLU(S形线性单元)。从图2(b)中观察到,2022年FFN的激活函数主要为ReLU,然后在2023年改为GELU及其变种。至于2024年发布的模型,则SiLU成为主导类型。
5.层归一化的类型。层归一化有两种主要类型:LayerNorm 和 RMSNorm。图2(b)⃝5显示了这些时间段从2022年到2024年层归一化类型的变化情况。层归一化正在逐渐被RMS归一化取代。
6.词汇量。词汇量是一个SLM可以识别的唯一标记的总数。 图2(b)⃝6 显示了从2022年到2024年这些时间段内词汇量的变化情况。我们可以看到模型的词汇量逐渐增加。最新模型的词汇量通常大于50k。
模型架构创新。尽管普通的Transformer架构因其具备的可扩展能力而被广泛认可,但在测试的SLM中仍存在一些模型架构层面的创新,即参数共享和逐层参数缩放。
1)参数共享。参数共享是在大型语言模型中使用的一种技术,可以在网络的不同层或组件之间重复使用相同的权重集。这种方法使模型能够显著减少参数数量,从而实现更高效的训练和推理,同时保持性能。
词嵌入-语言模型头共享_。_与最终的语言模型头层共享嵌入权重是最常见的权重共享技术。它是词嵌入层的共享,与旋转位置编码无关。像Gemma和Qwen这样的模型都使用了这种共享技术。
逐层注意力/前馈神经网络共享。在这种方法中,模型的多个层共用相同的权重集。这在SLM/LLM中很常见,其中所有的Transformer层共享相同的参数。例如,
(a)模型架构
(b)架构分布。
图2:SLM架构分析,突出6种配置:注意力类型,FFN类型,FFN比率,FFN激活,词汇量和归一化类型。(a)展示了SLM的整体结构,并对6种配置的使用频率进行了分类;(b)分析了随时间变化的六种配置的具体选择。
MobiLLaMA共享所有 Transformer 块的 FFN 的权重;MobileLLM 共享相邻两个 Transformer 块的 Attention 和 FFN 的权重。
2)逐层参数缩放。这种技术是由OpenELM提出并使用的。传统的SLMs在模型中的每个变换器层使用相同的配置,导致参数在各层之间均匀分配。与这些模型不同,OpenELM中每个变换器层具有不同的配置(例如,头数和前馈网络维度),导致模型中每个层的参数数量不同。这使得OpenELM能够更好地利用可用的参数预算来实现更高的准确度。
3)非线性补偿。PanGu-π分析了最先进的语言模型架构,并观察到特征崩溃问题。 PanGu-π采用了两种非线性补偿技术来解决语言模型的特征崩溃问题。 系列激活函数被调整为FFN,并且增强的快捷方式被整合到MHA中,这有效地将更多非线性引入到Transformer架构中。
洞见:我们在SLM架构中做出了两个关键观察。
截至2024年8月,典型的SLM架构倾向于使用组查询注意力、带有SiLU激活的门控FFN、FFN之间的中间比率在2到8之间、RMS归一化,以及词汇量大于50K。然而,这些设置的选择主要是经验性的,没有严格和公开验证这种模型容量的优越性。相反,架构创新对设备的运行时性能有相对较大的影响,将在第4部分展示。
**转换器架构的创新在当今的SLM中是有限的。**对于那些在架构上做出创新贡献的少数模型(除了嵌入式-语言模型头部共享之外),我们并没有观察到强有力的证据表明它们明显优于基本的变压器模型,它们也没有被广泛地采用或研究,也没有跨不同的研究小组或公司进行研究。这些创新的重要性仍有待探索和验证。
2.3 训练数据集
我们调查了开源的预训练数据集在训练SLMs中的使用情况。总体上,我们发现有12个这样的数据集被使用:
The Pile [26] (825B tokens):各领域中较小语料库的组合。
•FineWeb-Edu [55] (1.3T tokens): 从FineWeb筛选出的教育文本集合。
•StarCoder [40] (35B tokens): Python tokens. --> StarCoder [40] (35B 标记): Python 标记。
•Cosmopedia [12] (25B tokens):由Mixtral-8x7B-Instruct-v0.1生成的合成教科书、博客帖子、故事、文章和WikiHow文章数据集。
•RefinedWeb [56] (5T tokens):尽管进行了广泛的过滤,但仍然可以从CommonCrawl获得大量高质量数据。
•**红色睡衣 [21](1.2T标记):**包括来自84个CommonCrawl快照的1000亿文本文件,通过CCNet管道处理。
•杜尔玛 [60]: 一个英文语料库,使用MinHash算法在内部语料库和跨语料库中进行去重。
•WuDaoCorpora [75](4T令牌):一个超大规模的中文语料库,包含约3T的训练数据。
•1.08万亿汉字。
•RoBERTa [43] CCNewsV2:包含 CommonCrawl News 数据集的更新版本。
•PushShift()。io Reddit [11]:自2015年以来,这是一个社交媒体数据收集、分析和存档平台,收集Reddit数据并向研究人员提供。
•DCLM-baseline [39](1.35T令牌):从Common Crawl提取的标准化语料库,基于OpenLM框架的有效预训练配方,以及广泛的53个下游评估。
•CulturaX [52] (6.3T tokens): 一个包含167种语言的大型多语言数据集。
•预训练数据集的使用偏好。我们随后对从2022年到2024年用于训练SLM的数据集的使用频率进行了统计。结果如图3所示。它显示,The Pile是最广泛使用的预训练数据集,特别是在2022年和2023年; 然而最近,提出了更多这样的数据集,选择变得多样化。事实上,The Pile最近已经被放弃用于预训练SLM,例如这样的数据集。
图3:从2022年到2024年各开源预训练数据集的使用频率。
表2:根据模型参数数量分类,并按平均归一化准确率降序排列。Acc(Avg)是两种任务类型的准确率的平均值,常识推理/理解和问题解决。a表示这个数据集是由LLM生成的。b表示这个数据集已通过LLM进行了筛选。
随着"RefinedWeb"和"RedPajama"逐渐被广泛使用,这表明在构建质量更好的预训练数据集方面的研究和工程努力得到了积极的展示。
比较预训练数据集的质量。
我们还根据它们训练的SLM性能,研究了基于开源预训练数据集的质量。根据参数数量,我们将过去三年中的SLM分类为小于0.5B、1B、2B和3B的组,并根据四个组的平均准确率(两种类型任务的准确率的平均值,即常识推理/理解和问题解决,将在后面的部分中展示)对它们进行排序。
(a)训练令牌与参数之间的关系。(b) 训练令牌对准确性的影响
图4:训练标记数、模型参数数和模型准确度之间的关系。这里,“准确度”是在表2中所有基准上进行平均。(a) 训练标记数与模型参数大小之间的关系。根据缩放定律(Chinchilla),SLM经常会在部署阶段过度训练以获得更好的性能。 (b) 训练标记数对模型准确度的影响。
研究利用模型来探索如何选择数据集以提高平均准确率。结果如表2所示。我们注意到,最近发布的两个数据集,DCLM和FineWeb-Edu,在性能上表现优异。这两个数据集的一个共同特点是采用了基于模型的数据筛选。此外,编码数据通常包含在SLM预训练数据集中,例如StarCoder,即使编码能力并非设备上部署的SLM的重点。这可能归因于普遍的观念,即编码数据可以帮助提升模型的推理能力。
训练令牌数量与模型参数大小。语言模型中参数的数量和用于训练的数据量(令牌数量)密切相关,辛奇拉定律[32]表明,模型参数数量与训练令牌数量之间的最佳比例应该在20左右(例如,一个具有20B令牌的10亿模型)。我们对2022年至2024年间使用4B参数的语言模型使用的训练令牌数量进行了统计分析,如图4(a)所示。一般来说,模型越大,用于训练的令牌数量越多,而最近的模型往往拥有更多的训练令牌。值得注意的是,与辛奇拉定律建议的相比,语言模型训练时使用的令牌数量要大得多(通常超过1.5T),无论其参数大小如何。在某些情况下,较小的语言模型使用的训练数据甚至比较大的语言模型更多(例如,Qwen2-0.5B使用12T令牌,而Qwen2-1.5B使用7T令牌)。这表明这些语言模型显著地"过度训练"。采用这种方法的原因是在资源受限设备上部署功能强大的语言模型,通过使用更多的训练时浮点运算。
训练令牌数量与模型准确性的关系。图4(b)显示了训练令牌数量与模型准确性之间的关系。总体而言,在训练令牌数量小于700B时,这两个指标之间呈现出正相关。然而,由于数据质量往往比更多的训练令牌的影响更为重要,尤其在训练令牌超过1T时,相关性较弱。
洞察:我们在SLM训练数据集中得出两个关键观察。
▪数据质量对于SLM能力至关重要,在最近的SLM研究中受到越来越多的关注。 数据质量对于最终的SLM能力的重要性通常大于数据数量和模型架构配置。 数据集研究的一个显著趋势是使用基于模型的过滤,这导致出现了两个最先进的开源预训练数据集:FineWeb-Edu(1.3T/5.4T)[55]和DCLM-baseline(4T)[39]。 在这两个数据集上训练的SLM已经达到了与在封闭数据集上训练的模型具有竞争力的性能,这显著推动了SLM研究的可重现性。
▪最近的SLM模型是在大量标记中进行训练的(通常> 1.5T),忽略它们的参数大小。在某些情况下,更小的SLM模型是在更多的数据上进行训练的(例如,Qwen2-0.5B在12T标记上,但Qwen21.5B在7T标记上)。这也意味着这些SLM模型明显地“过度训练”,与Chinchilla定律[32]相比,该定律估计参数标记比约为20(例如,1B模型与20B标记)。这种“过度训练”的行为动机是通过投入更多的训练时间计算资源,将强大的SLM模型部署到资源受限设备上。
2.4 训练算法
有一些新颖的训练方法可以提高模型的能力。
最大化更新参数化(µP)控制初始化、逐层学习率和激活幅度,以确保在模型不同层宽度的情况下进行分析稳定的训练。除了改善训练稳定性外,µP还提高了从较小规模模型到更大规模模型的训练超参数的可传递性,这允许直接使用相同设置的一些优化器超参数,尤其是学习率。例如,Cerebras-GPT使用最大化更新参数化来训练模型。
知识蒸馏是大型语言模型(LLM)领域中的一个关键概念。它涉及从一个大型复杂的教师模型中提取有价值的知识,并将其转移到一个更小更高效的学生模型中。这种技术的核心是让学生模型学会逼近教师的行为和预测。这是通过最小化它们的输出之间的差异来实现的。据我们统计,LaMini-GPT和Gemma-2采用了知识蒸馏。
两阶段预训练策略是一种训练策略,包括在两个不同阶段训练模型。在预训练阶段,MiniCPM只使用大规模粗质量的预训练数据,这些数据丰富并可以在提供更多计算资源时支持连续训练。在退火阶段,我们使用多样化和高质量的知识和面向能力的SFT数据,混合到预训练数据中。MninCPM采用两阶段预训练策略。
3 SLM能力
3.1 评估数据集和指标
我们使用了三个领域的12个数据集来评估SLM性能。
常识推理数据集:
-HellaSwag [76]:通过合理的句子完成测试叙事理解。
-TruthfulQA [42]: 评估模型避免提供虚假信息的能力。
-Winogrande [58]: 使用常识推理评估代词模糊解析。
-CommonsenseQA [64]: 提供需要日常知识的多项选择问题。
-PIQA [15]: 关注物理常识推理和物体交互。
-OpenBookQA [51]: 结合科学知识和常识,用于开放书籍科学问题。
-BoolQ [18]: 通过是/否问题测试常识和事实推理。
问题解决数据集:
-ARC Easy [19]: 包含简单的科学问题,测试一般知识和推理能力。
-ARC挑战[19]:提出需要知识整合的复杂科学考题。- MMLU [31]:评估跨学科领域中的问题解决能力。
数学数据集:
-GSM8K [20]:评估小学水平的数学推理能力。
-Minerva Math [38]:评估各种主题上的高级数学推理。
我们使用准确率作为主要评估指标。准确率衡量了正确预测占总样本的比例。默认显示的准确率是由5次尝试决定的,因为在发布的模型中这是最常见的设置。对于常识推理、问题解决和数学任务,准确率评估模型选择正确选项或提供准确解决方案的能力。
3.2 总体能力
根据图5所示,我们对选定的SLMs进行了实验,涵盖了三个任务——常识推理、问题解决和数学——以分析它们的进展。结果显示,在2022年至2024年间,所有任务的表现都有显著的提升。具体而言,模型在这三个任务上的表现分别提高了10.4%、13.5%和13.5%。相比之下,最先进的开源LLaMA模型在同一时期仅平均提升了7.5%。值得注意的是,Phi系列模型是在封闭数据集上训练的。
常识推理/理解/解决问题。
图5:随着时间推移SLM能力的变化。圈的大小与模型大小成比例。红色虚线显示了不同时间点的最新模型,表明SLM在不断进步。LLaMA7B系列模型以水平蓝色虚线显示以进行比较。注意Phi和StableLM系列是有监督的模型,而其他是基础模型。
在常识推理方面表现优异,达到67.6%,在问题解决方面达到72.4%,水平可与拥有70亿参数的最新版本LLaMA 3.1相媲美。例如,在数学任务中,Phi-3-mini相比LLaMA 3.1取得了显著的14.5%的领先优势。这些结果表明,SLMs正在迅速缩小与LLMs在一般推理任务中的差距,尽管在数学方面仍存在一些差异。此外,虽然更大的参数数量通常与更好的性能相关,但也存在一些显著的例外,例如Qwen 2,尽管只有15亿个参数,却胜过了许多拥有30亿参数的SLMs。
尽管先驱性的SLMs是在闭源数据集上训练的,但在常识任务中,开源和闭源训练模型之间的差距正在缩小。例如,由于高质量数据集(如DCLM和FineWeb-Edu),SmolLM和DCLM-1B在常识推理方面表现出色(分别达到64.2%和63.8%)。然而,在需要复杂推理或逻辑的任务中,特别是在数学领域,差距仍然显著,这可能是由于缺乏高质量的逻辑数据集所致。
洞见:我们从SLMs的发展中得出了四个关键洞见:
▪从2022年到2024年,SLMs在各种语言任务中表现出显著的性能提升,超过了LLaMA-7B系列(1/2/3/3.1版本)的提升。这为SLMs在设备上解决各种下游任务提供了有前途的前景。
▪Phi家族在大多数任务中始终取得最先进的性能。特别是,截至2024年9月,Phi-3-mini达到了最高的准确性,与LLaMA 3.1 8B不相上下。
▪尽管其卓越性能的很大一部分可能归功于微软团队对数据的精心工程处理,但也有一部分可能归因于指导性调优和可能过度拟合特定数据集【77】。
▪尽管参数数量较大通常会带来更好的性能,但像Qwen 2 1.5B这样的特例表明,较小的模型仍然可以在特定任务中表现出色。
在开源数据集上训练的语言模型在常识任务上正在缩小与闭源数据集的差距。然而,在需要复杂推理或逻辑的任务中,差距仍然显著。这凸显了需要改进的数学推理数据集以解决这种差异。
3.3 上下文学习能力
我们使用各种模型及其各种2B参数变体(或最接近的可用模型)对包括常识推理和问题解决任务在内的8个任务进行上下文学习实验。一般来说,大型语言模型在所有任务上都显著受益于上下文学习。异常情况包括HellaSwag和PIQA数据集,其中所有模型的表现无论上下文学习次数如何都相似。这些数据集较为简单,并不像ARC Challenge等更复杂的数据集那样充分受益于上下文学习。总体而言,使用5次上下文学习的情况下,对于所有任务,零-shot大型语言模型的表现提高了2.1%。唯一值得注意的例外是LaMini,其表现下降了超过2%。我们推测这种模型可能对训练数据过拟合,并且额外的上下文学习次数会引入噪声。在各个模型中,Gemma 2显示出最显著的提升,准确率提高了4.8%。有趣的是,我们观察到随着模型大小的增加,大型语言模型的上下文学习能力得到了增强。
洞见:我们从SLMs的上下文学习能力中得出两个关键的洞见:
•一般来说,大多数语言模型都具有一定程度的上下文学习能力。然而,这种能力在不同任务中表现不同:几乎所有的语言模型在 arc 挑战任务中都受益匪浅于上下文学习,而某些任务则仅在所有模型中表现出上下文学习的微小益处,比如hellaswag 和 piqa
•大型模型往往比较小的模型具有更强的上下文学习能力。一些小型自然语言模型甚至在上下文学习中表现出性能下降。
4 SLM运行成本
设置 在本节中,我们首先对具有不同参数大小的模型使用的延迟和内存进行总体分析。接下来,我们检查量化方法和硬件对模型延迟的影响。最后,我们对延迟和内存使用进行细分,以确定在模型不同部分影响它们的关键因素。
我们在两种类型的边缘设备上评估了20种模型:Jetson Orin模块,通常用于边缘人工智能设备,如无人机和小型机器人,以及人们在日常生活中依赖的智能手机。详细规格如表3所示。Jetson上的所有实验都使用其GPU,而在智能手机上执行实验时则使用其CPU。为消除推理引擎实现的影响,我们使用被广泛认可的开源推理引擎llama.cpp进行所有实验。
我们主要记录模型参数、预加载和解码阶段的延迟以及运行时内存使用情况。由于每个模型官方报告参数计数的方式各不相同,我们依赖于从llama.cpp获取的参数值。推理分为两个阶段:预加载和解码。在预加载阶段,
跨任务的SLM上下文能力。
在上下文学习后,不同大小的SLM模型平均准确率提高。
图6:不同任务和模型的情境学习表现。图(b)中的红线突出显示了随着模型规模增加,平均分数改善趋势。
表3:实验设备。
输入提示被处理以生成一个 KV 缓存,其中提示中的多个标记可以并行计算。在预填充阶段,我们关注第一个标记的延迟,它表示处理提示中所有标记所需的时间。解码阶段,也称为自回归阶段,一次生成一个标记,并将其合并到 KV 缓存中。同时,此标记用于预测下一个标记。对于解码阶段,我们测量每个标记的延迟。我们将标准提示长度设置为50,并且标记生成长度为50,除非另有规定。测试以10秒间隔进行,以减轻潜在的热稳定性问题。为了测量更大的模型,在所有章节进行实验之前,我们对所有模型应用了4位量化,除§ 4.2.1外。因此,报告的延迟和内存使用是在4位量化后的模型。
4.1 概述
4.1.1 推理延迟
在图7中,针对从0.1B到3B大小的模型,测量了包括首个标记时间和每个标记的解码延迟在内的推理延迟,发现它们可以分为三个间隔:0.1-1B,1-2B和2-3B。每个间隔内的推理延迟相对相似,并与模型的延迟增加一致。
模型大小增长。对于来自不同架构但大小相似的模型来说,在预先填充阶段的第一个令牌时间存在明显差异。Qwen 2-0.5B的第一个令牌时间是Qwen1.5-0.5B的1.46倍,并且接近具有2.18倍模型大小的OpenELM1.1B。Qwen2采用了共享嵌入层和LM头的架构,可以将更多参数分配给注意力块,特别是分配给更加计算密集和耗时的注意力机制和FFN,这有助于降低计算负担。与SmolLM-1.7B、Qwen2-1.5B、Qwen1.5-1.8B和Qwen-1.8B相比,Pythia-1.4B的延迟更高,尽管这些模型比Pythia-1.4B更大。在更大的模型中也观察到类似现象:在2-3B范围内,Phi-2的延迟比更大的OpenELM-3B高出1.11倍。值得注意的是,预先填充阶段通常被认为是设备上端到端LLM推理中的主导阶段,因为设备上的LLM任务通常涉及对长上下文的理解,用于上下文感知或个性化需求。
然而,在解码阶段,模型的延迟与模型大小更密切地呈线性关系。Qwen2-0.5B 和Qwen1.5-0.5B 的延迟接近。与预填阶段不同,Pythia-1.4B 较大的模型具有较低的解码延迟。在2-3B 模型中, Gemma-2B、Phi-2 和 OpenELM-3B 显示出延迟与模型大小呈正相关的趋势。
4.1.2 内存占用量
图7中对Jetson上的llama.cpp内存占用进行评估。模型的大小范围从0.1B到3B参数,内存占用范围从275MB到2456MB不等。由于llama.cpp默认根据模型的最大上下文长度来分配KV缓存和计算缓冲区,支持更长上下文的模型最终会比其他模型消耗更多内存。在我们的实验中,我们将所有模型的最大上下文长度设置为2048以规范内存使用。在相同的上下文长度条件下,内存使用与模型大小成线性关系。然而,一些模型的内存使用与其大小不符,如Gemma-2B、Bloom-560M和Bloom-1B1。这些模型与其他模型相比具有更大的词汇量:Gemma-2B的词汇量为256,000,而Bloom系列的词汇量为250,880。OpenELM系列与具有类似参数大小的模型相比内存使用较低,原因有两点。首先,它使用了比大多数模型使用的50,000更小的32,000的词汇量。其次,它使用了GQA,而不是MHA,减少了KV缓存。我们将在§4.3.2中解释为什么词汇量对模型内存使用具有显著影响。
洞见:我们从SLM运行时成本的概述中得出了三个关键的见解。
▪除了模型大小之外,模型架构也会影响延迟。诸如层数、FFN 的宽度、词汇量的大小以及参数是否共享等因素起着重要作用。例如,Qwen1.5-0.5B 拥有比 Qwen2-0.5B 多25.4% 的参数,但在 Jetson Orin NX 16GB 上运行速度快31.9%。这种相关性可能取决于硬件。这表明 SLM 的开发应与将要部署的硬件保持一致。
▪模型架构对推理速度的影响在预填阶段比解码阶段更为显著。这是因为在预填阶段中计算密度更高,更容易出现计算受限的情况,而解码阶段主要受内存限制。模型架构的差异更容易影响计算受限的情况;例如,更宽更浅的模型具有更高的计算并行性。
▪运行时内存使用量通常与模型的参数数量成线性相关。一些模型与其他参数数量相似的模型相比具有更大的内存使用量,通常是由于其更大的词汇量。例如,Bloom系列的词汇量为250,880,比大多数模型的词汇量大5倍至8倍。
4.2 量化和硬件的影响
4.2.1量化的影响
量化对于减少服务器端GPU 推断延迟的好处可能源自三个因素:Tensor Cores 在 int8 操作中的更高计算吞吐量,减少的内存访问开销,以及由减少的内存访问产生的热量降低。在移动设备上,如 Jetson,对 int8 计算的支持尚不足,但仍然可以有效减少内存访问开销。这种减少来自于由于激活值和参数的较低精度而导致的数据压缩,从而改善缓存利用率。
我们利用了五种量化方法来测试 Phi-1.5 的延迟,如图8所示。Qn K(和 Qn K M)指的是使用 k-quants 方法将模型量化为 n 位,其中 M 表示参数数量中等,而 Qn 0 特指将模型对称量化为 n 位。在填充阶段,当提示长度相对较短时,量化可以将延迟降低至少 25%。然而,随着提示长度的增加,这种优势会减弱。当提示长度接近50时,Q6 K 和 Q3 K 量化方法导致的延迟几乎与未量化的 FP16 模型相同,甚至超过。另一方面,Q8 0、Q4 K M 和 Q5 K 方法提供稳定的性能改进。在这些方法中,Q4 K M 的表现最佳,将延迟平均降低了50%。在解码阶段进行量化可以提供更加一致的性能提升,将解码延迟降低了最多 75%,不低于 17%。和填充阶段一样,Q4 K M 方法被证明最有效,而 Q6 K 则效率最低。
(a)首个令牌时间 (b) 每个令牌的解码延迟
(a)预填充 (b) 解码
图9:不同硬件下的延迟。
洞见:关于不同提示长度和输出标记长度对延迟的影响,我们有两个关键洞见。
▪解码阶段进行量化的好处大于预填充阶段。在移动设备上,量化主要减少内存访问开销。由于解码阶段更受带宽限制,因此与计算密集的预填充阶段相比,它从量化中获益更多。
▪更加规整的量化精度可以带来更好的性能。尽管3位量化提供了更高的模型压缩率,但在填充和解码阶段,4位量化的表现更好。3位量化性能较差的原因在于其不规则的比特宽度,缺乏硬件优化支持,并需要额外的数据对齐和填充。因此,尽管压缩率较低,4位量化更为高效。同样,不规则的5位和6位量化导致推断延迟与8位量化相当,甚至更高,尽管提供了更高的压缩率。
4.2.1 硬件的影响
我们在两种类型的边缘设备上使用Bloom-1B1进行了测试:Jetson Orin NX 16GB,利用其GPU,以及魅族18 Pro,依赖于其CPU。在预填充阶段,对于单个令牌,Jetson的速度大约比魅族18 Pro快10到20倍。无论是Jetson还是魅族18 Pro,当提示长度增加时,第一个令牌的时间都呈线性增长,随着提示长度的增加,Jetson的优势变得更加明显。在解码阶段,随着生成的令牌数量增加,每个令牌的延迟也会增加。在魅族18 Pro上,从1个到10个令牌,延迟急剧上升,然后在10个令牌后稳定下来。从1个到10个令牌的初始延迟急剧上升是由于温度升高,触发了动态电压和频率缩放(DVFS)或热限制,以调整功耗和频率,从而降低计算效率。
(a)层粒度 (b) 运算粒度
图10:设备端推理延迟拆分。
相比之下,由于拥有更有效的冷却系统,Jetson在30个标记后才显示出明显的波动和延迟增加。
洞察:我们对于不同提示长度和输出令牌长度对延迟的硬件影响有两个关键见解。
▪GPU在预填充阶段比CPU表现得更优。预填充阶段涉及对提示内的令牌进行并行处理,而解码阶段则逐个生成每个令牌。因此,预填充阶段具有更高程度的并行性,使其更适合GPU,因为GPU拥有更多的并行计算单元。
▪Jetson相比智能手机表现更加稳定。由于其相对简单的硬件结构,有利于更好地散热,Jetson在长时间推理任务期间保持着更稳定的延迟。
4.3 延迟和内存分解
延迟分析。在图10中,我们对Qwen2-0.5B和Qwen1.5-0.5B进行了一个性能分析,这两个模型具有相似的大小但不同的延迟,并测量了在嵌入、注意力、前馈网络(FFN)和LM头部之间的时间分布。对于Qwen1.5和Qwen2,预先填充阶段主要以注意力和前馈网络层的高参与为特征。在Qwen1.5中,注意力层的比例略高于前馈网络层,而在Qwen2中,前馈网络层的贡献明显大于注意力层。这是因为相较于Qwen1.5,Qwen2具有更宽的前馈网络层。在解码阶段,Qwen1.5中注意力层的比例增加,这可能归因于KV(键-值)缓存长度的增加。至于Qwen2,它仍然具有前馈网络层的最长时间。
我们还对Qwen1.5-0.5B和Qwen2-0.5B进行了运算符分解分析。无论是在预填充阶段还是解码阶段,代表矩阵-向量乘法的运算符mul mat vec q占据了超过80%的时间。在Qwen2-0.5B中,mul mat vec q运算符的比例比Qwen1.5-0.5B更高,这也可能是由于其更宽的FFN层造成的。
内存分解 。在§ 4.1.2中,我们发现除了模型大小外,词汇量大小也对内存使用有显著影响。在图中,我们提供了模型内存使用的详细分析。运行时内存主要是
图11:内存分解。
模型参数、KV缓存和计算过程中的中间变量。由于需要在输出层中隐藏大小*词汇量大小的矩阵,具有较大词汇量的模型需要更大的计算缓冲区。Bloom系列有250880个词汇量。如图11a所示,Bloom-560M的计算缓冲区大小为492MB,比词汇量为32000的较大OpenELM-1.1B的大3.5倍。同样,Bloom-1B1的计算缓冲区大小为496MB,比词汇量为151936的较大Qwen2-1.5B的大1.6倍。使用GQA的模型KV缓存较使用Multi-Head Attention(MHA)的模型较小。例如,OpenELM-3B的KV缓存大小为164MB,比StableLM-zephyr-3B的小3.9倍。
当输入上下文长度较长时,计算缓冲区和KV缓存的大小成为模型内存使用的主要决定因素,正如我们在图11b中看到的那样。对于Qwen2系列模型,当上下文长度达到其上限131072时,计算缓冲区和KV缓存占据了总内存的83%至87%。对于具有最大上下文长度32768的Qwen1.5,计算缓冲区和KV缓存占据了总内存的85%至90%。
洞见:我们针对推理延迟和内存占用的分解得出了两个关键见解。
•Mul mat vec (矩阵与向量相乘)是SLM中最耗时的操作,占据了超过70%的端到端推断时间。
•上下文长度对模型运行时的内存使用是至关重要的。当上下文长度达到32,000时,KV缓存将占用超过80%的内存。
5 结论和未来方向
本文对小型语言模型(100M-5B参数)进行了全面调查和测量,包括它们的能力、设备上的运行成本和创新。然后我们总结了关键见解,以激发对小型语言模型未来研究的启发。具体来说,我们期待以下值得探索的方向。
共同设计和优化SLM架构和设备处理器。在给定参数大小的情况下,具体的SLM架构仍然对运行时速度产生巨大影响,如第4节所讨论的。这包括基本的Transformer配置(例如深度-宽度比、注意力类型、激活函数)以及它们如何有效地量化以在像NPUs [68]这样的整数优化处理器上执行。为了将SLMs的极限推向最佳准确性和速度的权衡点,我们主张通过与特定设备硬件的极端共同设计和优化SLM架构,可能在对其进行预训练之前搜索速度最优的架构。
构建高质量的合成数据集。最近的两个预训练数据集,DCLM和FineWeb-Edu,表现出优越的性能,并且极大地缩小了在开放/封闭数据集上训练的SLMs之间的差距。它们的关键创新在于使用经过精心训练的模型来从大型语料库中过滤出高质量的数据部分。我们相信我们仍处在这种合成数据研究的起步阶段,并且有待探索的空间仍然巨大。迫切需要标准化合成数据编辑的过程(去重、过滤、混合、评估等)。
部署感知的Chinchilla法则用于模型缩放(A deployment-aware Chinchilla law for model scaling_)_**。**如第2.3节所讨论的,存在一个明显的趋势,即相对于_Chinchilla_法则指示的数量级,超过所需的令牌数量来“过度训练”SLM。这是因为SLM将部署在资源受限设备上,其中设备内存和计算容量是主要的限制因素,而不是训练时的FLOPs。这种策略在一定程度上被证明是有效的。然而,训练数据规模不能无限扩展,如何确定SLM的最佳数据缩放方法仍然是一个悬而未决的问题。直观上,决策不仅取决于训练和推断成本,还取决于SLM部署的生命周期和估计加入更多训练数据可以带来的经济效益。如果考虑稀疏性(例如MoE),问题会变得更加复杂。
设备上持续学习用于个性化。部署在设备上的SLMs能够访问设备上的数据,以实现更好的性能或个性化,而无需担心数据泄漏。一般来说,有两种方法。一种是将个人数据注入提示中,使用检索增强生成技术。然而,这种方法会显著增加设备上的成本(文本嵌入生成,更长的提示处理时间),并且需要更长时间地在设备上存储数据以用于回顾性查询。第二种方法只是使用数据来微调SLM,因此知识被嵌入到权重中,数据在微调后可以丢弃。然而,这种方法也面临着重要挑战,尤其是在设备上进行SLM训练时存在巨大的资源需求(内存和能耗足迹),即使使用了参数高效微调技术。一个可能的方向是将零阶优化应用于SLM微调[70],以避免在内存中存储激活值,并且与推断时的硬件加速器(例如移动NPU)兼容。
设备-云SLM-LLM协作。虽然我们的测量数据表明SLM功能在快速发展,但它与云端LLM之间的差距仍将存在。为了实现全面的智能,同时又不损害隐私和可用性(太多),设备-云协作将成为一个重要的研究课题[17]。直观地说,SLM可以作为在设备上自信地解决简单任务的“过滤器”,而云端LLM则可被视为处理关键、困难任务的安全保护。这种方法在SLM的能力以及决定SLM可以自信解决哪些任务的决策模块方面受到限制。是否存在更好的协作方式?这样的研究受到因果语言模型的自回归方式的挑战。
在公平基准测试SLMs。首先,众所周知,SLMs存在对广泛使用的基准测试(如GSM8k)的系统性过拟合问题[77]。考虑到大多数SLMs(尤其是那些最先进的模型)是在封闭数据集上训练的,要公平地比较它们的能力变得具有挑战性。其次,SLMs被设计用于部署在设备上,目标任务可能与托管在云上的任务不同。目前在构建用于SLMs的综合能力和性能基准方面的努力有限。例如,当部署在智能手机上时,SLMs更可能处理对用户数据敏感的任务,例如基于历史聊天文本的自动回复或GUI上下文理解。这些“临时”任务不包括在常用的现有LLM基准测试中,因此它们的重要性常常被低估。
稀疏的SLM。在研究SLM时,我们发现关于稀疏SLM的研究非常少,无论是在架构层面(例如专家混合或MoE)还是在运行时层面(例如激活稀疏性)。原因可能有多种。首先,与LLM相比,SLM应具有较低的稀疏水平[61],因此利用稀疏性进行加速或节省内存的好处可能有限。其次,架构层面预设的稀疏方法,如MoE,通常被认为是以牺牲内存使用量为代价来降低计算强度[10, 35],这并不适合内存受限的设备。突破稀疏SLM的内存壁垒的一种方法是利用设备上的外部存储,例如智能手机上的闪存。通过将“冷权重”放置在存储上并按需检索,SLM可以扩展到更大的容量[7, 73, 72]。挑战在于通过仔细的流水线隐藏I/O延迟,并与异构硬件加速器保持兼容。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。