CARE-LoRA: 基于压缩激活重建的内存高效LoRA微调框架

arXiv cs.LG 论文

摘要

CARE-LoRA提出了一种压缩激活重建框架,通过利用低秩投影来减少LoRA微调过程中的内存消耗。该方法在降低内存占用的同时,实现了具有竞争力的性能。

arXiv:2607.11940v1 公告类型: 新 摘要: 随着大型预训练模型规模的持续增长,在有限内存预算下对其进行微调变得愈发困难。低秩适配(LoRA)是目前最广泛采用的参数高效微调(PEFT)方法之一,它通过仅优化低秩适配矩阵,大幅减少了可训练参数的数量。由于参数开销显著降低,反向传播过程中保留的激活值成为LoRA微调时主要的内存瓶颈。为解决这一问题,我们提出了CARE-LoRA,一种数据感知的压缩激活重建框架。通过利用LoRA固有的投影结构,CARE-LoRA用LoRA分支自然产生的低秩压缩激活替换了完整输入激活。它在前向传播过程中以极小的额外计算代价计算一个轻量级重建矩阵,该矩阵在反向传播中用于重建梯度信号,从而保持LoRA矩阵的完全可训练性。跨多种模型和下游任务的大量实验表明,在显著降低总体内存占用的同时,CARE-LoRA相比标准LoRA及代表性LoRA变体实现了具有竞争力甚至更优的性能。我们的代码已公开在 https://github.com/fishandyu/CARE-LoRA 。
查看原文
查看缓存全文

缓存时间: 2026/07/15 04:16

# CARE-LoRA:面向内存高效低秩适配的压缩激活重建框架  
来源:https://arxiv.org/html/2607.11940  
张耕宇、冉海银、何正宝、刘宇航、田汉林、黄哲浩、黄晓霖(通讯作者)  
作者单位:上海交通大学图像处理与模式识别研究所,上海 200240,中国。  
邮箱:{zhang2021jiaoda, rhy2006, lstefanie, yuhangliu, hanlingtian, kinght_h, xiaolinhuang}@sjtu.edu.cn。  

###### 摘要  
随着大规模预训练模型规模持续增长,在有限内存预算下对其进行微调变得愈发困难。低秩适配(LoRA)是目前最广泛采用的参数高效微调(PEFT)方法之一,它通过仅优化低秩适配矩阵来缓解这一难题,从而大幅减少可训练参数的数量。随着参数开销大幅降低,为反向传播而保留的激活值已成为LoRA微调过程中主要的内存瓶颈。为解决此问题,我们提出CARE-LoRA,一种数据驱动的压缩激活重建框架。通过利用LoRA固有的投影结构,CARE-LoRA用LoRA分支自然产生的低秩压缩激活替代完整输入激活。在前向传播中,它以极小的额外计算成本计算一个轻量级重建矩阵,该矩阵在反向传播中用于重建梯度信号,从而使LoRA矩阵保持完全可训练。在多种模型和下游任务上的大量实验表明,CARE-LoRA在显著降低整体内存占用的同时,取得了与标准LoRA及代表性LoRA变体相当甚至更优的性能。我们的代码已公开于 https://github.com/fishandyu/CARE-LoRA。  

###### 索引词  
低秩适配、参数高效微调、激活压缩、大型语言模型。  

## 1 引言  
预训练后接下游微调已成为构建现代语言系统的标准流程。然而,全参数微调在有限GPU内存下依然困难,因为它不仅更新所有预训练权重,还需要保存其梯度、优化器状态以及用于反向传播的中间激活值。参数高效微调(PEFT)通过将优化限制在少量可训练参数上,缓解了参数瓶颈。在PEFT中,低秩适配(LoRA)已成为一种部署友好且广泛使用的方法:它冻结预训练骨干网络,仅学习低秩权重更新,并且可以将学习到的适配合并到基础模型中而不引入额外推理延迟[11](https://arxiv.org/html/2607.11940#bib.bib1)。在实际中,尽管LoRA大幅减少了可训练参数及其梯度和优化器状态,但它并未减少反向传播所需的激活内存,使得激活值成为更突出的瓶颈。这促使了近期关于减少LoRA风格微调中保存激活值的工作。HyC-LoRA针对LoRA训练中为非线性算子缓冲的激活值,通过异常感知的低比特量化进行压缩[29](https://arxiv.org/html/2607.11940#bib.bib2)。LoRAct则通过将完整激活矩阵分解为紧凑的低秩因子来减少激活内存[23](https://arxiv.org/html/2607.11940#bib.bib3)。梯度检查点是一种标准的内存节省技术,它通过仅存储部分中间激活并在反向传播中重新计算其余部分来减少激活内存[7](https://arxiv.org/html/2607.11940#bib.bib4)。尽管这些方法有效,但它们主要通过通用量化、分解或重计算来减少激活内存,而非利用LoRA因子的结构特性。  
一种利用这种因子化结构的代表性方法是LoRA-FA[31](https://arxiv.org/html/2607.11940#bib.bib5),它冻结AA并仅更新BB,从而用压缩的低秩激活替代存储的完整激活。虽然LoRA-FA大幅减少了激活内存,但其性能远不能令人满意。原因在于,当AA固定时,权重变化ΔW=AB\Delta W=AB被限制在一个由随机非训练初始化矩阵确定的子空间内。换句话说,LoRA-FA获得的适配器只能学习如何从固定的低维子空间映射特征,但该子空间本身无法像标准LoRA那样调整。克服这一限制的挑战在于,一方面我们需要解冻AA以追求适应性,另一方面又要避免计算AA的精确梯度以保持内存效率。为实现这一目标,我们提出了一种新颖的方法来近似重建反向信息。我们将该方法命名为CARE-LoRA,即面向内存高效低秩适配的压缩激活重建框架。它存储自然压缩激活Z=XA∈RN×rZ=XA\in\mathbb{R}^{N\times r}以及一个轻量级数据感知重建矩阵M∈Rr×mM\in\mathbb{R}^{r\times m},其中r≪min{m,N}r\ll\min\{m,N\}。因此,其内存开销仅略高于LoRA-FA,同时通过保持AA可训练,恢复了标准LoRA的大部分性能。  
我们在多种微调设置上评估了CARE-LoRA,包括自然语言理解、数学推理、代码生成、指令遵循和图像生成。在这些设置中,我们的方法相对于标准LoRA将总峰值内存最高降低约20%。在相同秩下,它显著优于LoRA-FA,在GLUE[27](https://arxiv.org/html/2607.11940#bib.bib6)和SuperGLUE[26](https://arxiv.org/html/2607.11940#bib.bib7)上的平均得分分别提升了4.3分和7.4分,而额外内存开销不到1%。此外,降低内存消耗使CARE-LoRA能够使用更高秩以获得更强性能。通过增加秩,CARE-LoRA进一步超越了LoRA及代表性LoRA变体如DoRA[15](https://arxiv.org/html/2607.11940#bib.bib8)和PiSSA[18](https://arxiv.org/html/2607.11940#bib.bib9)。值得注意的是,在Mistral-7B-v0.3[12](https://arxiv.org/html/2607.11940#bib.bib10)微调任务上,CARE-LoRA取得了最高的平均性能,同时每步训练时间仅为LoRA的1.02倍,并仍保持比LoRA更低的内存占用。  
见描述  
图1:CARE-LoRA概述。CARE-LoRA存储压缩激活ZZ和轻量级重建矩阵MM,而非完整激活XX,从而能够在保持两个LoRA因子均可训练的同时重建AA的梯度。  

本研究的主要贡献如下:  
- • 我们重新审视了LoRA微调的内存瓶颈,并指出一旦适配器侧参数充分减少,激活存储便成为主要的剩余障碍。  
- • 我们提出了CARE-LoRA,一种数据感知框架,它存储压缩激活和轻量级重建矩阵,在接近LoRA-FA的内存预算下使两个LoRA因子均可训练。我们还证明其投影下子空间可以在微调过程中演化。  
- • 我们通过实验表明,在相同秩下,CARE-LoRA显著优于LoRA-FA。通过将节省的内存再投资于更高秩,它进一步超越了标准LoRA及代表性变体,在多个任务上实现了内存效率、速度和精度的良好平衡。  

## 2 相关工作  
### 2.1 低秩适配  
低秩适配(LoRA)是一种广泛采用的参数高效微调方法,它冻结预训练权重WW并学习低秩更新ΔW=AB\Delta W=AB,其中投影下矩阵AA压缩输入激活XX,投影上矩阵BB将其扩展回原空间,合并后不增加推理成本[11](https://arxiv.org/html/2607.11940#bib.bib1)。许多变体从互补视角改进了LoRA。在参数方面,AdaLoRA自适应地在权重矩阵间分配秩预算[32](https://arxiv.org/html/2607.11940#bib.bib11);VeRA和LoRA-XS通过共享冻结随机投影[13](https://arxiv.org/html/2607.11940#bib.bib12)或在冻结SVD因子间设置小可训练核心[2](https://arxiv.org/html/2607.11940#bib.bib13)进一步减少可训练参数。在优化方面,LoRA-GA和PiSSA通过改进适配器初始化加速收敛[28](https://arxiv.org/html/2607.11940#bib.bib14)、[18](https://arxiv.org/html/2607.11940#bib.bib9);DoRA将每个权重分解为幅度和方向[15](https://arxiv.org/html/2607.11940#bib.bib8)。QLoRA则针对冻结骨干网络,通过4比特量化模型反向传播以削减基础权重内存[9](https://arxiv.org/html/2607.11940#bib.bib15)。尽管有这些进展,所有这些方法仍然保留完整输入激活用于反向传播,因此微调的激活内存问题未得到解决。  

### 2.2 内存高效微调  
微调过程中,内存被可训练参数、其梯度、优化器状态以及为反向传播保留的激活值消耗。一旦参数高效方法减少了前三项,激活便成为主导项,其规模随批次大小和序列长度增长[23](https://arxiv.org/html/2607.11940#bib.bib3)。通用技术针对这一预算的不同部分,例如在反向传播中重计算激活[7](https://arxiv.org/html/2607.11940#bib.bib4)、[14](https://arxiv.org/html/2607.11940#bib.bib16),将梯度和优化器状态投影到低秩子空间[33](https://arxiv.org/html/2607.11940#bib.bib17),或通过量化或低秩投影压缩存储的激活[5](https://arxiv.org/html/2607.11940#bib.bib18)、[22](https://arxiv.org/html/2607.11940#bib.bib19),但这些均非专门为LoRA微调设计。与我们设置更接近的是,LoRAct通过在线低秩分解压缩缓存的激活[23](https://arxiv.org/html/2607.11940#bib.bib3)。HyC-LoRA通过异常感知方案量化为非线性算子缓冲的激活[29](https://arxiv.org/html/2607.11940#bib.bib2)。尽管两者都减少了LoRA微调过程中存储的激活,但它们并未充分利用LoRA的因子化结构。LoRA-FA则利用了这一点,冻结投影下矩阵并仅训练投影上矩阵,因此无需存储完整激活[31](https://arxiv.org/html/2607.11940#bib.bib5)。然而,这在整个微调过程中限制了投影下子空间,从而降低了性能。为克服这一局限,我们提出了一种方法,利用LoRA自然产生的压缩激活来重建用于训练的梯度。我们的方法不仅保留了LoRA-FA的内存节省优势,还保持了标准LoRA的性能,且计算开销可忽略不计。  

## 3 方法  
**算法1:CARE-LoRA**  
前向传播 | 反向传播  
--- | ---  
0: 输入:激活 X∈RN×mX\in\mathbb{R}^{N\times m} | 0: 存储:冻结权重 W∈Rm×nW\in\mathbb{R}^{m\times n},可训练矩阵 A∈Rm×rA\in\mathbb{R}^{m\times r} 和 B∈Rr×nB\in\mathbb{R}^{r\times n}  
0: 输出:Y∈RN×nY\in\mathbb{R}^{N\times n},待保存的矩阵 Z,MZ,M | 0: 为反向重建做准备。  
1: Z←XAZ\leftarrow XA | 1: 准备反向重建。  
2: M←Z†XM\leftarrow Z^{\dagger}X | 2: Z†Z^{\dagger} 实现为 (Z⊤Z+λI)−1Z⊤(Z^{\top}Z+\lambda I)^{-1}Z^{\top}  
3: ΔY←ZB\Delta Y\leftarrow ZB |   
4: Y←XW+ΔYY\leftarrow XW+\Delta Y |   
5: 保存 ZZ 和 MM,丢弃 XX |   
6: 用 YY 继续前向传播 |   
| 0: 输入:上游梯度 G=∂L/∂YG=\partial\mathcal{L}/\partial Y  
| 0: 存储:压缩激活 Z∈RN×rZ\in\mathbb{R}^{N\times r},重建矩阵 M∈Rr×mM\in\mathbb{R}^{r\times m}  
| 0: 输出:梯度 ∇~AL,∇BL,∇XL\widetilde{\nabla}_{A}\mathcal{L},\nabla_{B}\mathcal{L},\nabla_{X}\mathcal{L}  
| 1: ∇XL←G(W+AB)⊤\nabla_{X}\mathcal{L}\leftarrow G(W+AB)^{\top}  
| 2: ∇BL←Z⊤G\nabla_{B}\mathcal{L}\leftarrow Z^{\top}G (精确梯度)  
| 3: X^←ZM\widehat{X}\leftarrow ZM (激活重建)  
| 4: ∇~AL←X^⊤GB⊤\widetilde{\nabla}_{A}\mathcal{L}\leftarrow\widehat{X}^{\top}GB^{\top}  
| 5: 用优化器更新 AA 和 BB  
| 6: 用 ∇XL\nabla_{X}\mathcal{L} 继续反向传播  

### 3.1 预备知识  
考虑一个带有冻结预训练权重W∈Rm×nW\in\mathbb{R}^{m\times n}的线性层。令X∈RN×mX\in\mathbb{R}^{N\times m}为输入激活,其中NN表示当前批次中的 token 数量,例如批次大小乘以序列长度。LoRA引入两个可训练的低秩矩阵A∈Rm×rA\in\mathbb{R}^{m\times r}和B∈Rr×nB\in\mathbb{R}^{r\times n},其中r≪min(m,n,N)r\ll\min(m,n,N),适配后的线性变换为  
Y=X(W+AB).Y=X(W+AB). (1)  
按照惯例,我们省略LoRA缩放因子s=α/rs=\alpha/r以简化,因为它可以吸收到低秩因子AA和BB中而不影响后续推导。将上游梯度记为  
G=∂L∂Y∈RN×n.G=\frac{\partial\mathcal{L}}{\partial Y}\in\mathbb{R}^{N\times n}. (2)  
精确的LoRA梯度为:  
∇BL\displaystyle\nabla_{B}\mathcal{L}=A⊤X⊤G=(XA)⊤G,\displaystyle=A^{\top}X^{\top}G=(XA)^{\top}G, (3)  
∇AL\displaystyle\nabla_{A}\mathcal{L}=X⊤GB⊤,\displaystyle=X^{\top}GB^{\top}, (4)  
∇XL\displaystyle\nabla_{X}\mathcal{L}=G(W+AB)⊤.\displaystyle=G(W+AB)^{\top}. (5)  
式(3)表明,BB的梯度仅需要中间矩阵  
Z=XA∈RN×r.Z=XA\in\mathbb{R}^{N\times r}. (6)  
由于ZZ由投影下矩阵AA产生,并将激活维度从mm降至rr,它在LoRA参数化下自然充当了完整激活XX的压缩表示。相比之下,式(4)表明AA的梯度仍然依赖于完整激活X∈RN×mX\in\mathbb{R}^{N\times m}。因此,若AA和BB都可训练,标准LoRA必须在前向传播中保留XX。LoRA-FA通过冻结AA并仅更新BB来避免这种激活依赖。在这种情况下,反向传播只需存储Z=XAZ=XA而非完整激活XX。然而,投影下矩阵AA在微调过程中保持固定。CARE-LoRA保留了相同的压缩激活ZZ,但重建了更新AA所需的缺失激活信号。  

### 3.2 压缩激活重建  
CARE-LoRA旨在更新两个LoRA矩阵,同时保留压缩激活ZZ而非完整激活XX。关键挑战在于计算AA的梯度。由于∇AL=X⊤GB⊤\nabla_{A}\mathcal{L}=X^{\top}GB^{\top},直接从ZZ重建该梯度需要同时访问前向激活XX和反向梯度GG,这与我们保存激活的设置不兼容。因此,我们转而重建XX,并使用重建的激活来计算AA的梯度。由于Z=XAZ=XA已在LoRA分支中计算,我们寻求一个线性重建矩阵M∈Rr×mM\in\mathbb{R}^{r\times m},使得重建的激活近似于原始激活XX。对于固定的批次激活XX和当前

相似文章

超越LoRA:稀疏诱导的适配是否更好?

arXiv cs.LG

本文提出了对LoRA的稀疏诱导适配方法,包括廉价LoRA(cLA)和链式循环变体(c³LA),并提供了理论泛化界以及实证评估,结果显示在保持竞争性性能的同时,训练时间最多减少10%,峰值GPU内存节省最多15%。

Hybrid-LoRA:桥接全微调与低秩适应的后训练方法

arXiv cs.LG

Hybrid-LoRA提出了一种框架,选择性地对一小部分模块进行全微调,同时对其他模块使用LoRA,在显著降低计算成本的同时实现了接近全微调的性能。实验表明,与现有参数高效基线方法相比,性能提升高达5.65%。

AdaPreLoRA:Adafactor 预条件低秩适应

Hugging Face Daily Papers

AdaPreLoRA 是一种新颖的 LoRA 优化器,它利用 Adafactor 对角 Kronecker 预条件来改进因子空间更新,同时保持低内存占用,在各种大语言模型(LLM)和任务中表现出具有竞争力的性能。