首页 > 其他分享 >移动设备上的大模型优化:MobileLLM

移动设备上的大模型优化:MobileLLM

时间:2024-09-17 20:51:47浏览次数:10  
标签:嵌入 模型 125M 参数 共享 优化 MobileLLM

人工智能咨询培训老师叶梓 转载标明出处

现有的大模型因为过于庞大难以直接部署在资源受限的移动设备上。针对这一问题,来自 Meta公司和 PyTorch 的研究团队提出了一种新的优化方法,旨在为移动设备设计高效的、参数少于十亿的高质量大模型,即MobileLLM。

图1 为小于10亿参数的大模型(LLMs)在零样本常识任务上的平均得分。图中每个气泡的面积与模型家族中变体的模型大小成正比。为了确保评估过程的一致性,使用开源的 Hugging Face 模型来评估先前方法的结果。任务的完整列表在表3中。

在小于10亿参数的模型中,MobileLLM在零样本常识任务上表现出色,相较于其他同规模的模型,它在准确度上有显著提升。这表明MobileLLM在模型架构和训练策略上的有效性,使其能够在有限的参数规模下实现更好的性能。

方法

研究团队通过以下方法来构建MobileLLM:

深层瘦架构:与普遍观点相反,对于小型LLMs,增加深度比增加宽度更有助于提高性能。

嵌入共享:重新审视嵌入共享方法,通过共享输入和输出嵌入层的权重,减少了模型的参数数量,同时保持了模型性能。

分组查询注意力:利用分组查询注意力机制,减少了键值头的数量,同时提高了模型的效率。

块状权重共享:提出了一种新的权重共享方法,通过在相邻块之间共享权重,减少了模型大小,同时降低了延迟。

研究者针对125M和350M两种模型规模进行了探索,并在这两种情况下都实现了一致的性能提升。

图3 呈现了十亿规模变换器模型的设计发展路线图。图中的前景色和背景色条形分别代表了125M和350M模型在零样本常识推理任务上的平均准确率。起始的125M模型是一个12层768维的结构,通过改善前馈网络设计、网络深度调整和权重共享策略得到了增强。

实验的配置使用了 32 个 A100 GPU,每个 GPU 的批量大小为 32。他们先进行了探索性实验,使用 0.25T tokens 进行了 120k 次迭代。然后在 1T tokens 上对表 3 和表 4 中报告的最佳模型进行了 480k 次迭代的训练。这些模型在零样本常识推理任务上进行了评估,包括多种任务和数据集,如 ARC-easy、ARC-challenge、BoolQ、PIQA、SIQA、HellaSwag、OBQA、WinoGrande,以及使用 TQA 和 RACE 数据集的问答和阅读理解任务。

研究者们首先调查了通常在前馈网络(FFNs)中使用的激活函数,并发现SwiGLU对小模型也是有益的。通过将普通的FFN(FC → ReLU → FC)改为SwiGLU,125M模型在零样本推理任务上的平均表现从42.6提高到了43.9。因此,后续实验中FFN采用了SwiGLU。

一种普遍的观点认为即变换器模型的性能主要由参数数量、训练数据集的大小和训练迭代次数决定。研究者的实验结果表明,对于小模型来说,增加深度比增加宽度更关键。他们训练了19个模型,包括9个约125M参数和10个约350M参数的模型,这些模型在大小上相似但在深度和宽度上有所不同。实验结果一致表明,更深更瘦的模型比更浅更宽的模型表现更好。图4(a)和(b)展示了在大多数零样本推理任务中更深网络的优越性能,包括ARC-easy、ARC-challenge、PIQA、HellaSwag、OBQA、WinoGrande。特别是在TQA和RACE数据集上,这种趋势更加明显,如图4(c)-(f)所示。

在十亿规模以下语言模型中,嵌入层占据了参数数量的相当一部分。例如,在嵌入维度为512、词汇表大小为32k的情况下,输入和输出嵌入层各有1600万个参数。这些嵌入层加起来占到了125M参数模型总参数的20%以上。与此相反,在更大的语言模型中,这一比例要低得多。例如,在LLaMA 7B模型中,输入和输出嵌入仅占总参数的3.7%,在LLaMA-70B模型中仅占0.7%。研究者重新考虑了输入输出嵌入共享的概念。通过共享嵌入,即重用输入嵌入权重作为输出全连接层的权重,构建了更有效和紧凑的模型架构。表1展示了使用不同嵌入共享策略对30层模型在零样本常识推理任务上性能的影响,包括不共享嵌入、共享嵌入以及共享嵌入加上增加深度(从30层增加到32层)的情况。通过这些实验,研究者们发现共享嵌入可以显著减少模型的参数数量,并且通过增加模型深度可以恢复或提高准确率。

研究者调查了小变换器模型的最优头大小。在头尺寸和多个头的非线性组合之间进行权衡是选择头大小的关键考虑因素。另外大多数先前的研究通常在十亿参数以下语言模型中使用相同数量的键值头和查询头。相反,研究者们发现分组查询注意力,不仅可以减少键值缓存大小,也可以有效地减少小语言模型中键值头的冗余。分组查询注意力可以看作是一种重量共享的形式,用于重量重用,其中键值头的数量是查询头数量的1/n,并且kv头在计算注意力分数和输出时与查询头一起重复n次。在这里,n ∈ Z+表示查询头数量可以整除的正整数。

对于如何通过简单地复制变换器块来实现准确性提升,而不需要进行架构修改或增加模型大小。研究者们进一步检查了三种不同的权重共享策略,并发现在内存受限的语言模型解码过程中,立即块状重复层共享策略在性能上优于其他策略,并且由于共享权重可以立即在缓存中计算两次,因此可以避免在SRAM和DRAM之间传输权重,从而提高了自动回归推理的总体执行速度。这些发现促使研究者们采用立即块状共享策略在模型设计中,并将采用层共享的模型命名为MobileLLM-LS。

实验

实验使用 Adam 优化器从头开始训练 MobileLLM,权重衰减设置为 0.1。实验在 32 个 A100 GPU 上进行,每个 GPU 的批量大小为 32。初始学习率设置为 2e-3,并采用余弦衰减策略。

对 0.25T tokens 进行了 120k 次迭代的快速探索性实验,并在 1T tokens 上对表 3 和表 4 中报告的最佳模型进行了 480k 次迭代的训练。

在零样本常识推理任务、问答和阅读理解任务上比较了 MobileLLM 模型与现有的十亿参数以下最先进模型的性能。使用开源 Hugging Face 模型评估基线方法,以确保评估过程的一致性。

表 2 展示了层共享策略对零样本常识推理任务的影响。例如,对于 125M 基线模型,使用即时块状共享策略可以将平均准确率从 44.6% 提高到 45.0%。

表 3 显示了 MobileLLM 在常识推理任务上的性能,与 Cerebras-GPT、OPT、BLOOM 等模型相比,MobileLLM 在 125M 模型尺寸下显著优于之前的模型,并且在 350M 模型尺寸下也超过了之前的最先进模型。

为了验证十亿参数以下模型在移动设备应用中的有效性,研究者们评估了它们在聊天和 API 调用这两个关键移动设备任务上的性能。证明了即使在参数数量有限的情况下,通过精心设计的模型架构和训练策略,MobileLLM 也能够实现与大型模型相媲美的性能。

研究者对 MobileLLM 模型以及先前的最先进模型进行了微调,并在 AlpacaEval 和 MT-Bench 这两个聊天基准上进行了评估。MobileLLM 模型显著优于之前的十亿参数以下模型,甚至超过了一些具有 10 亿参数的模型。

MobileLLM模型和之前最先进模型在AlpacaEval和MT-Bench聊天基准测试上的结果

API 调用是移动设备上的常见应用,尤其是在与语音转文字模型配合使用时。研究者们创建了一个包含 5000 个训练样本和 2500 个测试样本的合成数据集,并对模型进行了微调。

表 6 显示 MobileLLM-350M 在 API 调用的意图和结构精确匹配得分上与 LLaMA-v2 7B 相当,表明较小的模型如 MobileLLM-350M 也能很好地处理常见的移动设备应用场景。

研究者对 125M 和 350M 模型尺寸的 MobileLLM 和 MobileLLM-LS 进行了量化实验,发现使用 W8A8 后训练量化 (PTQ) 仅导致不到 0.5 个百分点的准确率降低,并且与层共享兼容。

研究者使用 LLaMA-v2 7B 作为教师模型对 125M 和 350M 模型进行知识蒸馏。尽管知识蒸馏可以提高训练时间,但其准确性与基于标签的训练相当或更低。

研究者在 iPhone 13 上使用 ExecuTorch 对 MobileLLM-125M 和 MobileLLM-LS-125M FP16 模型进行了延迟测量。

表 7 显示,通过权重共享和翻倍的层数,MobileLLM-LS 在加载和初始化时间上仅比 MobileLLM 增加了 2.2%,在执行时间上增加了 2.6%,这得益于数据局部性。

这些实验结果表明,MobileLLM 模型在资源受限的移动设备上具有良好的应用潜力,并且通过各种优化技术,实现了与更大模型相当的性能。

论文链接:https://arxiv.org/abs/2402.14905

标签:嵌入,模型,125M,参数,共享,优化,MobileLLM
From: https://blog.csdn.net/yetzi1975/article/details/142251542

相关文章

  • 想转行AI大模型开发工程师?这本书是你的必读指南!!!《AI大模型开发之路》
     当前最热门的技术无疑是AI大模型。虽然它的应用前景广阔,但真正精通大模型技术的人还不多。然而,市场对大模型的需求却在不断增长,吸引了不少开发者想要转行进入这个领域。然而,面对新技术,许多人心中充满疑虑,担心自己无法掌握。笔者也是充满疑虑,然后直到我看到这本书籍,感觉受益匪......
  • 代码随想录算法训练营第六十天 | Bellman_ford 队列优化算法
    目录Bellman_ford队列优化算法思路模拟过程方法一:Bellman_ford队列优化Bellman_ford队列优化算法题目链接:卡码网:94.城市间货物运输I文章讲解:代码随想录 某国为促进城市间经济交流,决定对货物运输提供补贴。共有n个编号为1到n的城市,通过道路网络连接,......
  • 算法与数据结构——哈希优化策略与算法选择
    哈希优化策略在算法题中,我们通常通过线性查找替换为哈希查找来降低算法的时间复杂度。我们借助一个算法题来加深理解。Question给定一个整数数组nums和一个目标元素target,请在数组中搜索“和”为target的两个元素,并返回他们的数组索引。返回任意一个即可。线性查找:以时间换......
  • 优化 OR 条件过多导致的查询超时
    优化OR条件过多导致的查询超时文章目录优化OR条件过多导致的查询超时背景问题分析方案分析方案一:入参去重方案二:分页或者分批查询方案三:UNION代替OR方案四:IN代替OR1.分别对列进行`IN`查询,在代码中进行数据筛选。2.对多列进行`IN`查询。小结方案五:JOIN查......
  • 深入剖析:C++类对象的内存布局与优化
    深入剖析:C++类对象的内存布局与优化引言在C++编程中,理解类对象的内存布局对于优化内存使用和提高程序性能至关重要。本文将详细介绍C++类对象的内存布局,包括数据成员、虚函数表指针以及静态变量和静态方法在内存中的位置。通过这些知识,我们可以更好地设计和优化我们的类结......
  • Java 性能调优:优化 GC 线程设置
    垃圾回收器使用一组称为GC线程的线程来执行回收工作。有时JVM可能会分配过多或过少的GC线程。本文将讨论JVM为什么会出现这种情况、其影响以及可能的解决方案。1咋查找应用程序的GC线程数量进行线程转储分析来确定应用程序的GC线程数量:从生产服务器捕获threaddump使......
  • 51c大模型~合集55
    #新型忆阻器昂贵LLM的救星?Nature新研究提出新型忆阻器,比HaswellCPU高效460倍前些天,OpenAI发布了ο1系列模型,它那「超越博士水平的」强大推理性能预示着其必将在人们的生产生活中大有作为。但它的使用成本也很高,以至于OpenAI不得不限制每位用户的使用量:每位用户每周仅能给o1-......
  • 【Arthas】记录一次使用Arthas优化接口速度的经历
    1.概述本日有个接口耗时1.2分钟,这个接口本身就是很慢的,但是想看看有没有能优化的地方。这个接口的能力就是获取kafka几个消费组的详情,并且判断是否延迟。这里我们主要使用Arthas的trace命令,使用的命令格式是traceservice实现类方法名称下面是排查过程[arthas@......
  • 【Python机器学习】序列到序列建模——对序列到序列模型的增强
    有两种增强训练序列到序列模型的方法,可以提高模型的精确率和可扩展性。使用装桶法降低训练复杂度输入序列可以有不同的长度,这使短序列的训练数据添加了大量填充词条。过多的填充会使计算成本高昂,特别是当大多数序列都很短,只有少数序列接近最大词条长度时。假设用数据训练序列......
  • 最优化理论与自动驾驶(十):纯跟踪算法原理、公式及代码演示
    纯跟踪算法(PurePursuitAlgorithm)是一种用于路径跟踪的几何控制算法,广泛应用于自动驾驶、机器人导航等领域。其基本思想是通过选择预定路径上的目标点(预瞄点),并控制转向角,使车辆不断逼近并跟随该目标点,从而达到路径跟踪的效果。1.纯跟踪算法的基本原理在纯跟踪算法中,控制车......