【云驻共创】异思MindSpore技术公开课 大模型专题(第二期)第十讲MoE
Vanilla MoE(Mixture of Experts)
Vanilla MoE(Mixture of Experts) Export Network是一个典型的集成学习模型,它利用多个“专家”(即子模型或组件)来共同处理一个任务。每个专家都有其独特的优势,适用于不同的数据子集。而Gating Network的作用是根据输入样本的特征来动态地决定每个专家的输出权重,这样模型就根据输入的特点来选择最合适的专家组合。
原始的Vanilla MoE的损失函数设计是将所有专家的输出按照Gating Network分配的权重进行加权求和,然后与真实的标签(Ground truth)计算损失。这种设计确实能够利用多个专家的知识,但同时也存在一个问题:不同专家之间可能会相互影响,因为他们的输出是共同参与到损失函数的计算中的。
Jacobs, Robert A. 等人提出的改进方案是将损失函数改造为单独计算每个专家的损失,并将Gating Network分配的权重提前。他们为每个专家单独计算预测值与真实值之间的损失,并将这些损失按照Gating Network分配的权重进行加权求和。这样的设计鼓励了不同专家之间的竞争,因为每个专家都希望自己的预测更加准确,从而获得更高的权重。
Sparse MoE的关键组件
- Gating Network(G(x)):
- 作用:根据输入x动态地决定每个专家的权重。
- 输出:一个权重向量,其元素对应于每个专家的权重。
- Expert Networks(E_i(x)):
- 定义:一系列独立的模型或子网络,每个专家擅长处理不同的输入子集。
- 输出:对于输入x,每个专家会生成一个输出。
- 输出计算:
- Sparse MoE的输出是各专家输出的加权和,权重由Gating Network提供。
- 只有那些权重大于0的专家才会参与计算,权重为0的专家不参与。
- 稀疏性实现:
- 使用
KeepTopK
函数来选择权重最高的k个专家。 - 在任何时候,只有k个专家是活跃的。
- 使用
“赢者通吃”现象及其缓解策略
在Sparse MoE的训练过程中,发现了一种“赢者通吃”的现象:那些早期表现良好的专家会更容易被Gating Network选择,导致最终只有少数几个专家真正起作用。这种现象会限制模型的表达能力和泛化能力。
为了缓解这种现象,引入了一个额外的损失函数,旨在平衡不同专家之间的使用频率。具体做法如下:
- 计算Importance(X):
- 对于一个batch的样本X,首先计算每个样本的Gating weights。
- 然后,将所有样本的Gating weights相加,得到每个专家的总权重。
- 计算变异系数(CV):
- 变异系数是衡量数据离散程度的一个指标,它考虑了数据的平均值和标准差。
- 在这里,变异系数用于衡量不同专家之间权重的差异程度。
- 添加Loss项:
- 定义了一个新的损失项L(X),它是Importance(X)的变异系数的平方,乘以一个超参数λ。
- 这个损失项的目的是惩罚那些权重分布过于不均匀的情况,鼓励模型更均匀地利用不同的专家。
GShard模型
GShard是首个结合了Mixture of Experts(MoE)和Transformer的模型。它的主要特点是,在Transformer的encoder和decoder中,每隔一个Feed-Forward Network(FFN)层,就替换成位置敏感的MoE层,并使用Top-2 gating network。这种设计旨在利用多个专家来提高模型的表达能力和泛化能力。
Vanilla MoE Export Network
Vanilla MoE模型的核心思想是利用一个Gating Network来为不同的Expert分配输出权重。对于每个输入样本,每个Expert都会生成一个输出,然后Gating Network会根据这些输出为每个Expert分配一个权重。最终的输出是这些加权后的Expert输出的和。
损失函数
在Vanilla MoE中,对于输入样本c,第i个Expert的输出为o_i,真实标签为d。损失函数通常定义为预测输出与真实标签之间的某种差异,例如均方误差或交叉熵损失。在Vanilla MoE中,损失函数写作:
E' = |d - ∑p_i * o_i|
其中,p_i是Gating Network为第i个Expert分配的权重。这个损失函数本质上是所有Expert输出的加权和与真实标签之间的差异。
这种设计虽然简单直观,但存在一个问题:不同Expert之间可能会相互影响。因为每个Expert的输出都会被Gating Network加权并累加到最终的输出中,所以一个Expert的表现可能会受到其他Expert的影响。
Jacobs等人的改进
为了解决这个问题,Jacobs,Robert A.等人提出了对损失函数的改进。他们将权重p_i提前到损失函数的计算中,使得每个Expert单独计算损失函数。这样,每个Expert都会尝试最小化自己的预测与真实标签之间的差异,而不是与其他Expert共同优化一个整体的损失。
改进后的损失函数写作:
E° = ∑p_i * |d - o_i|
在这个损失函数中,每个Expert的输出o_i都会单独与真实标签d进行比较,并计算损失。然后,这个损失会被Gating Network分配的权重p_i加权。这种设计鼓励了不同Expert之间的竞争,因为每个Expert都希望最小化自己的损失,从而获得更高的权重。
Expert Balancing
在Mixture of Experts(MoE)模型中,Expert Balancing是一个重要的问题。在实验中发现,不同的专家(experts)在竞争过程中,会出现“赢者通吃”的现象。在训练的初期,表现较好的专家会更容易被门控网络(gating network)选择,导致最终只有少数几个专家真正在起作用。这种不平衡会导致模型的表现受限,因为大量的专家没有得到充分的利用。
为了缓解这种不平衡现象,引入了一个新的损失函数。这个损失函数的设计思路是鼓励模型更均匀地利用不同的专家。
定义了一个重要性度量(Importance),它表示一个批次(batch)的样本中,所有样本的门控权重之和。这个重要性度量反映了每个专家在整个批次中的使用频率。
计算了这个重要性度量的变异系数(coefficient of variation,CV)。变异系数是一种衡量数据离散程度的指标,它考虑了数据的平均值和标准差。在这里,变异系数用于衡量不同专家之间重要性的差异程度。
将这个变异系数作为新的损失函数的一部分,并乘以一个超参数λ来进行调整。这个损失函数的目的是惩罚那些重要性分布过于不均匀的情况,从而鼓励模型更均匀地利用不同的专家。
GLaM和GShard结构
GLaM和GShard都是基于Mixture of Experts(MoE)的大型语言模型结构。MoE的核心思想是将多个专家模型组合在一起,根据输入的不同动态地选择使用哪个专家。
GLaM
GLaM是一个基于MoE的大型语言模型,其引入多个专家网络,使得模型能够在处理不同任务时,自适应地选择最合适的专家。GLaM的设计目标是提高模型的表达能力和泛化能力,同时保持较低的计算成本。
GShard
GShard是谷歌提出的一种基于MoE的分布式训练策略。它将模型的不同部分分配到不同的计算节点上,高效的网络通信来协同工作。GShard的核心思想是将专家的参数进行分片,每个节点只存储和更新一部分参数,从而降低了单个节点的内存需求,使得训练更大规模的模型成为可能。
Scale参数量降低训练推理成本
在大型语言模型中,参数量往往非常庞大,这会导致训练和推理的成本很高。为了降低这些成本,研究者们采用了多种策略,如参数共享、参数剪枝、知识蒸馏等。其中,MoE结构引入多个专家网络,实现了模型规模的扩展和计算成本的降低。在MoE结构中,每个专家只处理部分输入,因此并行计算,提高了计算效率。同时,由于不同专家共享部分参数,也进一步降低了模型的参数量。
MOE结构复杂度
在Transformer结构中引入MOE会增加结构的复杂度。原始的Transformer包含FFN(Feed-Forward Network)层和Multi-Head Attention结构。当对FFN层进行MoE扩展时,每个FFN层都会被替换为多个专家网络和一个门控网络。门控网络负责根据输入动态地选择专家网络。这种扩展方式使得模型能够更好地处理不同类型的输入,但同时也增加了模型的复杂性和训练难度。
分布式通信问题
MOE结构的引入带来了分布式通信的挑战。与传统的Dense模型相比,MOE需要额外的通信来实现数据的路由(Gating)和结果的回收。这是因为每个输入样本都需要经过门控网络的计算来确定应该路由到哪个专家网络,而专家的输出结果也需要被收集并用于后续的计算。这些通信操作可能跨越多个计算节点和路由路径,从而导致通信阻塞问题。特别是在大规模分布式训练场景中,通信成本可能成为制约模型性能和训练速度的瓶颈。
MoE系统优化概述
MoE的基本思想是将模型拆分成多个“专家”,每个专家负责处理输入的一部分。一个门控网络,模型动态地决定哪些专家应该被激活来处理当前的输入。这种方式不仅提高了模型的容量,而且只激活部分专家,在不增加计算量的情况下实现高效的训练。
然而,随着模型规模的增大,大模型训练的主要瓶颈在于片上内存与卡间通信。为了克服这些挑战,研究者们提出了多种优化手段,包括MOE并行、优化器异构和多副本并行。
1) MOE并行
MOE并行是一种将不同的专家切分到不同的计算设备(如GPU卡)上的技术。由于MoE的路由机制,需要使用AIITOAII(一种通信协议)将token发送到正确的卡上。为了优化AIITOAII通信,研究者们提出了分级AIIToA和Group-wise AIITOAII等策略。这些策略减少通信次数、合并小批量通信等方式来降低通信开销。
2) 优化器异构
在大模型训练中,优化器(如adam系列)占用的内存通常是模型参数本身的2倍或。为了降低内存占用,一种常见的策略是将优化器的状态存储在Host内存上,而不是与模型参数一起存储在设备内存上。这种方式称为优化器异构。将优化器状态与模型参数分离,显著减少设备内存的使用,从而允许训练更大的模型。
3) 多副本并行
多副本并行是一种将串行的通信和计算拆分成多组,组件流水,来掩盖通信时间的技术。在分布式训练中,通信和计算往往是交替进行的,这会导致大量的等待时间。多副本并行,将这些操作并行化,从而提高整体的训练效率。具体来说,将模型和数据分成多个副本,每个副本在不同的设备上运行。然后,适当的调度和同步机制,确保这些副本能够高效地协作,从而加速训练过程。
AHTOAI与分级AITOAII
AHTOAI 和 分级AITOAII 是两种优化分布式训练中节点间通信的策略。在分布式深度学习训练中,节点间的通信往往是性能瓶颈之一。为了降低通信开销,研究者们提出了这些优化方法。
- AHTOAI:可能是一种特定的通信优化技术,用于减少通信延迟和提高带宽利用率。具体细节可能因不同的实现和上下文而异。
- 分级AITOAII:这是一种将全局通信拆分成多个局部通信的策略。将全局通信域拆分成多个较小的局部通信域,降低跨节点通信量,从而提高训练效率。
D2D带宽大与全局通信域拆分
D2D带宽大 通常设备间直接通信的带宽较高。在分布式训练中,高带宽有助于加快数据交换速度,但如果不加以优化,仍然可能导致通信瓶颈。
全局通信域拆分 是一种通信优化手段,减少每次通信中涉及的数据量和节点数,来降低通信开销。例如,将全局通信拆分成多个局部通信步骤,每个步骤只涉及部分节点和部分数据。
Group-wise All-to-All通信
Group-wise All-to-All通信 是一种在分布式训练中优化通信的方式。它将节点分成多个组,并在每个组内进行All-to-All通信,来减少跨组通信的开销。这种方式在保持通信效率的同时,降低通信的复杂性和开销。
模型并行(MP)与MoE并行
模型并行(MP) 和 MoE并行 是两种在分布式训练中常用的并行策略。
- 模型并行(MP):将模型的不同部分分配到不同的节点上进行计算。这有助于平衡计算负载,但也可能增加通信开销,因为不同部分之间的数据需要跨节点交换。
- MoE并行:在Mixture of Experts(MoE)结构中,将不同的专家分配到不同的节点上进行计算。这同样有助于平衡计算负载,但也可能引入额外的通信开销。
当模型并行和MoE并行同时开启时,如果同一组MP内的AITOAII通信存在数据冗余,那么通信效率可能会受到影响。为了解决这个问题,采用一些策略来减少数据冗余,例如更智能的数据分配和合并策略来优化通信模式。
angu-Sigma万亿稀疏模型
关键挑战:层内并行效率低
在训练大规模稀疏模型时,层内并行是一个重要的优化手段。然而,当模型规模达到万亿级别时,层内并行的效率往往会受到限制。这主要是因为随着模型规模的增大,通信开销和数据传输延迟也会相应增加,导致并行效率降低。
技术难点:百亿稀疏模型通信占比高
在百亿稀疏模型的训练中,通信开销是一个重要的技术难点。由于模型规模庞大,不同计算节点之间需要频繁地交换数据和参数,这导致了通信占比高达约40%。此外,单卡内计算和通信通常是串行的,在计算过程中需要等待通信完成,从而无法有效地隐藏通信延迟。
关键技术:多副本并行
为了解决上述问题,多副本并行技术被引入到Pangu-Sigma万亿稀疏模型的训练中。多副本并行技术的主要思想是将模型复制成多个副本,并在不同的计算节点上并行执行。精心编排模型副本间的计算通信执行序,有效地隐藏通信延迟,提高训练效率。
具体来说,多副本并行技术包括以下几个关键步骤:
- 模型多副本:将模型从单副本复制为多副本,并在多个计算节点上并行执行。这样充分利用计算资源,提高训练速度。
- 计算隐藏通信:合理安排计算任务和通信任务,使得在计算过程中重叠进行通信,从而隐藏通信延迟。这需要对计算任务进行细致的划分和调度,以确保计算和通信的协同进行。
在Pangu-Sigma万亿稀疏模型的训练中,多副本并行技术取得了显著的效果。将模型拆分为多个副本,并优化计算和通信的执行顺序,成功降低了百亿稀疏模型中通信占比约11%。
优化器异构
另一个关键技术是优化器异构。在训练大规模模型时,优化器通常会占用大量的内存。为了解决这个问题,Pangu-Sigma采用了优化器异构的策略。具体来说,将模型的前向和后向计算(计算密集部分)放在Device(如GPU或TPU)上执行,而优化器的更新(内存占用大)则在Host(如CPU)上执行。这样将计算和内存密集型任务分配到不同的计算单元上,有效地降低内存占用,提高训练效率。
Mistral 7B Model
Mistral 7B在所有基准测试中均超越了Llama 2 13B模型。,无论是在处理文本生成、语言理解还是其他NLP任务时,Mistral 7B都展现出了更高的准确度和性能。
其次,Mistral 7B还在许多基准测试中超过了Llama 1 34B模型。尽管Llama 1 34B拥有更多的参数,但Mistral 7B凭借其高效的结构和算法优化,仍然能够在性能上与之匹敌甚至超越。
Mistral 7B在代码生成方面的性能接近CodeLlama 7B,同时仍然擅长处理英语任务。这使得它成为一个非常全面且强大的模型,能够应对多种不同的应用场景。
在模型设计上,Mistral 7B采用了Grouped-query attention(GQA)技术来加快推理速度。这种技术分组查询的方式,提高了模型处理大量数据时的效率。同时,它还使用了ROPE和RMSNorm等技术来进一步提升模型的性能。
在Transformer解码器方面,Mistral 7B采用了Sliding Window Attention(SWA)机制来处理更长的序列,同时降低了计算成本。传统的Vanilla attention机制在处理长序列时,其操作的数量是序列长度的平方级,导致内存压力随着序列长度的增加而线性增长。在推理时,这会导致较高的延迟和较小的吞吐量,因为缓存的可用性降低了。为了缓解这个问题,Mistral 7B使用了滑动窗口注意力机制,每个令牌最多关注到过去W个令牌(在这里,W=3)。这样,它就能在保持较好性能的同时,降低了对计算资源的需求。
Sliding Window Attention
来看Sliding Window Attention中的窗口大小和层数。在滑动窗口注意力机制中,窗口的大小是一个关键参数。这个窗口决定了每个时间点,模型关注到的上下文范围。需要注意的是,即使某些令牌位于滑动窗口之外,它们仍然会影响下一个词的预测。这是因为,在每个注意力层,信息最多向前传播W个令牌。也就是说,经过两层注意力层后,信息向前传播2W个令牌,以此类推。举个例子,假设有一个长度为16K的序列,并且使用了一个大小为4K的滑动窗口。那么,在经过4层注意力层之后,信息就已经传播到了整个序列的长度。
混合专家模型是一种将多个专家模型组合在一起的方法,每个专家模型都是一组独立的权重。在这种方法中,每个令牌都被分配给一个或多个“专家”进行处理。这种划分发生在模型的前馈层。每个专家模型都专注于数据的不同方面,这使得它们能够捕捉复杂的模式并做出更准确的预测。只激活每个令牌所需的专家子集,稀疏混合专家模型在保持高吞吐量的同时降低内存成本。
Mixtral模型配置
来了解一下Mixtral模型的基本配置。这个模型采用了32层的结构,每层有3个头,隐藏层大小为4096。在归一化方面,它使用了RMSNorm。在注意力机制上,它结合了ROPE和GQA技术。在输出层,使用了带有Softmax的线性变换。
来看一下Mixtral模型中的关键组件:MOE(Mixture of Experts)。在这个配置中,使用了8个专家,每个专家负责处理一部分输入数据。为了选择最合适的专家,使用了TopK路由机制,其中TopK设置为2。此外,还设置了一个容量检查参数c,其值为1.1。
采用了基于MindFormers的Mixtral-8x7B MOE模型实现。这个模型在结构上包含了GOA、ROPE、RMSNorm等关键组件,并使用了Silu作为激活函数。在训练过程中,加载了开源的Mixtral权重和tokenizer,以确保推理结果与HF对齐。
在并行训练方面,采用了EP(Expert Parallelism)和PP(Pipeline Parallelism)等多维混合并行策略。在4机32卡的配置下,进行了试验性训练,并发现收敛情况符合预期。具体来说,在200个epoch内,loss从10降低到了0.02。
Optimize the implementation of TopKRouter
让了解一下Mixtral的核心组件:路由器(Router)和MoE(Mixture of Experts)层。路由器负责将输入数据分发到不同的专家模型中,而MoE层则包含多个专家模型,它们并行地对数据进行处理。这种结构使得Mixtral能够充分利用多机多卡的计算资源,实现高效的并行训练。
在多维混合并行训练中,Mixtral采用了EP(专家并行)和MP(模型并行)等策略。EP是指将不同的专家模型分布到不同的计算节点上,实现并行计算;而MP则是将模型的不同部分分布到不同的计算节点上,以充分利用计算资源。这两种策略的结合使得Mixtral能够在保持模型性能的同时,降低训练时间和内存消耗。
接下来,来看一下Mixtral的并行训练过程。在训练开始时,数据首先经过路由器进行分发,然后被送到不同的专家模型中进行处理。每个专家模型都会输出一个结果,这些结果会经过重排和聚合后,得到最终的输出。在这个过程中,Mixtral优化通信和计算开销,实现了高效的并行训练。
Mixtral采用了多种优化技术来提高并行训练的效率。例如,它使用了LN Router进行数据的分发和重排,以减少通信开销;同时,它还切分FFN(前馈神经网络)投影层和使用all-reduce通信来降低内存消耗。此外,Mixtral还利用重计算和优化器并行等技术来进一步提高训练速度。
在实验中,发现当EP=8且MP=1时,Mixtral的性能达到最佳,约为1147 tokens/s/p。其中,MoE相关的开销约占15%,包括路由、容量系数、重排和通讯等部分。
扩展MoE 专家数对性能的影响
扩展专家数并不总是带来性能的提升。专家数的增加会导致计算量和内存消耗的增加,因此需要在性能和资源消耗之间找到平衡点。为了评估不同专家数下的性能表现,需要进行一系列的实验和测试。
网络结构是指模型中各个组件的连接方式和计算流程。在MoE中,需要设计合理的网络结构来充分利用专家模型的并行计算能力。并行策略则是指如何利用多机多卡进行高效的并行计算。常见的并行策略包括数据并行、模型并行等。
在实验中,使用了不同的Batch Size、测试集群、专家容量等参数来评估性能。Batch Size是指每次训练时使用的样本数量,它会影响模型的训练速度和收敛情况。测试集群是指用于实验的计算机集群,其性能和规模会对实验结果产生影响。专家容量则是指每个专家模型能够处理的数据量,它决定了模型的扩展能力。
还需要关注一些关键的测试指标,如性能(以tokens/s/p为单位)和内存消耗(包括静态和动态内存)。这些指标能够直接反映模型在不同配置下的表现。
实验,发现扩展MoE专家数对性能的影响并非线性的。在一定范围内增加专家数带来性能的提升,但当专家数过多时,性能提升会逐渐饱和甚至下降。这是因为过多的专家模型会导致计算资源的浪费和通信开销的增加。
发现并行策略的选择对性能也有重要影响。合理的并行策略能够充分利用计算资源,提高训练速度。例如,数据并行将不同样本分配到不同的计算节点上进行处理,从而加快训练过程;而模型并行则将模型的不同部分分布到不同的计算节点上,以减轻单个节点的计算压力。
知识记忆(Knowledge Retention)
在持续学习中,模型需要避免遗忘灾难(Catastrophic Forgetting)。模型在学习新任务时,不应忘记之前学习到的知识。这是持续学习的一个基本要求,因为在实际应用中,往往希望模型能够持续积累知识,而不是在学习新任务时丢失旧任务的信息。
前向迁移(Forward Transfer)。前向迁移是指模型在学习新任务时,能够利用从先前任务中获得的知识。这种迁移能力使得模型能够更高效地学习新任务,因为它借鉴之前的经验。
后向迁移(Backward Transfer)。后向迁移是指在模型学习新任务后,能够提升在旧任务上的性能。新学到的知识不仅有助于解决新任务,还能反过来改进旧任务的表现。
持续学习还强调在线学习(Online Learning)的能力。在线学习模型能够从连续的数据流中不断学习,而不需要预先知道任务的边界。这使得模型能够适应不断变化的环境,并在实际应用中更加灵活。
持续学习要求模型在无需明确任务或数据边界的情况下进行学习。模型应该能够自动处理数据,而不需要人工设定任务或数据的界限。
遗忘分布
遗忘分布。在机器学习中,当有一个原始数据集A和新样本分布B时,分布偏移A→B是一个常见的问题。,随着时间的推移,数据的分布发生了变化。这时,需要在保持对A的性能的同时,也要关注在B上的性能。因此,构建通用模型成为了的目标,这样的模型能够适应不同分布的数据。
在构建这样的模型时,面临一个“遗忘问题”。如果只在新样本分布B上进行训练,那么模型在原始数据集A上的性能可能会下降。这是因为模型可能会“忘记”它之前学习到的关于A的知识。
谈谈LLM范式。LLM,即大型语言模型,通常采用预训练+微调(Pretrain+SFT)的方式。这种范式具有一些重要的性质,如知识记忆、前向迁移、后向迁移、在线学习和无任务边界等。LLM在预训练后具备世界知识,小规模的微调不易造成遗忘灾难。但是,如果进行大规模数据的续训,可能会引发遗忘问题。
在LLM中,利用世界知识进行零样本学习、少量样本学习和微调。然而,微调后可能会导致部分任务的性能下降,并且二次微调可能会损失首次微调的性能。
MoE(Mixture of Experts)和终身学习。MoE的特点在于它使用多个专家来分别处理不同分布(如领域或主题)的数据。在推理时,只需要部分专家参与。这种结构使得MoE能够更好地适应复杂的数据分布。
在LLM的终身学习中,期望世界知识底座能够持续学习。模型应该能够不断地从新的数据中学习,同时保持对之前知识的记忆。在MoE中,专家是可插拔的,而门控网络也进行增删操作。
避免遗忘
在预训练过程中,根据数据的不同分布,逐步增加更多的专家来进行处理。这些专家会专门针对每个数据分布进行训练,以提高其对该分布的处理能力。为了避免遗忘已经学习到的知识,引入了一些正则化技术。
在预训练阶段,根据数据的分布特性,为每个分布扩展相应的专家(和门控机制)。这些专家会针对特定的分布进行优化,以提高模型的性能。然后,会冻结已经预训练好的旧专家和门控机制,以保持对之前学习到的知识的记忆。最后,进一步引入正则化技术到MoE中,以减轻遗忘现象,确保模型在持续学习的过程中不会丢失已经获得的能力。
在这个过程中,正则化技术起到了什么样的作用呢?正则化技术的主要目的是防止模型在训练新数据时忘记之前学到的知识。添加正则化项,限制模型参数的更新范围,从而确保模型在学习新分布的同时,不会破坏对旧分布的处理能力。
RRE的第一层设计
在这一层中,任务被分配给不同的专家组。每个专家组由多个专家构成,这些专家专门为特定的任务或领域服务。这种设计使得模型能够针对不同的任务或领域进行专门的优化,提高处理效率和准确性。
RRE的第二层设计
在这一层中,使用组内随机门控机制(Gating),使得专家组的专家能够负载均衡。每个专家在处理任务时,会有相对均等的负载,避免了某些专家过载或空闲的情况,从而提高了整个系统的稳定性和效率。
RRE的设计非常灵活,适应不同规模和复杂度的任务。例如,在PanGu-Z模型中,RRE被用于处理不同领域的数据,如中文、英文和代码等。RRE的设计,模型能够更好地理解和处理这些领域的数据,提高了模型的泛化能力和实用性。
RRE还与其他技术相结合,形成更强大的模型。例如,DeepSeek MoE就是一种结合了RRE和其他技术的模型。它采用了细粒度的专家分割策略,将专家分为不同的段,以便更好地处理不同的任务。同时,DeepSeek MoE还引入了共享专家隔离策略,使得专家之间的信息更加独立,提高了模型的稳定性和准确性。
知识杂交问题。在当前的MoE实践中,由于通常使用有限数量的专家(例如8或16个),每个专家可能会接收到涵盖不同知识的标记。每个专家在其参数中会汇集多种类型的知识,而这些知识很难同时被有效利用。这导致了知识杂交的现象,使得专家无法专注于某一特定领域或任务的知识,从而影响了模型的专业化程度和性能。
知识冗余问题。在MoE模型中,不同的专家可能会处理需要共同知识的token。因此,多个专家可能会在他们的参数中收敛到共享知识的获取。这导致了专家参数中的冗余,即多个专家都在学习相同或相似的知识。这种冗余不仅浪费了模型的计算资源,还可能降低模型的泛化能力,因为模型可能在重复学习相同的知识,而忽略了其他有用的信息。
这两个问题共同阻碍了现有MoE实践中的专家专业化。由于知识杂交和知识冗余的存在,专家无法充分发挥其潜力,也无法达到MoE模型的理论上限性能。为了解决这个问题,需要寻找新的方法和技术,以促进专家的专业化和提高模型的性能。
DeepSeek模型正是为了解决这些问题而提出的。它一系列创新性的设计和策略,旨在减少知识杂交和知识冗余,提高专家的专业化和模型的性能。在后续的讲解中
示例代码及结果
本文参与华为云社区【内容共创】活动第26期。
- 点赞
- 收藏
- 关注作者
评论(0)