基于LoRA构建稀疏混合专家模型(MoE)的方法(MixLoRA)-探析(微调)
介绍
MixLoRA
是一种用于优化大规模语言模型(LLMs
)微调的新方法,结合了LoRA
(Low-Rank Adaptation
)和专家混合(Mixture of Experts, MoE
)技术。大规模语言模型的微调通常需要大量的计算资源和显存。LoRA
通过引入低秩适配器,显著减少了微调时的参数数量和显存需求。然而,LoRA
在多任务学习场景中的性能仍有提升空间。专家混合模型(MoE
)在多任务学习中表现出色,但其资源需求对普通消费者级GPU
来说是一个挑战。
主要特点:
- 架构设计:1.
MixLoRA
在冻结的预训练密集模型的前馈网络块中插入多个LoRA
专家模块;2.使用常见的top-k
路由器(如Mixtral
)或top-1
开关路由器(如Switch Transformers
)来动态选择合适的专家。 - 性能提升:1.
MixLoRA
在多任务学习场景下的准确率比现有的参数高效微调(PEFT
)方法提高了约9%
;2.通过独立的注意力层LoRA
适配器增强模型性能。 - 资源效率:1.引入辅助负载平衡损失来解决路由器的不平衡问题;2.新的高吞吐框架在训练和推理过程中减少了
40%
的GPU
显存消耗和30%
的计算延迟。
大型语言模型(LLM
)的指令微调已在自然语言处理(NLP
)领域中取得了很好的成绩。随着参数规模的增加,LLM
已被证明能够识别复杂的语言模式,从而实现强大的跨任务泛化能力。然而指令微调将会使其在计算资源和下游任务的性能之间做出权衡。为了减少全参数微调过程所需的计算和内存资源,引入了参数高效微调(PEFT
)方法,其中,低秩自适应是流行的PEFT
方法中的一种。MixLoRA
通过结合LoRA
和专家混合技术,提供了一种高效的微调大规模语言模型的方法,显著提升了多任务学习的性能,同时大幅减少了计算资源和显存的需求。
PEFT
,大型语言模型(LLM
)在NLP
任务中表现出了卓越的能力。在此之后,指令微调进一步使LLM
能够理解人类意图并遵循指令,成为聊天系统的基础。但是,随着LLM规模的扩大,对其进行微调成为一个耗时且占用大量内存的过程。为了缓解这个问题,研究探索了不同的方法:参数高效微调(PEFT
)、蒸馏、量化、修剪等。LoRA
利用低秩矩阵分解线性层权重,是最流行的PEFT
方法之一,不仅提高了模型性能,而且不会在推理过程中引入任何额外的计算开销。例如,VeRA
结合可学习的缩放向量来调整跨层的共享冻结随机矩阵对。此外,FedPara
专注于联邦学习场景的低秩Hadamard
积。Tied-Lora
实现了权重绑定以进一步减少可训练参数的数量。AdaLoRA
使用奇异值分解(SVD
)来分解矩阵并且修剪不太重要的奇异值以简化更新。DoRA
将预训练权重分解为两个分量,即幅度和方向,并在微调期间利用LoRA
进行方向更新,从而有效减少可训练参数的数量。
专家混合:专家混合(MoE
)的概念可以追溯到1991
年,它引入了一种新颖的监督学习方法,涉及多个网络(专家),每个网络专门处理一组训练示例。MoE
的现代版本通过合并稀疏激活的专家来修改Transformer
块内的前馈子层,从而能够在不增加计算量的情况下大幅增加模型宽度。LLaVA-MoLE
有效地将token
路由到Transformer
层内的特定领域专家,从而缓解数据冲突并实现与普通LoRA
基线一致的性能提升。对于其他基于MoE
的架构,MoRAL
解决了将LLM
适应新领域/任务的挑战。LoRAMoE
使用路由器网络集成LoRA
,以缓解知识遗忘。PESC
使用MoE
架构将密集模型转换为稀疏模型,从而降低了计算成本和GPU
内存要求。MoE-LoRA
提出了一种新颖的参数高效的MoE
方法,该方法具有分层专家分配(MoLA
),适用于Transformer
的模型。MoCLE
可根据指令集群激活定制任务的模型参数。MixLoRA
将LoRA
作为随机专家进行集成,从而降低了计算成本,同时扩展了模型容量并增强了LLM
的泛化能力。
MixLoRA架构
LoRA
仅调整额外的自适应参数并替换原始权重更新。LoRA
块由两个矩阵组成,LLM
预训练权重LoRA
的隐藏维度,其中
混合专家(MoE
)。MoE
架构最初通过GShard
引入到语言模型中。MoE
层由n
个专家组成,表示为MoE
层输出
其中,MixLoRA
由两个主要部分构成。第一部分添加了LoRA
的vanilla Transformer
块构建稀疏MoE
块。第二部分利用top-k
路由器将来自各种任务(例如ARC、OBQA、PIQA
等)的每个token
分配给不同的专家模块。假设输入文本为LLM
)层的第token
的输出隐藏状态,其中LLM
层的总数,MSA
)和前馈神经网络(FFN
)组成。每个块内都应用了层归一化(LN
)和残差连接。普通transformers
块中第
MixLoRA Forward
。MixLoRA
基于LoRA
专家构建的。MixLoRA
利用LoRA
在微调期间存储每个专家的更新参数,而不是仅使用LoRA
来构建每个专家。这种方法使MixLoRA
与现有的预训练MoE
模型更加一致。在MixLoRA
的MoE
块中,这些专家的基本权重由密集模型的单个前馈网络(FFN
)共享,以提高训练和推理效率:
其中FFN
层的预训练权重,由token
和任务选择特定LoRA
专家的Top-K
路由器,MixLoRA
模块中的第k
个LoRA
专家。MixLoRA
的作用是取代公式中密集模型的FFN
层,其关键概念是通过路由器为每个token
选择不同的专家,其中每个专家由不同的LoRA
和原始FFN
层组成。
Top-K
路由器。MoE
层中的Top-K
路由器将每个token
分配给最合适的专家。路由器是一个线性层,它计算输入token
token
激活最合适的LoRA
专家。它利用softmax
激活函数来模拟专家的概率分布。路由器的权重top-2
门控路由器,它为每个输入token
在推理过程中,top-k
门控路由器会动态地为每个token
选择最佳的k
个专家。通过这种机制,混合专家和路由器协同工作,使专家能够开发不同的能力并有效地处理不同类型的任务。专家负载平衡。专家负载不平衡是MoE
面临的重大挑战。这是因为某些专家往往会更频繁地被top-k
路由器选择。为了解决这种负载不平衡问题,我们在训练时应用负载平衡损失来减轻专家的负载不平衡。受Switch Transformers
的启发,计算辅助损失并将其添加到总损失中。给定i = 1
到N
)和具有T
个token
的批次B
,辅助损失计算如下:
其中token
分数,LoRA
。MixLoRA
进一步扩展了其微调功能以涵盖注意力层。先前的研究,例如ST-MoE
,表明微调注意力层可以显着提高性能。为了增强MixLoRA
的微调过程,将LoRA
适配器集成到密集模型的注意力层中。实验结果表明,经过q、k、v
和o
投影微调的MixLoRA
模型与仅使用稀疏的LoRA
专家混合层(即MixLoRA MoE
)训练的配置相比,始终能够获得更高的平均分数。
性能优化
- 降低计算复杂度。
MixLoRA
中的每个专家网络包括一个共享的冻结FFN
和多个LoRA
,用于在微调期间存储专家的每个线性投影层更新参数。此设置导致计算复杂度根据路由器的K
设置而变化。这是因为MixLoRA
中的token
级Top-K
路由器将每个token
发送给K
个专家进行计算,然后聚合他们的残差并产生输出。以LLaMA
为例,LLaMA
的FFN
块由三个线性投影权重组成: 和 ,前向传播过程可以表示为 。如图 3 (a) 所示,MixLoRA
中的每个专家都有相同的前向传播过程,只是每个线性投影层都有一个单独的 LoRA,并且每个专家的输入 x 由MixLoRA
路由器预先分配。这在处理长序列输入时会带来显著的开销,对MixLoRA
的性能优化提出了重大挑战:如何在保持模型精度的同时降低MixLoRA
的计算复杂度?考虑到我们已经共享了 FFN 块的权重,我们进一步共享计算结果以降低计算复杂度。如上图所示,方法不是预先分配MixLoRA
块的输入序列,而是首先将输入直接并行发送到FFN
块的 和 ,然后根据MixLoRA
路由器输出的路由权重对这些线性投影的输出进行切片。 投影的计算复杂度无法降低,因为其计算过程取决于 和 投影的输出。这种方法显著降低了MixLoRA
计算复杂度的三分之一。MoE
块。在实验中,这种方法保持相同的模型性能的情况下token
计算延迟比vanilla MixLoRA
大约低30%
。 - 优化多
MixLoRA
训练和推理。受m-LoRA
提出的多LoRA
优化的启发,我们还优化了MixLoRA
以实现多模型高吞吐量训练和推理。之前,我们通过消除重复计算来降低MixLoRA
的计算复杂度。当使用两个或更多MixLoRA
模型进行训练和推理时,这些模型的多任务输入被打包成一个批次,以提高训练吞吐量。具体来说,我们首先将批处理输入并行发送到 和 ,然后使用MixLoRA
模型的单独路由权重对这些线性投影的输出进行切片。这种方法通过共享相同的预训练模型权重,显着减少了多个MixLoRA
模型的内存使用量。这种方法保持了相同的性能的情况下对每个模型的峰值GPU
内存使用量减少了约45%
。
结论
这里介绍了MixLoRA
,这是一种使用多个LoRA
的专家和一个冻结的共享FFN
块的MoE
方法。与传统的LoRA-MoE
方法不同,MixLoRA
将多个LoRA
与共享FFN
层融合,并在微调期间使用它们为每个专家存储更新的参数,使其与预先训练的MoE
模型更加一致。它还采用了自注意力LoRA
适配器和辅助负载平衡损失来提高性能并解决路由器不平衡问题。此外,还设计了一个高性能框架来优化MixLoRA
中多个LoRA
的专家的计算过程,以进行训练和推理。因此,该框架将MixLoRA
的计算复杂度降低了30%
,并在训练或推理多个MixLoRA
模型时节省了大约40%
的GPU
内存使用量。评估表明,MixLoRA
在单任务和多任务场景中的表现优于基线。对于单任务学习,MixLoRA
在LLaMA-2 7B
上的平均准确率比LoRA
提高了6.2%
,比DoRA
提高了2.6%
。在多任务学习中,MixLoRA
的准确率明显优于LoRA 9.8%
,优于DoRA 9%
。