LoRD|基于激活感知的LLMs低秩压缩

ops/2024/9/23 1:08:48/

LLMs的压缩是降低模型参数量的重要手段。通常对LLMs做压缩的方法有很多,包括量化(Quantization),稀疏化(Sparsity),剪枝(Pruning)这些离散的方法,由于它们的不连续性质,压缩后再微调困难是其最大的缺点。

LoRD提出了全新的,基于两个底秩(Low-Rank)矩阵表示权重的方式对权重进行压缩,在获得更低的参数量的同时,保持压缩过程的连续性,并且硬件友好,这使得压缩后微调变得更加轻易做到,甚至做的更好。LoRD考虑了Activation对于压缩Weight的影响,而不是对Weight进行简单的分解,这种综合考虑使得LoRD获得理论的最优解。

论文标题: LORD: LOW RANK DECOMPOSITION OF MONOLINGUAL CODE LLMS FOR ONE-SHOT COM-PRESSION

论文链接: https://arxiv.org/pdf/2309.14021.pdf

图片

摘要

随着大型语言模型(LLMs)在代码生成领域的应用日益广泛,模型的大小、成本和推理速度成为了亟待解决的问题。在本文中,我们探索了一种新的压缩范式——低秩分解(LoRD),该方法能够在不进行稀疏化处理的情况下,通过将大型矩阵分解为两个较小矩阵的乘积来减少模型参数,从而在现代硬件上实现更快速的推理,同时保持模型的全可微性和所有参数的可训练性。

图片

背景

**大型语言模型(LLMs)**已成为提高开发者生产力的关键组件,这些模型的参数量可达数十亿。为了降低模型大小、减少运行成本并提高推理速度,近期提出了多种压缩和加速LLMs推理的方法,包括量化、剪枝和知识蒸馏。然而,这些方法要么需要重新训练,要么存在一些缺陷。

**低秩分解(LoRD):**LoRD通过将神经网络的密集矩阵分解为两个较小的密集矩阵,利用现代硬件上高度优化的浮点密集矩阵乘法内核。与量化方法相比,LoRD不需要为每种硬件后端编写专门的内核,且在压缩后模型仍然保持全可微,所有参数均可训练。

图片

实验研究

作者对两个系列的代码LLMs——StarCoder和CodeGen进行了研究,发现这些模型的秩可以减少高达39.58%,而困惑度(perplexity)的增加不到1%。研究者们进一步将StarCoder 16B模型压缩到13.2B参数,没有任何性能下降,并且压缩到12.3B参数时,仅出现极小的性能下降。LoRD模型仅通过在代码中更改一行,就可以实现高达22.35%的推理加速。

图片

图 1a 和 1b 显示了 CodeGen 和 StarCoder 模型权重矩阵排名降低的困惑度趋势。对于两个家族中最大的模型,研究者们观察到排名减少 10% 的困惑度仅增加了约 1%,困惑度降低高达 35%,困惑度提高不到 10%。然而,最小的模型 CodeGen Mono 3350M 只能分解为 35% 的等级降低,而困惑度的类似下降。随着 % 等级的降低,较大模型的困惑度变化慢得多,因此可以压缩模式,类似于量化和修剪的观察结果(Li et al., 2020)。需要注意的是,对于大多数模型,超过 50% 会导致显着的输出质量下降。

图片

图 2:变压器中不同线性层的各种纵横比 (α) 的奇偶校验点。

不同线性层的纵横比(Aspect Ratio, α):

输出投影:α = 1.00,意味着矩阵是方阵,其行数和列数相等。

多查询注意力(Multi-query attention)投影:α = 0.96,接近方阵,表示矩阵较为方正。

典型MLP(多层感知器)投影:α = 0.25,表明矩阵较为“瘦长”,即行数远大于列数。

CodeGen 16B的嵌入和语言模型头部投影:α = 0.12,具有非常小的纵横比,意味着矩阵非常“瘦长”。

秩降低对模型大小的影响:

当秩降低时,如果纵横比α较大,即使秩减少,模型大小也可能暂时增加,因为分解后的矩阵可能包含更多的参数。

对于方阵或接近方阵的矩阵,秩减少50%是达到奇偶点(Parity Point)的阈值,此时分解后的模型大小与原始模型大小相同。

对于更“瘦长”的矩阵,较小的秩减少就足以达到奇偶点,从而实现模型压缩。

压缩与性能权衡:

作者指出,对于大型模型,重新训练是不可行的,因此需要避免对具有高纵横比的层(如输出投影或多查询注意力层)进行分解。

MLP中的权重在秩减少20%时就能达到奇偶点,这表明MLP层可能是实现压缩的良好候选者。

嵌入和语言模型头部投影虽然理论上可以通过分解来压缩,但由于它们在模型总权重中所占比例较小,因此作者选择不对其进行分解。

减少矩阵纵横比的策略:

通过将具有相同输入向量的层分组,并让它们在分解后共享相同的“瓶颈”矩阵,可以减少矩阵的纵横比。

这种分组方法允许重用计算和权重,从而降低分解后的模型大小,实现压缩。

分解候选层:

作者考虑了多头注意力中的查询(Query)、键(Key)和值(Value)投影矩阵,以及SwiGLU中的门控层,这些层在分组后可以减少纵横比,从而成为低秩分解的良好候选者。

通过这些策略,LoRD技术能够在保持模型性能的同时,有效地减少模型的参数数量和大小,提高推理速度,并与现有的量化技术和参数高效微调方法兼容,为大型语言模型的压缩和优化提供了新的途径。

与量化和LoRA的结合:

LoRD模型与最先进的近无损量化方法(如SpQR)兼容,可以实现额外的压缩增益。此外,LoRD模型在LoRA(一种参数高效的微调方法)上进一步减少了内存需求,比传统的QLoRA减少了21.2%的内存,同时提供了类似的参数高效微调增益。

图片

在变压器模型的压缩研究中,研究者们不仅考虑了秩减少的奇偶点,还分析了不同层对低秩分解的敏感性。图3展示了两个模型族中大型模型的困惑度随参数减少而增加的趋势。研究发现:

\1. 对于CodeGen模型,注意力权重矩阵(包括查询、键和值的投影)在参数显著减少的情况下,困惑度增加最小,这使得它成为分解的最佳候选层。

\2. 即使在秩减少39.58%的情况下,CodeGen模型的困惑度增加仍小于1%。

\3. 在StarCoder模型中,MLP的第二层(mlp 2,负责缩小表示维度)比第一层(mlp 1,负责扩大表示维度)更适合进行低秩分解。

这些发现表明,通过精心选择哪些层进行低秩分解,可以在保持模型性能的同时实现有效的模型压缩。

图片

研究者们对StarCoder和CodeGen系列中最大的16B模型执行了低秩分解,并关注了特定层的参数减少和性能影响:

**1. 层的选择:**选择了StarCoder的MLP 2层和CodeGen的注意力层进行分解,因为它们在减少参数数量方面最有效,同时对困惑度的增加影响最小。

**2. 性能评估:**使用Human Eval数据集评估模型性能,考虑了Pass@1和Pass@10两个指标。

3. StarCoder****模型:在50%的秩减少下,模型参数可压缩至13.2B,而没有损失Pass@1性能;进一步压缩至12.3B参数(62.5%秩减少)时,性能仅轻微下降。

**4. CodeGen模型:**在秩减少方面,CodeGen模型显示出与StarCoder类似的性能下降趋势,但在参数减少方面,由于矩阵分解的纵横比较高,HumanEval得分下降更为显著。

**5. 性能提升:**值得注意的是,某些压缩模型的Pass@1得分甚至略有提高,这与之前的研究中观察到的压缩带来的性能轻微提升一致。

通过精心选择分解层,StarCoder和CodeGen模型在大幅减少参数数量的同时,仍能保持或几乎保持了原有的性能水平。

图片

接下来,研究者们考虑在标准 cuBLAS 浮点内核上访问模型的推理加速(前向传递)。考虑在 A100 GPU 上使用标准 cuBLAS 内核使用 pytorch 后端 (Paszke et al., 2019) 的 Starcoder 的标准 Huggingface 实现 (Wolf et al., 2020)。LoRD 分解模型是通过仅修改一行代码以用额外的线性层 3 替换 MLP 来实现的。研究者们对 1024 个标记和 512 个标记序列进行了基准测试,平均超过 10 次运行,预热 3 次运行。并在图 4 中绘制了按等级减少的相对时间和模型大小:StarCoder 16B 跨等级的时间和模型大小。

图片

虽然 LoRD 能够在相同的精度级别进行压缩,但研究者们研究了分解后的模型是否可以通过量化进一步压缩。表 2 显示了使用 SpQR 的近乎无损量化技术 (Dettmers et al., 2023b) 的不同 LoRDCder 在 8 和 4 位量化级别上的 HumanEval pass@1 结果,并观察到 LoRD 模型可以与量化相结合以进行进一步压缩,对于大多数模型,8 位的性能下降很小,4 位量化的性能下降非常小。还观察到量化后 HumanEval 的轻微增加,类似于 Pangu-Coder2 (Shen et al., 2023)。

图片

研究者们探究了LoRD(低秩分解)技术在减少内存使用方面的潜力,特别是在参数高效的微调方法中。他们使用了QLoRA(一种存储权重为量化格式的LoRA的内存效率更高版本)对LoRD分解后的模型进行了微调,并在代码指令数据集上进行了测试。

关键结果如下:

使用QLoRA对LoRD分解后的模型进行微调,在HumanEval pass@1指标上,13.2B参数的LoRDCoder模型达到了37.80的得分,而12.3B参数的模型达到了37.62,这些结果与完整规模的StarCoder模型的37.74得分相当。LoRD技术不仅提升了模型的推理效率,还成功地降低了内存需求,同时保持了与原模型相似的性能,证明了LoRD在参数高效微调中的有效性。

图片

结论

LoRD作为一种有前景的新范式,为LLMs的压缩提供了一种单次压缩的可能性。LoRD模型不仅易于实现,而且可以针对目标硬件和相应的GEMM内核进行调整,以获得最佳性能。尽管我们的研究仅限于单语言代码LLMs,但低秩分解技术是通用的,不仅限于代码领域,为未来LLMs的压缩提供了新的方向。

引用文献:

Ayush Kaushal, Tejas Vaidhya, Irina Rish. “LORD: Low Rank Decomposition of Monolingual Code LLMs for One-Shot Compression”. Preprint: Work in Progress, 2023.

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。


http://www.ppmy.cn/ops/100587.html

相关文章

【Node】【6】模块系统

Node.js的模块系统基于CommonJS规范,其中每个文件被视为一个独立的模块,可以通过require函数引入其他模块,也可以通过module.exports将模块的功能暴露给外部。 CommonJS规范:使用 require() 函数来导入模块,使用 module.exports …

如何使用ssm实现图书商城网站的设计和开发+vue

TOC ssm228图书商城网站的设计和开发vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范…

基于x86 平台opencv的图像采集和seetaface6的图像质量评估功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的图像质量评估功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的图像质量评估模块…

leetcode前缀和哈希表(974. 和可被 K 整除的子数组)

前言 经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的非空 子数组 的数目。 子数组 是数组中 连续 的部分。 示例 1: 输…

计算机网络--面试总结四(HTTP、RPC、WebSocket、SSE)

当前:计算机网络--面试总结四(HTTP、RPC、WebSocket、SSE) 计算机网络--面试知识总结一 计算机网络-----面试知识总结二 计算机网络--面试总结三(Http与Https) 知识积累之ThreadLocal---InheritableThreadLocal总结…

九州通“最差“半年报:股价今年跌超三成,第二利润曲线毛利下滑

《港湾商业观察》施子夫 王璐 从最新公布的半年报业绩来看,九州通(600998.SH)延续了一季度业绩欠佳的态势:营收和净利润双双下滑。 营收净利润下滑,中报创多年来“最差” 今年上半年(报告期内&#xff…

6.Linux_服务器搭建

TFTP服务器 1、概述 什么是TFTP服务器: TFTP(Trivial File Transfer Protocol)即简单文件传输协议是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69 介…

Docker方式部署K8s集群

1.1 集群创建说明 Kubernetes支持多种容器运行时,包括Containerd、Docker和CRI-O。以下是这三种方式的详细说明: Containerd:Containerd是Kubernetes默认使用的容器运行时。它是一个轻量级的容器运行时,专为Kubernetes设计&#…