跳到主要内容 LLM 微调系列:LoRA 技术综述与优化策略 | 极客日志
Python AI 算法
LLM 微调系列:LoRA 技术综述与优化策略 LoRA 是一种参数高效的微调技术,通过在密集层插入低秩矩阵减少参数量。文章综述了 LoRA 在预训练、持续训练及下游任务中的应用,涵盖打破低秩瓶颈、动态秩分配、优化学习过程等改进方案。此外还讨论了跨任务泛化、效率提升(量化、并行)、联邦学习场景下的应用,以及在语言、视觉和多模态任务中的实践案例。
lzdxwyh 发布于 2025/2/7 更新于 2026/4/20 1 浏览
前言 LoRA(Low-Rank Adaptation)是一种通过在模型的密集层中插入低秩矩阵来更新模型参数的技术。低秩矩阵(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 的性能仍存在差距。
打破低秩瓶颈 :通过堆叠 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 可能遭受过拟合的问题,导致模型在训练数据上表现良好,但在未见过的测试数据上表现差。所以需要提出一些策略来缓解过拟合的问题。
BiLoRA :BiLoRA 采用了双层优化策略,通过在不同的训练数据子集上交替训练低秩增量矩阵的奇异向量和奇异值,避免了在单一数据集上同时优化所有参数,从而缓解过拟合。
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 中插入低秩矩阵来增强模型对特定任务的适应性。而跨任务泛化允许模型在面对新任务时能够快速适应,提高了模型的实用性。通过共享和重用在不同任务上学到的知识,减少了对标注数据的需求,提高了学习效率。
手动设计的权重混合 :早期的方法尝试通过手动设计权重来线性组合不同的 LoRA 插件,以实现跨任务泛化。
学习得到的权重混合 :为了找到最优的混合权重,研究者提出了在任务级别、实例级别和词符级别学习权重的方法。
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) 联邦学习是一种分布式学习范式,允许多个参与方在保持数据本地化的同时共同训练模型。在这种设置中,数据不需要集中存储,每个参与方仅共享模型更新而不是原始数据。
在某些领域,如医疗保健和金融,数据往往是敏感的,并且分散在不同的客户端。联邦学习提供了一种在保护数据隐私的同时利用分散数据进行模型训练的方法。可以减少每个客户端的计算和通信成本。
数据异质性 :在联邦学习中,不同客户端的数据分布可能不同。研究者提出了如 SLoRA 等方法,通过数据驱动的初始化来适应每个客户端的数据分布。
设备异质性 :参与联邦学习的客户端可能具有不同的硬件能力。FedMS 等方法通过动态调整激活的 LoRA 矩阵数量来适应客户端的计算资源。
模型异质性 :客户端可能使用不同结构的本地模型。pFedLoRA 等方法使用 LoRA 作为全球和本地知识传递的载体,采用迭代训练策略来促进知识转移和整合。
参数隐私 :在联邦学习中,保护客户端特定的参数是至关重要的。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. LoRA 的应用场景(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 未来应用展望 在生成即服务(Generative-as-a-Service, GaaS)中,LoRA 可以用于构建各种功能插件,以满足用户多样化的需求。LoRA 的参数高效性和可插拔性有助于快速构建和执行这些功能。
在持续预训练中,基础模型会不断使用未标记的用户数据进行训练,以适应特定领域。LoRA 可以用于减少持续预训练的计算成本,这对于构建垂直领域的 LLMs 尤其重要。
在基于 LLM 的自主智能体中,LoRA 可以用于训练与角色相关的插件,以及作为领域特定任务的工具。此外,LoRA 还可以用于构建记忆插件,以解决检索增强生成(RAG)的局限性。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online