(2024,LoRA 压缩和多LoRA快速切换,联合对角化,重构误差)先压缩再提供服务:以极低的开销为数千个 LoRA提供服务

文摘   2024-07-30 13:03   新加坡  

Compress then Serve: Serving Thousands of LoRA Adapters with Little Overhead

进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群

目录

0. 摘要

1. 简介

3. 基于秩的 LoRA 压缩

3.1 期望特性(Desiderata)

3.2 通过 SVD 的独立压缩

3.3 联合对角化

4. 理论分析

5. 训练 LoRA 和评估任务性能

5.1 训练

6. 实验

7. 讨论


0. 摘要

微调大型语言模型(LLM)使用低秩适配器(low-rank adapters,LoRA)已成为常见做法,通常会产生多个仅在 LoRA 更新上有所不同的相同 LLM 副本。这种范式给需要实时响应 query 的系统带来了挑战,每个 query 涉及不同的 LoRA。先前的工作优化了此类系统的设计,但仍需持续加载和卸载 LoRA,因为在 GPU 内存中存储成千上万的 LoRA 是不可行的。为了解决这一问题,我们研究了在服务 LoRA 适配器时压缩的有效性。我们考虑通过 SVD 对适配器进行单独压缩,并提出了一种将 LoRA 联合压缩到匹配 LoRA 专属缩放矩阵的共享基底(basis)的方法。我们对多达 500 个 LoRA 的实验表明,在实际服务场景中使用超过一千个 LoRA 时,压缩的 LoRA 在保持单个 LoRA 服务 75% 吞吐量的同时,保留了性能并提供了巨大的吞吐量提升。 

1. 简介

在这项工作中,我们考虑了压缩 LoRA 集合的问题。我们有两个主要目标:(1)保持原始 LoRA 的性能和(2)提高服务多个 LoRA 的吞吐量。我们将 LoRA 压缩表述为重构问题,目标是通过总大小较小的矩阵集合来近似原始适配器。我们研究了两种方法:通过 SVD 降低其秩来单独压缩每个 LoRA,以及通过找到共享基底和 LoRA 特定缩放矩阵来联合压缩 LoRA。前者受 [11] 启发,表明降低 LoRA 秩对多任务学习和模型合并是有益的。对于后者,我们提出了一种受联合对角化模型启发的联合压缩算法。

我们的单独和联合压缩方法呈现出有趣的权衡。例如,联合压缩可以通过使用可预加载到 GPU 的共享基底表示任何特定 LoRA,从而实现极端的参数数量减少。然而,共享基底通常会增加 LoRA 的秩。另一方面,单独压缩可以降低秩,但在压缩效率方面有限。我们研究了这些权衡在使用 vLLM [12](一种最先进的 LLM 服务系统)服务 1000 个 LoRA 时如何影响吞吐量。在图 1 中,我们展示了压缩的好处和这些权衡的影响。当服务超过 1000 个 LoRA 时,压缩使吞吐量增加了 2 倍以上,并保持了服务基础 LLM(或合并到 LLM 中的单个 LoRA)75% 的吞吐量。 

3. 基于秩的 LoRA 压缩

LoRA 更新由成对矩阵 A 和 B 参数化,其乘积 BA 更新了神经网络基础模型的固定权重矩阵 W_0 ∈ R^(d_B × d_A)。给定层的输入 x,LoRA 更新模型在该层的输出为 (W_0 + BA)·x。

在制定我们的压缩算法时,我们考虑一组给定的 LoRA 适配器 {(Ai, Bi)}^n_(i=1),我们希望提供服务。我们令 ri 表示 LoRA 适配器对 (A_i, B_i) 的秩,即 Bi ∈ R^(d_B × r_i),Ai ∈ R^(r_i × d_A)。在 §3.1 中列出设计压缩方案的基本考虑因素后,我们在 §3.2 中考虑了一种简单的基线参数减少方法,以及在 §3.3 中更激进的联合对角化方法。

3.1 期望特性(Desiderata)

虽然我们的压缩技术只能访问一组 {(Ai, Bi)}^n_(i=1) 对,但在实验中,我们将通过比较压缩矩阵在典型数据上的表现与未压缩 LoRA 的表现来评估压缩的有效性。基于此原因,尽管在本节中我们优化相对于乘积 Bi·Ai 的 Frobenius 范数重构误差,但实际上这是适配器中压缩误差对 transformer 性能的非线性和复杂影响的代理。我们的实验评估将重点关注压缩 LoRA 在实际数据上相对于未压缩版本的性能(见 §6)。

我们的压缩方法显著减少了参数的总数量。通过压缩减少参数理论上加速了 LoRA 集合的存储和服务过程。然而,这种减少改变了推理期间的计算动态,因此参数减少本身并不立即意味着更快的吞吐量。鉴于 GPU 优化的复杂性,我们将在 §6.3 中评估现实条件下的吞吐量。

3.2 通过 SVD 的独立压缩

最简单的方法是用一个秩为 r 的近似替换每个秩为 ri 的 LoRA 适配器 Bi·Ai

其中通常

由于 Eckart-Young 定理,这种策略找到了在 Frobenius 范数意义上最适合 Bi·Ai 的秩 r 近似。由于Σ_i V^T_i 可以保存为一个矩阵,这种方法将使用的参数数量从 ∑_i (d_A + d_B)·r_i 减少到 r·n·(d_A + d_B)。虽然这种近似方法有效,但随着 n 的增加,它在压缩能力上受到限制,因为它不会在 LoRA 之间共享信息。这一缺点激发了我们下一种方法的动机。

3.3 联合对角化

接下来,我们提出一种联合对角化(Joint Diagonalization,JD)方法,该方法优化一个共享基底,投射到这一基底上的一组 n 个 LoRA。这将允许共享结构,隐式地聚类 LoRA 集合。

在此模型中,每个 LoRA 产物 Bi·Ai 被分解为形式 U·Σ_i·V,其中 U 和 V 在所有 LoRA 之间共享,Σ_i 是每个 LoRA 特有的。在这种表述中,每个 Σ_i 共享相同的秩 r。这允许 U 和 V 预加载到 GPU 上,而在每 batch 需要时加载 Σ_i。矩阵 Σ_i 可以是对角矩阵或小方阵,与传统的多 LoRA 服务配置相比,加速了前向传播。

目标函数。受奇异值分解与最小化重构误差的 Frobenius 范数关系的启发,我们还建议最小化适配器矩阵近似误差的 Frobenius 范数。具体来说,我们使用以下目标函数:

使用 Frobenius 范数的额外好处是使目标函数在每个参数中单独是凸的,这表明可能存在高效的优化方法。然而,该目标函数是欠定的,因此我们考虑以下两种受约束的方案。

完整 Σ_i 近似。第一种方法我们称之为 JD − Full。在不失一般性的情况下,只要 Σi 仍然是一个无约束的完整矩阵,U 和 V 可以被约束为正交矩阵。JD − Full 采用这种限制以使优化更好地成立,但注意这并不限制目标函数(2)的表达能力。此设置产生以下优化问题:

解决此目标函数的有效替代算法可以在附录 B 中找到。

对角 Σi 近似。作为替代方案,我们可以将 U、V 设为无约束(除了具有 r 列之外),而将矩阵 Σi 约束为对角矩阵(但不一定为正)。这种表述产生以下优化问题: 

一个有效的替代的最小二乘算法可以在附录 B 中找到。这种对角版本相比 JD − Full 在每个 LoRA 的参数上有一些节省,因为对角矩阵 Σi 只需要 r 个参数而不是 r^2。

4. 理论分析

虽然基于 SVD 的方法相对容易理解,但在本节中,我们试图更好地理解 §3.3 中提出的联合对角化方法的作用。我们将重点关注具有正交 U 和 V 矩阵的完整 Σi 情况。注意,对于相同的秩 r,r−JD−Diag 的重构误差至少与 r−JD−Full 一样大,因为它对 Σi 施加了一个额外的约束。

首先,注意到只有当 r 足够大时才能实现完美重构:

命题1:假设对所有 i,rank(Bi·Ai) = ri,并且令

然后,使用 r = ~r 的 JD − Full (3) 可以实现无损压缩(完美重构),并且使用 r < ~r 将产生非零重构误差。

证明:当且仅当 r ≥ ~r 时,存在 U, V 使得所有 Bi, Ai 都分别在 U, V 的张成空间内。

由于训练噪声,~r 几乎总是等于 ∑^n_(i=1) r_i。这意味着在大多数现实情况下,联合对角化方法是有损重构。

这种重构损失可能是显著的,如以下定理所示(证明见附录 C):

定理 1:考虑 n 个 LoRA ({Ai, Bi}^n_{i=1}),其中 r, n ≤ d^2,并构造矩阵

令 σj 为 L 的奇异值,从大到小排序,令 ¯σj 为 ∑^n_(i=1) Bi·Ai 的奇异值。然后,使用 JD − Full (3) 方法,

这意味着重构的 LoRA 的 Frobenius 范数平方和满足

换句话说,如果 L 的奇异值没有集中在前 r^2 个条目中,则不可避免会产生显著的重构误差。

备注 1(下界与合并):通过将所有 Σi 设为相等,即,使用完全合并(merging)模型而不是仅合并子空间 U, V 并允许 Σi 随 i 变化,可以达到下界

备注 2(上界与聚类):当 LoRA 相对聚类时,即当 vec(Bi·Ai) 向量组相似时,上界最小。这种情况提高了 L 最大奇异值的幅度,从而提高了命题中的上界。由于 LoRA 是 d×d 矩阵,可以看作 d^2 维空间中的点,对于典型的 d 值高达数百,彼此无关的 LoRA 很可能不聚类,即它们之间的内积相对较低。

对于正交 LoRA 的情况,L 的奇异值就是 LoRA 的范数,我们立即得到以下推论:

推论 1:假设(例如由于归一化)联合对角化算法的输入都具有单位 Frobenius 范数,即 ||Bi·Ai||_Fro = 1。此外,假设 LoRA 都是正交的,即

那么,使用 JD − Full 方法(3),我们有

这意味着重构的 LoRA 的 Frobenius 范数平方和满足

这意味着,对于 r^2 ≪ n 的常见设置,重构的 LoRA 将比原始 LoRA 显著更小,并且必然会有显著的重构误差。

本节的结果展示了使用联合对角化的权衡。

  • 如果 LoRA 是相似或良好聚类的,重构误差将很低。

  • 如果 LoRA 是随机且正交的,重构误差将很高。

注意,由于 transformer 的损失空间非常复杂,增加权重的重构误差并不一定意味着降低逼近所需 LLM 输出的能力。有趣的是,在下面的图 3 中所示的实验中,我们确实看到虽然大的重构误差迅速降低了性能,但适度(但仍相对较大,约为 0.4)的重构误差并没有损害性能,甚至可能略微优于零重构误差设置。这一观察结果激发了我们对最小化权重重构误差的关注,同时也指出了我们的方法可能不仅仅是实现低损耗压缩的可能性。具体来说,

  • 当 r 较大时,基于 Frobenius 范数的联合对角化倾向于找到许多 LoRA 共享的子空间,

  • 当 r 较小时,将子空间合并到平均值附近。

当 r 远低于该问题的自然秩时,这种倾向于平均化所有或部分 LoRA 信号的倾向直接连接到合并 LoRA 的概念,其在 [23, 9] 等工作的经验成功可能解释了我们方法的成功,尽管基础 transformer 是非线性的。

附录 F.10 中的实验进一步探讨了这一想法,比较了真实世界 LoRA 的重构与随机采样 LoRA 的重构。重构误差通常很大,但显著低于随机噪声的重构误差,这表明 LoRA 之间存在一个主要的共享成分,并成功保留了这一成分。

5. 训练 LoRA 和评估任务性能

5.1 训练

我们使用 Mistral-7B-Instruct-v0.2 [10] 作为基础模型,在 500 个自然指令任务 [27] 上训练了 LoRA 适配器。所有 LoRA 适配器的配置秩为 16,即 ∀_i, r_i = 16。

我们手动选择了 10 个多样化的任务(附录 D 中的表 2)进行一致的实验评估,并随机抽取了另外 490 个任务,总共 500 个任务。这些任务完全使用英语(包括输入和输出),以确保更高的质量和全面的审查 [27]。每个任务数据集被分为训练集、验证集和测试集。

使用验证集调整了诸如早停之类的超参数。测试集上的评估显示,LoRA 在 Rouge 分数和损失指标方面均一致优于基础模型,如表 1 所示。详细信息见附录 D。

6. 实验

【注:文中并未说明圆的大小代表什么意思,但不影响对比。

图 2:要在性能与 memory(LoRA 压缩)之间做一个权衡。

图 3:LoRA 压缩越多,重建误差越大,性能越差。

图 4:JD-Full 是相对地最优方法。

】 

7. 讨论

本研究介绍了 LoRA 压缩的方法,解决了基础模型和大型语言模型面临的重要挑战。我们的贡献包括理论公式、经验验证和实践实现,这些都增强了对 LLM 在可扩展环境中的理解和应用。

我们的发现具有多方面的意义。我们对重构误差的理论保证不仅增加了对使用压缩模型的信心,还为未来在这一领域的探索奠定了基础。展示我们的压缩技术能够保持原始 LoRA 性能的高达 100%,突显了我们方法的有效性。此外,将 LoRA 压缩集成到最先进的 LLM 服务系统中,展示了资源优化的潜力,成千上万的 LoRA 的吞吐量接近单个 LoRA 的水平。

一个主要的限制涉及新 LoRA 的集成。我们的研究表明,尽管在原始空间中压缩新 LoRA 能改善基准性能,但相比未压缩的 LoRA,可能会降低性能(见附录 F.11)。因此,最佳策略取决于新 LoRA 的添加频率。较少添加的新 LoRA 可以通过重新压缩所有 LoRA 来证明其合理性,相对于推理成本影响最小。相反,在经常引入但很少服务的新 LoRA 的情况下,应该仅压缩经常服务的 LoRA,其他则使用原始 LoRA。

我们研究的有希望的结果提示了几个未来的研究方向。将我们的压缩技术扩展到更多的模型和任务中,可能会进一步证实和扩展我们发现的普遍性。这包括分布外评估,这可以突出显示与压缩相关的泛化改进。此外,更复杂的优化算法可以改善压缩与性能之间的平衡。

总之,我们的研究通过提供强大、可扩展且高效的压缩解决方案,显著推动了 LLM 的部署。压缩 LoRA 在保持高性能的同时实现了大量的资源节省,这为 LLM 在各个行业的更广泛应用和采纳开辟了新的途径。我们鼓励社区在我们的发现和共享 LoRA 的基础上,进一步探索和提升这些技术的实用性。


论文地址:https://www.arxiv.org/abs/2407.00066

EDPJ
CV 博士在读。文章搜索:公众号主页右上角放大镜搜关键词。
 最新文章