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

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大模型是一项有前景且值得投入的时间和精力的重要选择。

LLMsembedding方法可以通过将待分析的文本转化为embedding向量来实现。这可以使用原始的LLMs生成embedding向量,这样可以方便地操作,并在检索过程中保留LLMs的"思维过程"。首先,需要将所有文档中的文本转化为embedding向量,并将这些原始文本的embedding向量和原数据存储在Milvus中。在查询时,可以使用相同的模型将问题转化为embedding向量,然后搜索相似性高的相关问题,并将这些相关问题作为输入,生成答案。这种方法可以结合其他推荐系统技术一起使用,以避免一些缺点并获得更好的效果。例如,可以提取基于嵌入的特征用于协同过滤,或与"Two Tower"架构结合使用等等。\[1\]\[2\] #### 引用[.reference_title] - *1* [探索将大语言模型用作推荐系统](https://blog.csdn.net/Baihai_IDP/article/details/130679043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [LLMs 诸神之战:LangChain ,以【奥德赛】之名](https://blog.csdn.net/weixin_44839084/article/details/130731843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用langchain打造自己的大型语言模型(LLMs)](https://blog.csdn.net/weixin_42608414/article/details/129493302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值