AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


LLM微调系列:一篇超全的Lora综述,7大秘籍
发布日期:2024-12-24 19:58:33 浏览次数: 1554 来源:CourseAI


本公众号主要关注NLP、CV、LLM、RAG、Agent等AI前言技术,免费分享业界实战案例与课程,助力您全面拥抱AIGC。



前言

LoRA是一种通过在模型的密集层中插入低秩矩阵来更新模型参数的技术。低秩矩阵(LoRA插件)可以独立于模型存储和重用,从而实现跨任务泛化。而且LoRA的参数数量显著少于全参数微调,这使得其在内存和计算需求方面具有显著优势。

1. Low-Rank Adaptation (LoRA)

1.1 Lora在实际应用中的效率优势

  • 参数效率(Parameter Efficiency):LoRA通过仅更新模型参数的一个小子集来实现参数效率,这减少了微调时所需的内存和计算需求,同时没有增加推理延迟。

  • 内存使用减少(Reduced Memory Usage):LoRA显著降低了微调大型语言模型(LLMs)时的内存使用量。这包括模型权重存储所需的内存、前向传播期间中间激活占用的内存、反向传播期间存储梯度所需的内存,以及优化器状态所需的内存。

  • 实际效率比较(Empirical Efficiency Comparison):在特定硬件配置下,使用批量大小为1的LLaMA2-7B模型进行全参数微调和LoRA微调的全面比较。研究表明,全参数微调需要大约60GB的内存,超过了单个NVIDIA RTX4090 GPU的容量;而LoRA微调仅需要大约23GB的内存。

  • 内存使用的细分(Breakdown of Memory Usage):LoRA减少了优化内存和梯度内存的显著用量,分别减少了大约25GB和14GB。虽然LoRA引入了一些额外的“增量参数”,导致激活内存和权重内存略有增加(总计约2GB),但考虑到整体内存的减少,这种增加是可以忽略不计的。

  • 前向传播加速(Forward Propagation Acceleration):减少内存使用还带来了前向传播的加速。LoRA比全参数微调快1.9倍。

  • 其他应用案例(Beyond Fine-tuning):除了微调之外,LoRA还可以应用于其他学习范式,例如预训练和持续训练。在预训练中,LoRA可以用于训练高秩网络;在持续训练中,LoRA可以解决灾难性遗忘问题。

  • 扩展上下文窗口(Extended Context Window):LoRA也被用于扩展大型语言模型的上下文窗口大小,例如LongLoRA通过结合LoRA和移位稀疏注意力,有效地将LLaMA2-7B的上下文窗口从4k扩展到100k个token。

1.2 Lora在Pre-training和Continual training阶段也非常有用

  • 预训练中的LoRA(Pre-training with LoRA):LoRA不仅可以用于微调,还可以用于预训练阶段来训练高秩网络。例如,ReLoRA和MoRA提出使用低秩更新来训练大型模型,而LTE(Low-Rank Training with Multiple Experts)提出在多个计算节点上并行训练多个低秩头部,以减少频繁同步的需求。

  • 持续训练中的LoRA(Continual Training with LoRA):在持续训练中,LoRA被用来解决灾难性遗忘问题,即模型在连续学习新任务时可能会遗忘旧任务的知识。InfLoRA通过在子空间中重新参数化预训练权重,使用一组最小参数来解决这个问题。GSLoRA使用组稀疏正则化来自动选择特定的LoRA组,以减轻灾难性遗忘的影响。I-LoRA利用双记忆体验回放和LoRA参数插值来对抗灾难性遗忘。

  • 扩展上下文窗口(Extending Context Window):LoRA也被用于解决大型语言模型的上下文大小限制问题。例如,LongLoRA通过结合LoRA和移位稀疏注意力,有效地扩展了LLaMA2-7B模型的上下文窗口,从而能够在更广泛的上下文中进行有效计算。

  • SinkLoRA:为了解决LongLoRA中存在的效率问题,SinkLoRA引入了Sink Fixed Attention(SF-Attn),通过循环移位的方式将注意力头的组回归到未移位状态,以实现适当的性能。

  • 其他应用(Other Applications):LoRA的灵活性和有效性使其在多种应用中得到使用,包括但不限于自然语言处理任务、代码任务、模型对齐任务和特定领域的任务。

2. 提升下游任务的能力(Downstream Adaptation Improving )

虽然LoRA可以在一些下游任务上实现适当的自适应性能,但与许多下游任务,诸如数学推理、编程等知识密集型任务上,与全参数微调相比,LoRA的性能仍存在差距。

因此提出了以下4种改进方案:

  • 打破低秩瓶颈:通过堆叠LoRA模块、更新作为梯度压缩器、共同更新LLM和LoRA等方法来增加LoRA的秩,从而提高其表示能力。

  • 动态秩分配:根据不同层的重要性,动态地为LoRA模块分配不同的秩,以优化模型性能和效率。

  • 优化学习过程:包括改进初始化方法、梯度更新优化、缓解过拟合等,以提高LoRA的收敛速度和泛化能力。

  • 与其他学习范式结合:将LoRA与其他学习范式(如贝叶斯学习、上下文学习、主动学习)结合,以解决特定问题并提升性能。

2.1 打破低秩瓶颈(Breaking the Low-rank Bottleneck):

LoRA通过使用低秩矩阵来更新模型参数,虽然这有助于参数效率,但同时也限制了模型在某些知识密集型任务上的表示能力。

如何解决这个问题呢?

2.1.1 Stacking LoRAs along Fine-tuning

通过堆叠多个LoRA模块来增加整体的秩,即两个矩阵相加的秩不会超过各自秩的和,可以通过在微调过程中聚合多个 LoRA 模块来增加整体的秩,从而打破低秩限制。例如:

  • ReLoRA 提出了一种合并和重新初始化 LoRA 模块的过程,定期将 LoRA 模块合并到大型语言模型(LLM)中,然后在微调过程中重新初始化这些模块。ReLoRA 的方法相当于在微调过程中沿着微调步骤堆叠多个 LoRA 模块,可以增加整体更新的秩。

  • COLA提出了基于 Frank-Wolfe 算法的另一种合并和重新初始化方法

  • MELoRA 指出合并和重新初始化过程并不一定保证秩的增加,因为微调过程中的 LoRA 模块序列可能存在重叠。为了解决这个问题,MELoRA 提出了将 LoRA 模块分解为更小的迷你 LoRA,然后并行堆叠这些迷你 LoRA。

2.1.2 Updating as Gradient Compressor

除了在参数空间中打破低秩限制外,将lora作为梯度压缩器,通过重新采样随机投影来克服LoRA在梯度空间中的低秩限制。

  • FLoRA观察到LoRA在参数更新中实际上执行了一种固定的随机投影,这种投影将梯度压缩到低秩空间。为了打破这种限制,FLoRA建议在每次迭代中重新采样这个随机投影,从而允许模型在保持参数效率的同时,能够更充分地探索参数空间,恢复全矩阵SGD的性能。

2.1.3 Co-updating LLM and LoRA:

微调过程中更新高秩的LLM,以获得比单独更新LoRA更好的表示能力。

  • Delta-LoRA提出了一种共同更新策略,它基于连续迭代中两个LoRA模块之间的差异来更新LLM。这种方法允许模型直接在高秩的LLM上进行更新,而不需要额外的内存开销。Delta-LoRA通过计算两个连续迭代的LoRA参数之间的差异,然后将这个差异应用于LLM的更新。改方法的优势在于它能够利用LoRA的参数效率特性,同时通过直接更新LLM来获得更好的性能。这种方法不仅能够提高模型在特定下游任务上的表现,还能够在不增加额外内存成本的情况下实现LLM的高效更新。

2.2 动态秩分配(Dynamic Rank Allocation):

动态秩分配是根据模型不同层的重要性来分配不同数量的秩,以此来优化性能和效率。

2.2.1 基于奇异值分解(SVD)的方法(SVD-based Methods)

根据LoRA模块的实际需要动态地分配秩,而不是为所有模块分配相同的秩,从而提高模型的适应性和效率。通过SVD分解和选择性地丢弃奇异值,可以在保持参数效率的同时,减少计算成本

  • AdaLoRA:AdaLoRA通过正则化P和Q的正交性来近似SVD分解,然后基于新的重要性评分方法丢弃不重要的奇异值。这种方法允许AdaLoRA控制BA参数矩阵的秩,并通过过滤对角矩阵Λ中的元素来分配秩。

  • SaLoRA:SaLoRA同样引入了P和Q的正交性正则化,但它基于L0范数来丢弃不重要的奇异值。这提供了一种不同的途径来控制LoRA模块的秩。

  • IncreLoRA:为了解决上述方法在效率上的问题,IncreLoRA提出了一种从单一秩开始,然后根据启发式的重要性评分自动增加秩的方法。这种方法在保持正交性正则化的同时,不需要Λ中的元素是非负的。

2.2.2 基于单一秩分解(SRD)的方法(SRD-based Methods)

将矩阵分解为单个秩分量,可以用来控制LoRA参数矩阵的秩,并动态地为不同的LoRA模块分配秩。通过省略SVD中的正交性要求,SRD方法减少了LoRA的计算成本,同时保持了参数效率。SRD方法允许根据不同任务的需求灵活地分配秩,而不是采用一种固定的秩分配策略。

  • **DoRA (Dynamic Low-Rank Adaptation)**:DoRA提出将LoRA参数矩阵BA分解为单秩分量,然后基于启发式的重要性评分来剪枝这些分量。这种方法可以根据每个客户端的资源和数据分布动态地调整LoRA的秩。

  • AutoLoRA:AutoLoRA也采用单秩分量分解,但它基于元学习(meta-learning)来剪枝分量。这种方法可以根据过去的经验和任务特性来自适应地调整秩分配。

  • SoRA:SoRA消除了SVD中的正交性正则化要求,直接通过控制对角矩阵(可以看作单秩分量)来过滤P和Q的列和行。SoRA通过将对角矩阵设置为一组可学习的门控单元来实现秩的控制,这些门控单元在微调过程中更新。

  • ALoRA:ALoRA同样通过使用门控单元来过滤分量,但它基于神经架构搜索(Neural Architecture Search,NAS)来学习这些门控单元。

2.2.3 基于秩采样的方法(Rank Sampling-based Methods)

确定每个模块的秩是一个关键问题,基于SVD或SRD的方法需要通过迭代或正交性约束来确定秩,这可能带来额外的计算负担。秩抽样方法避免了额外的秩搜索计算成本,使得秩分配过程更加高效。通过随机抽样可以灵活地适应不同的训练条件和任务需求,并且抽样过程简单直观,易于实现和集成到现有的LoRA框架中。

  • DyLoRA:DyLoRA是文中提到的一个基于秩抽样的方法。它通过从预定义的离散分布中随机采样一个值b,并将b作为秩来分配给LoRA模块。在微调过程中,只有A矩阵的第b行和B矩阵的第b列是可训练的,而其他参数则被冻结。这种方法可以根据用户的偏好来定义抽样分布。

2.3 优化学习过程(Optimizing the Learning Procedure):

为了提高LoRA的收敛速度和减少对超参数的敏感性。这方面的改进包括:初始化方法的改进以加速收敛;优化梯度更新以提高训练的稳定性和可靠性;减少过拟合现象。

2.3.1 初始化改进(Initialization Improvement)

在LoRA中,参数矩阵A和B的初始化通常使用高斯噪声和零,但这种方法可能导致初始梯度较小,从而减慢学习过程。如果这些低秩矩阵的初始化不当,可能会导致微调过程效率低下,甚至影响模型的下游任务适应性。

通过与预训练权重矩阵的重要方向对齐,改进的初始化方法可以加速LoRA的收敛速度。好的初始化有助于在微调过程中保持模型的稳定性和性能,尤其是在处理新任务时

  • PiSSA:PiSSA(Principal Singular Values and Singular Vectors Adaptation)是一种初始化方法,它使用预训练权重矩阵的主奇异值和奇异向量来初始化LoRA的参数。这种方法利用了矩阵中最重要的方向来加速收敛并提高性能。

  • MiLoRA:MiLoRA(Minor Singular Components Adaptation)与PiSSA相反,它使用次要的奇异值和奇异向量进行初始化。这种方法减少了低秩矩阵随机初始化可能对预训练模型中学习到的重要特征的干扰,从而在适应新任务时提高了整体性能。

2.3.2 梯度更新优化(Gradient Update Optimization)

LoRA的参数更新可能面临收敛速度慢和对超参数敏感的问题,这会影响模型在下游任务上的适应性。通过优化梯度更新可以加快LoRA的收敛速度,使其更接近全参数微调的性能。特别是在处理复杂任务时,改进的梯度更新有助于提高模型在下游任务上的性能,通过引入预条件或残差连接,减少了对超参数选择的敏感性。

  • Riemannian Preconditioned LoRA:该方法基于黎曼优化,引入了一个r×r的预条件项到梯度更新步骤中,以改善LoRA的收敛性和超参数的鲁棒性。

  • **LoRA+**:通过理论分析,LoRA+发现为矩阵A和B设置成比例的学习率对于实现稳定的特征学习和加速收敛是必要的。

  • ResLoRA:ResLoRA在LoRA中引入了残差连接,优化了梯度传播路径,加快了训练收敛,并提高了模型性能。

  • SIBO(Sparse Initialization Boosting Optimization):通过在LoRA的输入中注入初始标记表示的残差连接,缓解了过平滑问题。

  • Gradient-Free Optimization:一些研究采用了无梯度优化方法,如CMA-ES和FWA,优化LoRA,在少次学习NLU任务中展示了竞争性能。

  • DoRA(Weight-Decomposed Low-Rank Adaptation):DoRA通过约束梯度更新,专注于参数的方向变化,将预训练权重分解为方向和大小两个部分,并且只对方向部分应用LoRA,以增强训练稳定性。

2.3.3 过拟合缓解(Overfitting Mitigation)

LoRA可能遭受过拟合的问题,导致模型在训练数据上表现良好,但在未见过的测试数据上表现差。所以需要提出一些策略来缓解过拟合的问题。

  1. BiLoRA:BiLoRA采用了双层优化策略,通过在不同的训练数据子集上交替训练低秩增量矩阵的奇异向量和奇异值,避免了在单一数据集上同时优化所有参数,从而缓解过拟合。

  2. LoRA Dropout:一些方法将dropout技术应用于LoRA参数,以减少过拟合。例如,对LoRA参数应用dropout或对注意力层采用列dropout,对前馈层采用元素级dropout。

2.4 与其他学习范式结合(Combining with other Learning Paradigms):

LoRA可以与贝叶斯学习、上下文学习和主动学习等其他学习范式结合,以解决特定问题并提升下游任务的适应性。

  • 与贝叶斯学习结合:例如,Laplace-LoRA利用贝叶斯方法来减轻下游适应中的过度自信现象,通过引入概率性来改善模型的不确定性估计。

  • 与上下文学习结合:PILLOW(Prompt-based Instructed Learning with Low-rank Adaptation)旨在解决某些下游任务中存在的低资源问题,通过上下文提示来提高模型对指令的响应能力。

  • 与主动学习结合:STAR(Sparsity-driven Active Learning with Relevance feedback)通过主动学习来提高数据效率,利用LoRA的稀疏性来选择最有信息量的样本进行标注和学习。

3. 跨任务学习(Cross-task Generalization)

LoRA作为一种参数高效的微调方法,可以通过在LLMs中插入低秩矩阵来增强模型对特定任务的适应性。而跨任务泛化允许模型在面对新任务时能够快速适应,提高了模型的实用性.通过共享和重用在不同任务上学到的知识,减少了对标注数据的需求,提高了学习效率。

主要有以下三种跨任务泛化的方法方法:

  1. 手动设计的权重混合:早期的方法尝试通过手动设计权重来线性组合不同的LoRA插件,以实现跨任务泛化。

  2. 学习得到的权重混合:为了找到最优的混合权重,研究者提出了在任务级别、实例级别和词符级别学习权重的方法。

  3. LoRA专家的混合:当LoRA插件是可训练的,可以联合学习混合权重和LoRA插件,这可以通过LoRA专家混合(LoRA MoE)框架实现,其中每个LoRA插件作为一个专家,路由网络分配混合权重。

3.1 手动设计权重的混合(Mixture with Manually Designed Weights)

不同任务可以训练不同的lora,通过混合它们来实现在不同任务间的知识和技能迁移。

尽管手动设计权重的方法具有简单和计算效率高的优点,但它可能无法找到最优的权重组合,导致性能不稳定和泛化能力受限。因此,在使用该方案时需谨慎些。具体的方法有:

  • 线性组合:一些研究尝试通过简单的平均或者加权平均的方式来混合不同任务的LoRA插件,其中权重是手动设计的。

  • 超参数调整:例如,ControlPE等方法将权重作为超参数,并通过超参数搜索来确定最佳的LoRA插件组合。

  • 特征相似度权重:Token-level Adaptation等方法使用输入特征与适配器数据集中心之间的余弦相似度作为权重。

  • 模型融合方法:BYOM等方法应用基本的模型融合技术,如任务算术、Fisher合并和RegMean等。

3.2 学习得到的权重混合(Mixture with Learnt Weights)

手动设计的权重虽然简单,但可能无法达到最优的跨任务泛化效果。自动学习混合权重可以为LoRA插件的组合提供更精确和适应性强的方法。具体的方案有:

  • 任务级别学习:在任务级别,方法如Asadi等提出基于梯度的学习权重方法,而LoRAHub等使用黑盒优化算法(如CMA-ES)来优化权重因子,简化训练过程。

  • 实例级别和词符级别学习:为了处理复杂的输入,MixLoRA等方法根据输入实例动态选择适当的低秩分解向量,然后在训练中将它们整合到LoRA矩阵中。X-LoRA等方法为蛋白质力学分析和设计任务开发了动态门控机制,以在词符级别和层粒度上为LoRA插件分配权重。

3.3 LoRA专家的混合(Mixture of LoRA Experts)

在多任务学习和持续学习等场景中,需要模型能够同时处理多种不同的任务。LoRA专家的混合提供了一种机制,允许模型利用在不同任务上学到的知识,通过专家系统的方式进行有效的集成和泛化。

尽管LoRA专家的混合提供了强大的模型集成能力,但设计有效的路由网络和平衡不同专家的贡献可能具有挑战性,并且可能需要额外的调整和训练。

  • LoRA MoE(Mixture of Experts):在这种框架下,每个LoRA插件被视为一个专家,负责处理模型的一部分输入。一个中心路由网络负责根据输入数据的重要性动态分配权重,决定每个专家的参与程度。

  • 初始化方法:如Mixture-of-LoRAs方法首先独立地训练多个LoRA插件作为初始化,然后联合优化路由器和LoRA插件。

  • 任务关系管理:MLore等方法通过在MoE结构中添加低秩卷积路径来捕获全局任务关系,以改善任务间的平衡。

  • 效率优化:MoLA等方法通过在Transformer模型的不同层中分配不同数量的LoRA专家来节省LoRA模块的数量。LLaVA-MoLE和SiRA利用稀疏计算减少计算成本。

4 提升效率(Efficiency Improving )

随着下游任务越来越多,lora插件的数量也会随之增加,要进一步提高其效率成为了一个关键问题。因此,可以从以下三个方面来改进:

  • 参数缩减(Parameter Reduction):通过参数冻结(Parameter Freezing)、参数剪枝(Parameter Pruning)和参数共享(Parameter Sharing)来减少LoRA的可训练参数数量,降低内存成本。

  • 参数量化(Parameter Quantization):通过减少参数的位宽(例如,从32位浮点数量化到4位整数),来降低LoRA的内存和计算成本。这包括后训练量化(Post-Training Quantization, PTQ)和量化感知训练(Quantization-Aware Training, QAT)方法。

  • 并行LoRA计算框架(Parallel LoRA Computing Frameworks):通过在单个GPU或GPU集群上并行微调或推理多个LoRA插件,节省计算资源并提高LoRA的效率。这包括并行微调(Parallel Fine-tuning)和并行推理(Parallel Inference)框架。

4.1 参数缩减(Parameter Reduction)

通过缩减参数数量,减少了模型在微调期间的内存占用。减少了需要更新的参数数量,从而加快了训练和推理的速度。

4.1.1 参数冻结(Parameter Freezing)

通过在微调过程中冻结一部分LoRA参数,只更新其余的参数。

  • LoRA-SP:随机选择一半的LoRA参数进行冻结,只更新剩余的参数。

  • LoRA-FA:冻结下投影权重,只更新每个LoRA层的上投影权重。

  • AFLoRA:构建一个低秩可训练路径,并在训练LoRA时逐步冻结参数。

  • DropBP:通过在反向传播过程中随机丢弃一些LoRA梯度计算来加速训练过程

4.1.2 参数剪枝(Parameter Pruning)

在训练和推理过程中,通过评估参数的重要性来移除不重要的LoRA参数。

  • LoRA-drop:使用每层LoRA的输出来评估参数的重要性,并剪枝那些不重要的参数。

  • LoRA-prune:基于LoRA的梯度信息,联合剪枝LoRA矩阵和大型语言模型(LLM)的参数,以优化模型结构。

  • LoRA-shear:通过剪枝特定的参数来调整模型的剪枝粒度,实现更细粒度的优化。

4.1.3 参数共享(Parameter Sharing):

通过在不同的层或模块之间共享参数来减少参数总数。

  • VeRA:VeRA(Vector-based Random Matrix Adaptation)提出在所有层之间共享一对冻结的随机矩阵,并通过“缩放向量”进行逐层适应。

  • VB-LoRA:VB-LoRA(Vector Bank-based LoRA)提出了一种“分割和共享”范式,通过秩一分解将LoRA的低秩分解进行分割,并基于混合模型实现全局共享。

4.2 参数量化(Parameter Quantization)

大型语言模型(LLMs)通常需要大量的计算资源,部署到资源受限的环境中时,参数量化通过减少参数的精度,使得模型可以用更少的比特来表示,从而减少内存占用和计算复杂性。

4.2.1 后训练量化(Post-Training Quantization, PTQ)

在模型训练完成后对模型的权重和偏差等参数进行量化处理。通过减少参数的位宽来降低模型的内存占用,使得模型更小,更易于部署,复杂性降低了加速模型的推理速度。

具体实施方法如下:

  • 量化过程:在训练完成后,模型的参数被量化为较低位宽的表示,例如从32位浮点数量化到8位或4位整数。

  • 微调量化模型:量化后的模型可能会有性能损失,因此通常需要在量化后的模型上进行微调,以恢复由于量化导致的性能下降。

  • QLoRA:作为PTQ的一个例子,QLoRA方法首先将大型语言模型(LLM)量化到4位,然后在量化的模型上微调LoRA插件,使用更高的精度(如BFloat16或Float16)。

4.2.2 量化感知训练方法(QAT-based methods)

PTQ后训练量化会引入误差,影响模型的精度。量化感知在模型的微调阶段就引入量化操作,允许模型在学习过程中适应量化带来的变化。通过在训练中逐步应用量化,QAT方法可以减少量化误差的累积,提高量化模型的性能,从而减少部署后的精度损失。使模型对于量化带来的噪声和变化更加鲁棒。具体方法有:

  • LoftQ:LoftQ方法在微调过程中交替应用量化和低秩近似,以减少量化误差。
  • ApiQ:ApiQ方法提出了激活保留初始化,以避免层间误差传播,提高量化模型的性能。
  • L4Q:L4Q方法采用了先进的层设计,以实现在量化环境下的参数效率和性能。

4.3 并行LoRA计算框架(Parallel LoRA Computing Frameworks)

通过在多个处理器或GPU上同时执行多个任务来提高效率。这对于多租户环境或需要同时处理多个模型的场景非常有用。

4.3.1 并行微调(Parallel Fine-tuning)

并行微调可以同时处理多个微调任务,提高了计算资源的利用率。在较短的时间内完成更多的微调任务。

  • BatchFusion:这是一种将多个输入批次融合为单个批次的技术,使得多个微调任务可以共享计算资源,如在单个GPU上并行处理。

  • 自适应作业调度算法:这种算法可以根据系统的实时负载和资源可用性动态地分配计算资源给不同的微调任务。

  • ASPEN:这是一个提出的高吞吐量并行微调框架,它结合了BatchFusion方法和自适应作业调度算法,以实现在单个GPU上高效地并行微调多个LoRA插件。

4.3.2 并行推理(Parallel Inference)

通过在多个处理器或计算设备上同时执行多个推理任务来提高模型推理速度的技术。可以显著减少模型推理的响应时间,可以同时为更多的用户提供服务,提高了系统的服务能力。

  • Punica:Punica是一个并行推理框架,它使用新的CUDA内核设计来批处理不同LoRA插件的GPU操作,从而提高推理效率。

  • S-LoRA:基于Punica,S-LoRA进一步优化了并行推理框架,通过引入统一的分页机制和新的张量并行策略,能够支持数千个并发LoRA插件的服务。

  • CARASERVE:在Punica和S-LoRA的基础上,CARASERVE通过CPU-GPU协同工作和基于秩的调度进一步减少了冷启动开销,并提高了服务效率和服务质量目标(SLO)的达成率。

5 LoRA在联邦学习中的应用(LoRA for Federated Learning)

联邦学习是一种分布式学习范式,允许多个参与方在保持数据本地化的同时共同训练模型。在这种设置中,数据不需要集中存储,每个参与方仅共享模型更新而不是原始数据。

在某些领域,如医疗保健和金融,数据往往是敏感的,并且分散在不同的客户端。联邦学习提供了一种在保护数据隐私的同时利用分散数据进行模型训练的方法。可以减少每个客户端的计算和通信成本。

lora在联邦学习中的应用如下:

  1. 数据异质性:在联邦学习中,不同客户端的数据分布可能不同。研究者提出了如SLoRA等方法,通过数据驱动的初始化来适应每个客户端的数据分布。

  2. 设备异质性:参与联邦学习的客户端可能具有不同的硬件能力。FedMS等方法通过动态调整激活的LoRA矩阵数量来适应客户端的计算资源。

  3. 模型异质性:客户端可能使用不同结构的本地模型。pFedLoRA等方法使用LoRA作为全球和本地知识传递的载体,采用迭代训练策略来促进知识转移和整合。

  4. 参数隐私:在联邦学习中,保护客户端特定的参数是至关重要的。PrivateLoRA等方法通过在客户端存储可训练矩阵来确保参数隐私。

5.1 数据异质性(Data Heterogeneity)

在联邦学习场景中,不同的客户端可能收集到的数据在特征、类别分布等方面存在显著差异。这种数据分布的不一致性可能导致模型在某些客户端上表现出色,而在其他客户端上性能不佳,从而影响模型的泛化能力。

通过适应不同客户端的数据特性,LoRA的初始化和更新策略有助于减少数据异质性对联邦学习过程的负面影响,提升模型在多样化数据上的泛化能力。

应对数据异质化的方法有:

  • SLoRA:提出了一种数据驱动的初始化方法,首先在稀疏联邦微调的基础上应用LoRA,然后通过奇异值分解(SVD)将累积的梯度更新分解为低秩矩阵,用于LoRA初始化。目的是使LoRA模块更好地适应每个客户端的数据分布,更有效地整合异质数据特征到全局模型中。

  • FeDeRA:采用了一种更简单的初始化方法,直接对预训练权重应用SVD进行LoRA初始化。保留预训练权重的主成分,以在不同客户端间对齐权重更新的方向和大小,从而处理数据异质性问题。

  • FFA-LoRA:通过冻结一个低秩矩阵,并仅微调另一个,减少了服务器聚合LoRA梯度时的不一致性,缓解了由非独立同分布(non-IID)数据引起的优化不稳定性。

5.2 设备异构性(Device Heterogeneity)

设备异构性指的是参与联邦学习的不同客户端在硬件性能和网络连接能力上的差异。这些差异可能会影响联邦学习系统的整体性能。

传统方法通常假设所有客户端的硬件能力相同,但实际上,客户端的硬件能力可能有很大差异。这会导致系统的整体性能受限于能力最弱的客户端,即“桶效应”。

可以通过动态调整和参数共享,减少每个客户端的计算成本和通信成本来提高联邦学习的整体效率和可扩展性,使其能够在联邦学习系统中实现参数隐私保护,这对于保护客户端特定的参数至关重要。

动态参数分配策略有:

  • FedMS:根据客户端的实际计算资源动态调整激活的LoRA矩阵数量。
  • FlexLoRA:根据资源限制调整LoRA的秩,并重新分配全局LoRA权重的奇异值分解(SVD)组件。
  • HETLORA:为不同客户端分配不同的秩,并根据来自不同客户端的更新的稀疏性进行加权聚合,以更好地平衡更新信息。

5.3 模型异构性(Model Heterogeneity)

模型异构性指的是在联邦学习中,不同客户端可能使用具有不同架构的本地模型。由于个人需求的差异,客户端可能偏好独特的模型结构,并且通常不希望公开其模型细节。

以往的工作通过知识蒸馏、模型集成和互学习等方法来解决模型异构性问题。但这些方法存在局限性,例如依赖公共数据集、增加通信成本和本地模型性能不佳等。

pFedLoRA是一种为解决模型异构性而提出的方法。它使用LoRA作为全球知识与本地知识的载体,采用迭代训练策略,促进知识转移和整合,实现不同客户端之间异构模型的知识共享。允许在保持模型结构私密性的同时,进行有效的知识转移和整合。

5.4 参数隐私(Parameter Privacy)

在联邦学习中,保护客户端特定的参数是至关重要的,因为这些参数可能包含敏感信息。确保参数的隐私可以间接保护客户端数据的隐私。有两种保护措施:

  • 将LoRA部署在可信执行环境(TEE)中,并使用一次性密码(OTP)加密在GPU和TEE之间传输特征,以保护模型参数的隐私。

  • PrivateLoRA引入了一个基于LoRA的分布式系统。它在低秩矩阵A和B之间添加了一个方阵M。非可训练的矩阵A和B以及大部分预训练权重部署在全局服务器上以增强计算能力,而可训练的矩阵M作为个性化参数存储在客户端上,从而确保参数隐私保护。

6 Applications of LoRA

LoRA因其参数高效、可插拔、兼容性强以及易于实现跨任务泛化等特性,在深度学习领域,特别是在大型预训练模型的微调中,得到了广泛应用。

6.1 语言任务中的应用:

LoRA被用于微调预训练语言模型,以适应特定的下游任务,如情感识别、文本分类、角色识别等。这包括对传统NLP任务、代码任务、模型对齐任务和垂直领域任务的微调。

6.1.1 代码任务(Code Tasks)

将LoRA应用于代码生成和理解任务,如使用LoRA微调CodeT5和PLBART模型,以提高它们在代码摘要和代码克隆检测任务中的适应性。

  • 在自动化程序修复(APR)领域,LoRA被用于微调特定的模型,如RepairLLaMA,以提高修复代码缺陷的能力。

  • WizardCoder-15B和SteloCoder等模型利用LoRA进行微调,以实现从自然语言到SQL或Python等特定编程语言的代码翻译

6.1.2 模型对齐任务(Model Alignment Tasks)

使其行为和输出与人类的价值观、意图和偏好相一致。这通常涉及到使用如人类反馈强化学习(Reinforcement Learning from Human Feedback, RLHF)等技术。

LoRA技术被用于微调奖励模型和策略模型,以减少RLHF的内存需求。通过微调这些模型,可以更好地反映人类的行为和偏好。

  • DMoERM结合了混合专家(MoE)和LoRA,将模型输入路由到多个LoRA专家中,以增强奖励模型的性能。

  • 使用Laplace-LoRA来训练贝叶斯奖励模型,这有助于缓解在最佳n采样中奖励过度优化的问题。

6.1.3 垂直领域任务(Vertical Domain Tasks)

  • 医疗领域:一些研究利用LoRA对大型语言模型进行微调,以适应医疗领域的特定需求。例如,通过微调模型来处理医疗对话摘要、断言检测和医疗问答任务。
  • 金融领域:LoRA也被应用于金融领域的任务,如金融新闻分析和情感分类。通过微调,模型能够更好地理解和处理金融领域的文本数据。

6.2 视觉任务中的应用:

在计算机视觉领域,LoRA主要被应用于图像生成和图像分割任务,显著提高了训练效率并优化了模型性能。例如,在图像风格迁移、文本到图像生成、以及医学图像分割等任务中应用LoRA。

6.2.1 图像生成(Image Generation)

  • Smooth Diffusion:使用LoRA在潜在空间中实现平滑性,从而在各种图像生成和编辑任务中获得更好的性能。

  • ResAdapter:利用LoRA学习分辨率先验,调整卷积层的感受野以适应动态分辨率。

  • STAMINA:使用LoRA微调扩散模型,以处理更长的概念序列,从而提高文本到图像生成的质量。

  • DreamSync 和 StyleAdapter:使用LoRA提高文本保真度和图像质量。

  • Mixof-Show:利用LoRA权重捕捉领域外信息,以高保真度结合多个定制化概念,减少概念冲突。

6.2.2 图像分割(Image Segmentation)

将图像划分为多个有意义的区域或对象。SAM(Segment Anything Model)作为图像分割的基础模型,展示了优越的泛化能力。许多研究利用LoRA对SAM进行微调,以提高其在特定垂直领域的性能。

  • SamLP:在车牌检测中使用LoRA对SAM进行微调,以实现高效的车牌分割。
  • 结构损伤检测:使用LoRA微调SAM的编码器,进行实例分割任务。
  • 医疗领域:许多研究将LoRA应用于SAM的微调,用于细胞核分割、OCTA图像分割、脑肿瘤分割、器官分割和手术器械分割等任务。

6.3 多模态任务中的应用(Multimodal Tasks)

多模态大型语言模型(MLLMs)的目标,旨在整合文本与音频、图像和视频等多种模态,通过统一的嵌入空间实现跨模态理解和推理。

  • 音频-文本任务:在音频-文本任务中,LoRA被用来增强模型对语音输入和相关任务指令的处理能力。例如,SALM(Speech-Augmented Language Model)模型结合了LoRA层、冻结的基于文本的LLM、音频编码器和模态适配器来处理语音输入。
  • 图像-文本任务:在图像-文本任务中,LoRA被应用于图像标记,以实现模态对齐。InternLM-XComposer2通过应用LoRA到图像标记,实现了自由形式的文本-图像组合和理解。mPLUG-Owl模型冻结了视觉模块,同时联合微调LoRA和文本模块的抽象器。CoLLaVO模型使用QLoRA(量化LoRA)来保留对象级图像理解。
  • 视频-文本任务:在视频-文本任务中,VSP-LLM框架使用LoRA微调文本模块,以进行视觉语音处理。MolCA模型使用LoRA来理解2D分子图和文本。TPLLM模型利用LoRA进行高效的交通预测,通过整合序列和空间特征。

7 lora在未来可能的应用

  • GaaS中的LoRA:

    在生成即服务(Generative-as-a-Service, GaaS)中,LoRA可以用于构建各种功能插件,以满足用户多样化的需求。LoRA的参数高效性和可插拔性有助于快速构建和执行这些功能。

  • 持续预训练中的LoRA:

    在持续预训练中,基础模型会不断使用未标记的用户数据进行训练,以适应特定领域。LoRA可以用于减少持续预训练的计算成本,这对于构建垂直领域的LLMs尤其重要。

  • 自主智能体中的LoRA:

    在基于LLM的自主智能体中,LoRA可以用于训练与角色相关的插件,以及作为领域特定任务的工具。此外,LoRA还可以用于构建记忆插件,以解决检索增强生成(RAG)的局限性。

https://arxiv.org/pdf/2407.11046



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询