大语言模型的深度裁剪法

在人工智能领域,大语言模型(LLMs)已经成为推动语言理解和生成任务进步的重要力量。随着模型规模的不断扩大,如何优化这些模型的计算效率成为了一个迫切需要解决的问题。大型语言模型通常包含数十亿甚至数千亿的参数,这使得它们在部署和运行时需要巨大的计算资源。为了使这些模型更加易于访问并且在实际应用中更加高效,研究者们积极探索各种优化策略。

在众多优化策略中,结构化剪枝(structured pruning)方法被证明是一种有效的减少大型语言模型计算需求的手段。结构化剪枝通过移除模型中不必要的权重组,既可以减少模型的大小,又能够在不依赖特定硬件的情况下加速模型的运行。具体来说,宽度剪枝(width pruning)通过减少投影权重矩阵的大小(例如,移除注意力头)来缩小模型规模,同时保持层数不变。与之相对的深度剪枝(depth pruning)则是移除整个层或模块,但保持剩余权重的大小不变。

尽管当前的研究主要集中在宽度剪枝或宽度和深度剪枝的混合方法上,但对于这两种剪枝单元(宽度与深度)对于大型语言模型推理效率的影响,尚缺乏详细的比较分析。在本文中,我们将展示一个简单的深度剪枝方法如何在零样本任务性能上与最新的宽度剪枝方法相竞争。我们的剪枝方法特别适用于在内存受限的条件下运行大型语言模型,这些条件要求使用有限的批量大小,而在这种情况下宽度剪枝方法往往无效。研究者希望这项工作能够将大语言模型部署到本地和边缘设备上。

论文标题:Shortened LLaMA: A Simple Depth Pruning for Large Language Models

公众号「夕小瑶科技说」后台回复“Shortened ”获取论文pdf。
 

深度剪枝与宽度剪枝:概念与对比

1. 宽度剪枝的定义与实践

宽度剪枝是一种减少大型语言模型(LLMs)计算需求的结构化剪枝方法。它通过减少投影权重矩阵的大小(例如,移除注意力头)来缩小网络宽度,同时保持层数不变。在实践中,如LLM-Pruner和FLAP所展示的,宽度剪枝通过剪除耦合结构(例如,注意力头及其相关的权重连接)来缩小网络宽度。然而,这种方法在受限批处理大小的条件下,对于提高LLMs的自回归生成速度并不有效。

2. 深度剪枝的概念及其在LLM中的应用

与宽度剪枝相对,深度剪枝移除整个层或块,同时保持剩余权重的大小不变。深度剪枝通常被认为与宽度剪枝相比,在性能上不那么有效,因为它涉及到更大和更粗糙的单元的消除。该研究展示了一个简单的深度剪枝方法,结合LoRA重训练阶段,可以与最近的宽度剪枝方法相媲美,特别是在硬件限制下需要运行小批量LLMs的情况下,深度剪枝显著提高了推理速度。

图片

简化的深度剪枝方法:有效的加速策略

1. 选择剪枝单元:Transformer块的重要性评估

在选择剪枝单元时,该研究选择Transformer块作为可剪枝单元,以优先减少推理延迟。通过使用简单的度量标准(如Taylor+和PPL)来识别不重要的块,然后进行一次性剪枝和轻量级重训练。例如,PPL度量标准通过监控每个块的移除对PPL的影响来反映模型的行为,而不需要计算反向传播梯度。

2. 一步剪枝与轻量级重训练

在对块级重要性评分进行排序后,研究者一次性剪除不太重要的块。由于每个块的配置相同,可以轻松决定应该移除多少块以达到目标模型大小。

3. LoRA重训练阶段的实现与效率

该研究使用低秩适应(LoRA)方法有效地对剪枝模型进行重训练。LoRA重训练可以在单个GPU上仅用几小时完成。例如,对7B参数模型剪枝20%大约需要2小时和22GB VRAM,而对13B参数模型剪枝21%大约需要3小时和35GB VRAM。这表明LoRA重训练阶段在实现上效率高,且对资源的要求相对较低。

图片

实验设置与基线比较

1. 模型选择与基线方法介绍

在本研究中,我们关注的是大型语言模型(LLMs)的结构化剪枝,这是一种减少计算需求的方法。研究比较了宽度剪枝和深度剪枝对于LLMs推理效率的影响。宽度剪枝通过减少投影权重矩阵的大小(例如,移除注意力头)来缩小网络宽度,而保持层数不变。相比之下,深度剪枝则是移除整个层或块,同时保持剩余权重的大小不变。

实验使用了LLaMA-7B和Vicuna-{7B, 13B}-v1.3这两个著名的开源LLMs作为测试床。基线方法包括LLM-Pruner、FLAP和Wanda-sp,这些方法通过剪枝来缩小网络宽度。通过移除Transformer块来减少网络深度。使用LLM-Pruner的模块级剪枝比例(25%,35%,45%)作为参考,并相应地调整研究方法和其他基线方法,以便在参数数量上进行比较。

2. 数据集、评估标准与实验环境

在剪枝阶段,研究者使用了包含10个样本的小型校准集(来自BookCorpus,序列长度为128)来评估Transformer块的重要性。还使用了这个校准数据集来确保与基线方法的公平比较。在LoRA重训练阶段,凭借精炼的Alpaca数据集中的50K样本。

评估方面,通过lm-evaluation-harness包来测量七个常识推理数据集的零样本准确性,并报告了WikiText2和PTB上的零样本困惑度(PPL)。在推理阶段,保持默认配置,不使用xFormers优化的注意力或其他高级选项。

实验使用了Hugging Face的Transformers库,并在NVIDIA A100 GPU上进行。所有涉及7B参数模型的实验可以在单个NVIDIA RTX 3090上进行。

实验结果与分析

1. 剪枝后模型的零样本任务性能

深度剪枝方法与最近的宽度剪枝研究相比,在零样本任务性能方面具有竞争力。例如,LLaMA-7B模型在剪枝后在七个常识推理任务上的平均准确性表现与未剪枝的模型相当。此外,该研究方法在WikiText2和PTB数据集上的零样本PPL表现也与基线方法相当。

2. 剪枝对推理速度的影响

深度剪枝显著提高了推理速度,尤其是在硬件限制下需要使用有限批量大小运行LLMs的情况下。例如,在NVIDIA H100 GPU上,深度剪枝方法在不同输入和输出序列长度的情况下,都实现了更好的延迟-吞吐量权衡。与此相反,FLAP和LLM-Pruner的宽度剪枝方法由于GPU不友好的权重尺寸而降低了效率。

3. 不同剪枝粒度的效果对比

该研究还比较了不同剪枝粒度的效果。移除整个Transformer块而不是单独的MHA和FFN模块通常会带来更好的结果。例如,在LLaMA-7B模型上,块级剪枝与模块级剪枝相比,在保持性能的同时减少了更多的计算成本和内存占用。

深度剪枝的相关分析与讨论

1. 剪枝准则的比较:Taylor+与PPL方法

在深度剪枝的实践中,选择合适的剪枝准则至关重要,因为它直接影响到模型的性能和效率。在本研究中,我们比较了两种剪枝准则:Taylor+和PPL(Perplexity)。

Taylor+方法侧重于评估权重参数移除对训练损失的影响,通过计算输出神经元级别的权重重要性分数,并将这些分数相加以评估块级别的重要性。这种方法在常识推理任务的准确性方面表现出色,但它需要计算反向传播梯度,这可能会增加计算成本。

另一方面,PPL方法通过物理地移除每个块并监控其对PPL的影响来评估块的重要性。PPL反映了模型的行为,因为它是从下一个令牌预测损失中得出的,只需要前向传递,避免了计算反向传播梯度和Hessian逆的需要。PPL方法在生成性能方面表现更好,而且不依赖于启发式选择剪枝候选。

图片

2. 一步剪枝与迭代剪枝的性能差异

在深度剪枝的过程中,可以选择一步剪枝或迭代剪枝。一步剪枝是在单个步骤中剪掉不太重要的块,而迭代剪枝则是重复进行单块移除和随后的重训练。

研究表明,一步剪枝在重训练阶段能够有效地弥补与迭代剪枝之间的性能差距。尽管一步剪枝可能会在初期导致性能损失,但通过LoRA(Low-Rank Adaptation)方法的有效重训练,我们能够恢复深度剪枝模型的性能。这表明,尽管一步剪枝的方法更为简单和快速,但它仍然能够达到与迭代剪枝相似的性能水平。

从知识蒸馏到系统级推理加速

在追求高效的大型语言模型(LLMs)方面,除了网络剪枝之外,还开发了许多技术,包括知识蒸馏、量化和系统级推理加速。知识蒸馏是一种模型压缩技术,它通过训练一个较小的模型来模仿一个较大模型的行为。量化则是减少模型权重的位数以减少模型大小和计算需求的技术。

系统级推理加速涉及到在系统级别进行优化,以提高模型的推理速度。这些优化可能包括内存管理、计算调度和硬件加速等方面。本研究专注于网络剪枝,这是模型压缩领域的一个长期存在的方法。与仅使用零掩码的剪枝模型相比,结构化剪枝通过移除有组织的模式(例如整个层或模块)来提高硬件无关的推理效率。

这项研究探索了深度剪枝在多亿参数LLMs中的应用,这是一个相对未被充分研究的领域。通过移除Transformer块来显著加速推理延迟,同时在竞争性能方面取得了与宽度剪枝方法相媲美的结果。

结论与展望

1. 深度剪枝方法总结与贡献

本研究通过对大型语言模型(LLMs)的深度剪枝进行了系统的分析,提出了一种简单而有效的深度剪枝方法。与传统的宽度剪枝方法相比,深度剪枝方法在小批量处理条件下,特别是在内存受限的硬件上运行LLMs时,能够显著提高推理速度。该方法通过一次性移除整个Transformer块,并结合LoRA重训练阶段,展现了与最新宽度剪枝技术相匹敌的零样本任务性能。

主要贡献有以下几点:

  • 在受限批量大小的场景中,深度剪枝方法能够有效提升LLMs的自回归生成速度,这一点在以往的研究中鲜有探讨。

  • 该研究提出了一种简单且有效的LLMs深度剪枝策略,并探索了多种设计因素,包括可剪枝单元的选择、重要性评估标准以及重训练频率。

  • 通过排除若干Transformer块获得的紧凑型LLMs,在零样本任务中的表现与精细宽度剪枝模型相当,同时实现了推理加速。

2. 未来研究方向

尽管深度剪枝方法已经取得了显著的成果,但未来的研究可以在以下几个方向进行深入探索:

  • 研究更强大的重训练方法,包括全参数更新和知识蒸馏,以进一步提升剪枝后模型的性能。

  • 对校准数据进行更深入的研究,以更好地理解其对剪枝效果的影响,并优化剪枝过程中的数据选择。

  • 探索深度剪枝与其他模型压缩技术(如量化、知识蒸馏)的结合,以实现更高效的LLMs部署。

  • 考虑不同硬件平台的特性,优化剪枝方法以适应更广泛的部署场景,包括边缘设备和移动平台。

通过这些未来的研究工作,期望能够进一步推动大语言模型在资源受限环境中的应用,使其更加普及和高效。

公众号「夕小瑶科技说」后台回复“Shortened ”获取论文pdf

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

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

相关文章

四、分类算法 - 朴素贝叶斯算法

目录 1、朴素贝叶斯算法 1.1 案例 1.2 联合概率、条件概率、相互独立 1.3 贝叶斯公式 1.4 朴素贝叶斯算法原理 1.5 应用场景 2、朴素贝叶斯算法对文本进行分类 2.1 案例 2.2 拉普拉斯平滑系数 3、API 4、案例:20类新闻分类 4.1 步骤分析 4.2 代码分析 …

conda下tensorflow安装

conda create -n tf21 python3.7 conda activate tf21 conda install tensorflow-gpu2.1验证 import tensorflow as tf tf.test.is_built_with_cuda()

职业技能鉴定服务中心前端静态页面(官网+证书查询)

有个朋友想做职业技能培训,会发证书,证书可以在自己网站可查。想做一个这样的网站,而且要特别土,一眼看上去像xxx官方网站,像jsp .net技术开发的网站。用htmlcssjquery还原了这样子一个前端页面,这里分享给…

如何使用 GitHub Action 在 Android 中构建 CI-CD

如何使用 GitHub Action 在 Android 中构建 CI-CD 一、什么是 CI/CD?二、什么是 CI:持续集成?三、什么是CD:持续部署?3.1 持续交付3.2 持续部署 四、使用 GitHub 操作在 Android 中构建 CI-CD 管道4.1 步骤 五、什么是…

JAVA工程师面试专题-并发编程篇

目录 一、线程 1、并发与并行的区别 2、同步和异步的区别 3、Java中创建线程有哪些方式? 4、Thread和Runnable的区别 5、Java中的Runnable、Callable、Future、FutureTask的区别和联系? 6、说一下你对 CompletableFuture 的理解 7、volatile关键字有什么用&…

electron学习和新建窗口

首先我们要先下载electron npm install --save-dev electron 建立入口文件main.js 新建一个入口文件 main.js,然后导入eletron新建一个窗口。 const { app, BrowserWindow, ipcMain } require("electron"); const path require("path");func…

centos或者 ubuntu 查找当前目录所有文件包含指定值的文件地址

出现环境是我的nginx缓存 缓存了一个css 但是这个css不是最新的了 所以直接在缓存的目录下执行 find /data -type f -exec grep -l "被缓存文件的内容" {} 找到以后直接vi 查看一下 如果内容没问题的话 直接 rm -rf 删除了就可以了

Async注解详解-Async的作用以及原理

文章目录 起因Async作用原理EnableAsyncAsyncAnnotationBeanPostProcessor 起因 作为一个菜鸟,总是会遇到各种匪夷所思的bug。今天,不出意外的话今天我又遇到了意外…bug… 我在调用同事的一个方法时,莫名奇妙的报了空指针,当前…

压缩感知的图像仿真(MATLAB源代码)

压缩感知是一种用于高效获取和表示信号的技术,它可以显著减少数据的采样和传输量,同时保持对信号的高质量恢复能力。在压缩感知中,信号被表示为其在一个稀疏基中的稀疏线性组合。通过仅使用少量的随机投影测量,就能够捕捉信号的大…

报表控件Stimulsoft 新版本2024.1中,功能区工具栏新功能

今天,我们将讨论Stimulsoft Reports、Dashboards 和 Forms 2024.1版本中的一项重要创新 - 在一行中使用功能区工具栏的能力。 Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinF…

Elasticsearch Update By Query详解

1. 使用场景 一般在以下几种情况时,我们需要重建索引: 索引的 Mappings 发生变更:字段类型更改,分词器及字典更新 索引的 Setting 发生变更:索引的主分片数发生改变 集群内,集群间需要做数据迁移 Elastiic…

【移动安全】MobSF联动安卓模拟器配置动态分析教程

原文链接 MobSF联动安卓模拟器配置动态分析教程 实现方式 Windows开启安卓模拟器并进行相关配置作为调试客户端,Linux使用docker开启MobSF作为服务端。 好处:干净,部署简单,不用安装乱七八糟的环境,防止破坏其他应…

STM32F10X(Cortex-M3)系统定时器寄存器笔记和系统定时器精准延时函数

Cortex-M3系统定时器寄存器笔记和系统定时器精准延时函数 简介系统定时器寄存器STK_CTRLSTK_LOADSTK_VALSTK_CALIB STM32F10X(Cortex-M3)精准延时函数 简介 在STM32F10X(Cortex-M3)除了通用定时器和看门狗定时器外,还有一个系统定时器(SysTick) 拿STM32F103C8T6来说…

ES6 | (一)ES6 新特性(上) | 尚硅谷Web前端ES6教程

文章目录 📚ES6新特性📚let关键字📚const关键字📚变量的解构赋值📚模板字符串📚简化对象写法📚箭头函数📚函数参数默认值设定📚rest参数📚spread扩展运算符&a…

干货分享 | TSMaster 序列发送模块在汽车开发测试中的应用

众所周知,序列发送模块可以不需要脚本代码实现测试中特定控制报文序列的发送,该模块多用于循环顺序控制的测试案例中。序列发送模块的常用场景,主要是针对一些新开发的产品需要通过该模块来验证产品功能等等。本文重点和大家分享一下关于TSMa…

力扣102 二叉树的层序遍历 Java版本

文章目录 题目描述思路代码 题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[…

辉辉数码:目前电视盒子哪个最好?目前性能最好的电视盒子

大家好,我是辉辉,上期测评发布后我收到了很多粉丝的反馈希望我这期能分享电视盒子推荐,看看目前电视盒子哪个最好。我购入了市面上最热门的十几款电视盒子对比配置、系统后整理了五款目前性能最好的电视盒子推荐给大家。 品牌型号&#xff1…

计算机网络-局域网和城域网(二)

1.局域网互联设备: 2层网桥(生成树、源路由)、3层交换机、路由器。网桥要求3层以上协议相同,1、2层协议不同可互联。 2.生成树网桥: 又叫透明网桥,IEEE802.1d,生成树算法。基本思想是在网桥之…

Spring Security学习(六)——配置多个Provider(存在两种认证规则)

前言 《Spring Security学习(五)——账号密码的存取》一文已经能满足一般应用的情况。但实际商业应用也会存在如下的情况:用户提交的账号密码,能在本地的保存的账号密码匹配上,或者能在远端服务认证中匹配上&#xff…

提示找不到msvcr110.dll怎么解决?这5个方法简单有效搞定

在计算机系统运行过程中,如果发现无法找到msvcr110.dll这个特定的动态链接库文件,通常会引发一系列问题和困扰。首先,这可能导致某些应用程序无法正常启动或运行,因为msvcr110.dll是许多基于Microsoft Visual C编译的应用程序所必…