LayerSkip:加速大模型推理的端到端解决方案

大模型(LLMs)在多种应用中表现出色,但其高昂的计算和内存需求导致部署成本昂贵,尤其是在GPU服务器上。现有加速方案在部署到普通GPU时往往会导致准确性显著下降,而将大模型(LLMs)进一步加速以部署到移动设备或边缘设备,仍然是自然语言处理领域的一个挑战。LayerSkip提出了一种创新的方法,通过在训练期间应用层dropout和提前退出损失,在推理时采用自我推测解码技术,有效地提高了早期层的退出准确率。这种方法不仅避免了在普通GPU上部署时的准确性损失,还为将LLMs部署到移动或边缘设备提供了可能性,实现了高达2.16倍的速度提升,同时保持了模型性能。

(a) 展示了一个来自 HumanEval 数据集的编程提示示例,以及 Llama1 7B 模型基于这个提示生成的文本。 (b) 展示了 Llama1 7B 模型中每个层级对生成 token 的预测过程,其中不同颜色表示模型在不同层级预测出特定 token 的时间点。在大模型(LLMs)中,并非总是需要所有的层来预测正确的 token。通过分析模型在不同层级的预测行为,研究者发现在较早的层级就可以做出准确的预测,而且模型在中间层级有时会犹豫不决或“改变主意”。这表明有机会通过在推理过程中提前退出(early exit)来提高效率,同时保持合理的准确性。

解决方案

LayerSkip的提出建立在dropout、层dropout、提前退出和推测解码等现有研究的基础上。通过结合这些技术,LayerSkip旨在提高LLMs的推理速度,同时保持或提高准确性。LayerSkip的解决方案包括三个阶段:使用层dropout和提前退出损失的训练、使用提前退出的推理,以及使用推测解码的验证和纠正。

LayerSkip 的三个组成部分:训练时使用层dropout和早期退出损失、推理时使用早期退出、使用自我推测解码进行验证和校正。说明了如何通过这些组件来提高模型的推理速度和准确性。
  •  使用层dropout和提前退出损失的训练

    训练阶段的一个关键创新是引入了层dropout和提前退出损失。这种结合的训练策略旨在提高模型在推理时早期层的退出准确性,从而使得模型能够更快地进行预测而不必总是利用所有层。

    层dropout是一种正则化技术,它随机地在训练过程中跳过网络中的某些层。LayerSkip在训练时不是均匀地应用dropout,而是采用一种分层的方法,即对于网络中较早的层采用较低的dropout率,而对于较晚的层采用较高的dropout率。这样的设计使得模型在训练时就逐渐习惯于在没有所有层的情况下进行预测,从而在推理时可以更早地退出。

    与层dropout相结合的是提前退出损失,这是一种在训练中增加的额外损失函数。在传统的语言模型训练中,通常只在模型的最后一层,也就是语言模型头,来计算预测的损失。然而,在LayerSkip中,每个transformer层的输出都会被传递到语言模型头,并且计算一个额外的损失。这样模型就被训练为在每个层都能够生成准确的预测,而不仅仅是依赖于最后一层。

    通过这种方式,模型学会了在不同层上进行有效的预测,并且能够在不需要完整网络参与的情况下生成高质量的输出。这种训练策略不仅提高了模型在推理时的效率,还保持了预测的准确性,因为它确保了模型的每个部分都能够独立地贡献于最终的预测结果。这种训练方法的结果是,模型能够在推理时更快地收敛到正确的预测,同时减少了计算资源的需求。

  • 使用提前退出的推理

    在LayerSkip框架下,推理阶段的优化是通过提前退出机制实现的。这种方法的核心思想是在自回归解码过程中,不必要地运行模型的所有层,而是在达到一定的层数后直接跳转到语言模型(LM)头进行预测。这样做的目的是为了减少每次生成token所需的计算量,从而加快推理速度。

    具体来说,在推理时,模型会执行前E层的transformer操作,这里的E是一个小于模型总层数L的值。通过这种方式,模型可以在经过较少层的处理后,就尝试生成输出。一旦到达第E层,模型不会继续向更深层传递信息,而是直接将E层的输出传递给LM头,以生成下一个token的预测。

    这种提前退出的策略允许模型在较早的阶段就生成token,而不是等待所有层都完成处理。这样的设计显著减少了每次token生成所需的计算步骤,因为深层的transformer层往往需要更多的计算资源。通过优化推理路径,LayerSkip能够在保持预测准确性的同时,显著提高模型的运行效率。

    提前退出的策略还意味着模型的不同层可以独立地对输出做出贡献。这不仅提高了模型的灵活性,还使得模型能够更好地适应不同的任务和数据特性。例如,在某些任务中,可能较早的层已经能够捕捉到足够的信息来生成准确的预测,而在其他任务中,可能需要更深层的信息来做出精确的判断。

  • 使用推测解码的验证和纠正

    LayerSkip中的自我推测解码算法是一种创新的机制,它旨在进一步提升模型的推理速度,同时确保生成的token保持高质量。这个算法的核心思想是分两个阶段进行token的生成和校验:首先,模型使用前E层生成初步的draft tokens;然后,利用模型剩余的L-E层对这些draft tokens进行验证和纠正。

    在自我推测解码的第一阶段,模型通过前E层的transformer生成draft tokens。这些tokens是模型对输入序列的初步预测,它们是通过前E层的信息积累和处理得到的。这个阶段的目的是快速生成一组候选的token,而不是等待整个模型的所有层都完成计算。

    算法进入第二阶段,即验证和纠正过程。在这个阶段,模型的剩余L-E层被用来对第一阶段生成的draft tokens进行细致的检查。这个过程相当于一个后置的审核机制,它能够利用模型更深层的知识来评估和改进初步预测的结果。如果发现draft tokens中有不准确或需要改进的地方,剩余的层将对其进行调整,以确保最终输出的token尽可能接近最优解。

    通过这种自我推测和后续纠正的机制,LayerSkip能够在减少计算量的同时,保持语言模型生成token的准确性。这种方法的优势在于,它允许模型在保持高效率的同时,还能够利用整个网络的深度来提升预测的质量。此外,由于验证和纠正过程是对draft tokens的集体评估,因此相比于逐个token的自回归生成,这种方法可以更高效地利用计算资源,进一步提高推理速度。

    自回归解码、推测性解码和自我推测解码之间的成本和效率,展示了自我推测解码如何通过重用草稿阶段的隐藏状态来减少内存和延迟。

实验

为了全面评估LayerSkip的性能,研究者设计了一系列实验,涵盖了不同规模的Llama模型,并采用了多样化的训练策略。实验包括了从零开始的预训练,这意味着研究者从随机初始化的模型参数开始,逐步训练模型以学习数据中的模式。实验还包括了持续预训练,即在已有预训练模型的基础上,继续用新数据进行训练以进一步提升模型性能。为了测试LayerSkip在特定领域的适用性,研究者还进行了特定数据领域的微调实验,这涉及到将预训练得到的模型在某一特定类型的数据上进行额外的训练,以期获得更好的领域适应性。研究者还对模型进行了特定任务的微调,这是为了让模型能够针对某一具体任务,如文本摘要或语义解析,达到最佳的性能。

研究者们首先在不同大小的Llama模型上进行了实验,包括7B和13B参数规模的模型,以验证LayerSkip在持续预训练和从头开始预训练情况下的有效性。实验任务涵盖了文本摘要、代码生成、阅读理解和常识推理等多个领域,使用了CNN/DM、XSUM、HumanEval、MBPP、BoolQ、PIQA、SIQA、HellaSwag、WinoGrande、ARC、RACE和MMLU等数据集。

结果显示,LayerSkip能够在保持模型最后层准确性的同时,显著提高早期层的退出准确率。例如,在Llama2 7B和Llama2 13B模型上进行的持续预训练实验中,LayerSkip配置(结合了层dropout和提前退出损失)在多个任务上都展现出了性能提升。具体来说,在Wikipedia测试集上,使用LayerSkip的模型困惑度从基线的4.32降低到4.3,表明模型生成文本的流畅性和准确性有所提高。在HumanEval编程任务上,执行正确率从基线的13.4%提高到了15.9%,显示了LayerSkip在特定任务上的有效性。

进一步的实验在从头开始的预训练设置中进行,研究者们发现,即使是在较小的数据集上,LayerSkip也能带来性能上的提升。例如,在Llama2 1.5B模型上,使用LayerSkip的模型在不同任务上的速度提升范围从1.34倍到2.16倍不等,这一结果证明了LayerSkip在加速模型推理方面的潜力。

在特定领域的微调和特定任务的微调实验中,LayerSkip同样展现出了其有效性。例如,在TOPv2语义解析任务上,经过LayerSkip训练的模型在保持准确性的同时,实现了高达2倍的速度提升。

研究者们还探讨了不同退出层对模型性能的影响。在Llama2 7B模型上,当在第16层退出时,模型在BoolQ任务上的准确率从基线的77.4%提高到了77.8%,这表明即使在模型的中间层退出,LayerSkip也能保持较高的性能。

实验结果表明LayerSkip是一个强大的工具,能够在不同规模的模型和多样化的任务中提高大型语言模型的推理速度和效率,同时保持或提升模型的性能。这些发现为未来在资源受限的环境中部署大型语言模型提供了新的思路和方法。

使用 LayerSkip 在持续预训练的 Llama2 7B 和 Llama2 13B 模型上的评估结果,包括不同层级的准确率和困惑度。

LayerSkip技术虽然在加速大型语言模型(LLMs)的推理方面取得了显著成果,但仍存在一些局限性。自我推测解码方案要求模型进行特定的微调或预训练,且需要对新引入的超参数进行细致调整,以避免影响模型最后层的准确性。这些要求可能会增加模型训练和调整的复杂性。尽管如此,LayerSkip的优势仍然明显。它通过结合层dropout、提前退出损失和自我推测解码,显著提升了模型的推理速度,同时保持了模型性能。这一成果不仅为大型语言模型的部署提供了新的解决方案,也为未来在资源受限的环境中应用LLMs开辟了新的可能性。

研究者们对LayerSkip的潜力持乐观态度,并期望它能够激发更广泛的研究和应用。通过进一步的研究和优化,LayerSkip有望克服现有局限,为自然语言处理领域带来更深远的影响。随着技术的进步和模型的迭代,LayerSkip有潜力成为推动大型语言模型在更广泛场景中高效部署的关键技术。未来,我们期待LayerSkip能够在更大规模的数据集上进行训练,支持更复杂的任务,并在各种应用中实现更高的性能和效率。这不仅将推动自然语言处理技术的发展,也将为人工智能领域带来新的突破。

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

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

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

相关文章

Java邮件客户端设计实现:使用JavaMail向QQ邮箱发邮件

目录 JavaMail 用JavaMail向qq邮箱发消息 ▐ 授权码的获取 JavaMail JavaMail 是一个用于发送和接收电子邮件的 Java API。它提供了一个平台无关和协议无关的框架,允许开发人员通过标准电子邮件协议(如 SMTP、POP3 和 IMAP)来创建、发送…

网络工程师---第四十六天

1、逻辑网络结构设计阶段中,要想实现核心层与汇聚层交换机全部互相连接,组网技术有哪些? 2、工作区子系统的通信布线规范有哪些? 3、综合布线中施工规范有哪些? 4、综合布线系统中核心机房通常包括哪些设备&#xff1f…

SpringBoot——整合拦截器(Interceptor)

目录 拦截器(Interceptor) 项目总结 新建一个SpringBoot项目​编辑 MyInterceptor自定义拦截器 InterceptorConfig配置类 InterceptorController控制器 SpringbootInterceptorApplication启动类 在开发SpringBoot项目时,开发人员经常需要…

SAP-FICO总账科目案例

1、资产科目 2、负债科目

计网期末复习指南(三):数据链路层(CRC冗余校验码计算、PPP协议、CSMA/CD协议、交换机的自学习能力、VLAN)

前言:本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点,从计算机网络体系结构出发到应用层,每一个协议层通过一篇文章进行总结,本系列正在持续更新中... 计网期末复习指南(一):计算…

iOS 通过PacketLogger 抓包蓝牙数据包

当使用iOS平台调试蓝牙外设时,需要抓取蓝牙数据包,那么如何获取iOS端设备与蓝牙设备之间通信的蓝牙数据包呢? 一、资料准备 1、苹果手机 2、Xcode开发工具 3、Apple开发者账户 二、环境搭建 2.1、手机环境搭建 手机浏览器访问地址&…

Meta的开源力作:Lexical框架,富文本的未来

引言 Lexical 是一个由 Facebook(现在称为 Meta)开源的可扩展 JavaScript Web 文本编辑器框架。 这个框架特别强调了三个核心特性:可靠性、可访问性以及高性能。 旨在为开发者创造最优的开发体验。 以下是 Lexical 框架的几个关键特点和能…

使用conda环境安装pythonocc-core

conda环境安装pythonocc库 基本环境 操作系统:Ubuntu 22.04 conda 23.11.0 安装pythonocc-core conda create --name pyocc python3.10 conda activate pyocc conda install -c conda-forge pythonocc-core7.8.1也可参考下面的官方地址 pythonocc-core 官方git地址 conda官…

苏宁电商数据揭秘:掌握苏宁API接口,一键解锁无限商机

苏宁API接口是一套开放的、基于HTTP协议的接口,它允许开发者通过编程方式访问苏宁平台上的商品、订单、用户等信息。这些接口支持多种数据格式,如JSON和XML,并提供了完善的错误处理和权限控制机制。 要使用苏宁API接口,首先需要在…

wireshark 二次开发

一、 Windows 准备 1、源代码下载 Git:https://github.com/wireshark/wireshark 2、 准备Visual C 要编译wireshark,开发电脑上应该安装了Visual Studio并包括了Visual C,请至少安装Visual Studio 2010以减少不必要的麻烦。 visual studio …

媳妇面试了一家公司,期望月薪20K,对方没多问就答应了,只要求3天内到岗,可我总觉得哪里不对劲。

“20k!明天就来上班吧!” 听到这句话,你会不会两眼放光,激动得差点跳起来? 朋友媳妇小丽,最近就经历了这样一场“梦幻面试”。然而,事情的发展却远没有想象中那么美好…… “这公司也太好了吧…

新闻发稿:14种新闻媒体推广中的成功案例-华媒舍

新闻媒体推广是企业宣传与推广的重要手段之一。通过合理选择和运用新闻媒体,企业可以有效地提升品牌知名度和影响力,吸引更多的目标受众。本文将介绍14种新闻媒体推广中的成功案例,通过这些案例的分享,希望能为企业在新闻媒体推广…

AWS EC2服务器开启root密码,SSH登录

1) EC2 Instance Connect连接,更改root密码 sudo passwd root 2)接着切换到切换到 root 身份,编辑 SSH 配置文件 $ sudo -i$ vi /etc/ssh/sshd_configPasswordAuthentication no,把 no 改成 yes #PermitRootLogin prohibit-passw…

论文降重技巧:AI工具如何助力论文原创性提升?

论文降重一直是困扰各界毕业生的“拦路虎”,还不容易熬过修改的苦,又要迎来降重的痛。 其实想要给论文降重达标,我有一些独家秘诀。话不多说直接上干货! 1、同义词改写(针对整段整句重复) 这是最靠谱也是…

动态规划1:1137. 第 N 个泰波那契数

动态规划解题步骤: 1.确定状态表示:dp[i]是什么 2.确定状态转移方程:dp[i]等于什么 3.初始化:确保状态转移方程不越界 4.确定填表顺序:根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接:1137…

Python管理PVE(Proxmox VE)云平台--节点资源统计2

一、前言 承接上文:Python管理PVE(Proxmox VE)云平台–节点资源统计 将cpu、内存、磁盘融入到一个脚本中,新增总资源占用计算模块,更直观的看出剩余未分配资源。 二、步骤 1.代码 # -*- coding: utf-8 -*- import o…

城市低空经济“链接力”指数报告(2024)

来源:城市进化论&火石创造 近期历史回顾:2024年NoETL开启自动化数据管理新时代白皮书.pdf 创新引领用户“换新生活”-从AWE2024看家电及消费电子行业发展趋势报告(精简版).pdf 2024智能网联汽车“车路云一体化”规模建设与应用…

3DMAX样条线轮廓修改器插件SplineOffset安装使用方法

3DMAX样条线轮廓修改器插件安装使用教程 3DMAX样条线轮廓插件SplineOffset是3dMax的一个修改器,它可以创建多个样条线克隆,并可以选择增量增加或减少偏移、平移和旋转。在许多方面,它类似于3dMax的内置阵列工具与样条线偏移功能相结合。 3DM…

Go 编程风格指南 - 最佳实践

Go 编程风格指南 - 最佳实践 原文:https://google.github.io/styleguide/go 概述 | 风格指南 | 风格决策 | 最佳实践 注意: 本文是 Google Go 风格 系列文档的一部分。本文档是 规范性(normative) 但不是强制规范(canonical),并且从属于Goo…

进入mysql报错:bash:/bin/mysql:没有那个文件或目录

问题分析: 有可能把/bin下面的mysql文件删除 解决方案: 卸载已安装MySQL,重新安装一遍 卸载步骤: 在CentOS系统中卸载MySQL可以通过以下步骤进行: 1、停止MySQL服务: sudo systemctl stop mysqld 2…