MoE 模型中的动态路由方法

24年3月来自北大等机构的论文“Harder Tasks Need More Experts: Dynamic Routing in MoE Models”。

混合专家 (MoE) 模型的动态专家选择框架,旨在通过根据输入难度调整激活专家的数量来提高计算效率和模型性能。与传统的 MoE 方法不同,传统方法依赖于固定的 Top-K 路由,无论输入的复杂性如何,都会激活预定数量的专家,而动态路由方法则根据每个输入的专家选择置信度动态选择专家。这可以更有效地利用计算资源,为需要高级推理的复杂任务激活更多专家,为简单任务激活更少专家。该模型将更多专家分派到需要复杂推理技能的任务,如 BBH(Big Bench),证实了它能够根据输入的复杂性动态分配计算资源。特别是Transformer 模型不同层所需专家数量的变化。

代码和模型开源 GitHub - ZhenweiAn/Dynamic_MoE

具体来说,首先计算选择专家的概率分布。如果某个专家的最高概率超过预定义的阈值 p,则表明置信度较高,只激活该专家。否则,逐步增加其他专家,直到选定专家的累积概率超过阈值 p。这种方法允许动态选择专家,专家数量根据输入的复杂性进行调整。

如图所示:Top-K路由机制与Top-P路由机制比较。(a)每个token以Top-K路由概率选择固定的K=2个专家。(b)在Top-P路由机制中,每个token选择路由概率较高的专家,直到累积概率超过阈值。

请添加图片描述

具体而言,专家选择的概率 P 反映了输入token x 在选择不同专家时的置信度。换句话说,Pi 表示模型对第 i 个专家能够充分处理输入 x 的信心度。如果 P 中的最高概率足够大,那么可能只需要使用相应的专家。但是,如果最高概率不够大,需要添加更多专家来提高处理 x 的可靠性。不断添加专家,直到所选专家的概率总和超过特定阈值 p,此时模型足够自信,这些专家可以有效地处理输入 x。按 P 中概率的降序添加新专家,尽可能减少激活专家的数量。正式地,首先将 P 中的元素从高到低排序,得到一个排序索引列表 I。然后找到累积概率超过阈值 p 的最小专家集。

动态路由机制存在一个风险:它可能会为所有专家分配较低的置信度,从而激活更多专家以实现更好的性能。假设 P 是一个均匀分布,将超参数 p 设置为 0.5,那么模型将激活多达一半的专家。这违背了 MoE 框架的初衷:高效地扩展模型。

为了防止动态路由用过多的参数作弊并失去选择性选择专家的能力,对 P 引入了一个约束。希望路由机制选择一小组必要的专家,因此,目标是最小化分布 P 熵,确保每个 token 都能关注尽可能不具体的专家。动态损失旨在鼓励路由机制选择最小的必要专家集。

由于其他专家未得到充分利用,从而影响训练效率,因此通常希望不同专家处理的 tokens 数量大致相同。此外,先前的研究(Zuo,2022)表明,MoE 层中均匀地激活专家可以带来更好的性能。为了实现不同专家之间的平衡负载,加入负载平衡损失(Lepikhin,2021;Fedus,2022)。

该模型是一个生成模型,生成的下一个token作为训练目标。最终损失是语言模型损失、动态损失和负载平衡损失的组合。

用 RedPajama(Computer,2023)作为训练数据,它是 LLaMa 数据集的全开源实现。RedPajama 数据来自多种来源,包括常见爬虫 (CC)、C4、github、维基百科、书籍、arxiv 和 Stackexchange。在主要实验中,用 100B 个 tokens 训练所有模型。

该模型架构遵循 LLaMA(Touvron,2023)。用 Llama2 token化器,其词汇量为 32000。除非另有明确说明,将 Transformer 层数设置为 24,隐维度设置为 1024。采用多头注意机制,总共有 16 个注意头,每个头维度为 64。在 FFN 层中使用 SwiGLU(Shazeer,2020)。对于初始化,所有可学习参数都以标准差 0.006 随机初始化。每个 MoE 层有 16 个专家,具有与标准 FFN 相同的初始化参数。在这种配置下,每个密集模型大约有 374M 个参数。每个 MoE 模型总共有 3.5B 个参数。MoE-Top 1 中仅激活 374 个参数,而 MoE-Top 2 中激活 581M 个参数。

用密集模型作为基线。在密集模型中,每个 Transformer 层由一个多头注意层和一个标准前馈网络组成。将隐维度分别设置为 1024 和 1280 来实现两个密集模型:密集(374M)和密集(570M)。

采用 Top-K 路由的 MoE 模型,其中 K 分别设定为 1 和 2。仅使用语言建模损失和负载平衡损失进行训练。MoE-Top 1 可以看作是 Switch Transformer (Fedus et al., 2022) 的重实现,而 MoE-Top 2 是 Gshard (Lepikhin et al., 2021) 的重实现。MoE-Top 1 和 MoE-Top 2 的激活参数分别与 密集(374M) 和 密集(570M) 几乎相同。

MoE-Dynamic 模型用动态自适应路由机制,根据输入的 token 表示激活不同数量的专家。路由机制中的阈值 p 为 0.4。在推理过程中,MoE-Dynamic 模型激活的专家不超过 2 名,这意味着它使用的参数比 MoE-Top 2 少。

下表为实验结果:

请添加图片描述

### 专家模型 MoE路由选择机制 #### 路由选择的重要性 在混合专家模型MoE)中,路由选择机制决定了输入数据如何被分发给各个专家模型。这一过程对于提高整体系统的效率至关重要,因为不恰当的选择可能导致负载不平衡和资源浪费[^1]。 #### 经典路由策略及其局限性 传统的路由算法通常依赖于简单的哈希函数或随机分配方式来决定哪个专家应该接收特定的数据片段。然而,这种方法容易造成某些热门路径上的过度拥挤,进而引发严重的瓶颈效应。此外,在大规模分布式环境中实施全网状连接模式下的 All-to-All 数据传输会带来较高的延迟成本,严重影响了训练速度[^3]。 #### 新型高效路由方案——LocMoE 针对上述挑战,研究者们提出了 LocMoE 这样的改进版路由解决方案。该方法旨在优化现有体系结构中的两个核心方面: - **减少跨节点通信开销**:通过引入局部化概念,尽可能多地利用单个计算单元内部完成任务处理,从而降低不同设备之间频繁交互所带来的额外负担。 - **实现更均衡的任务分布**:采用更加智能化的方式评估各候选对象的工作量,并据此调整它们接收到的新请求比例,确保整个集群内的资源得到充分利用的同时避免了个别成员过载的情况发生。 具体来说,LocMoE 设计了一个新颖的两阶段流程来进行有效的路由决策: 1. 初步筛选阶段:基于预先设定的标准快速过滤掉明显不适合当前样本特征集的一些潜在选项; 2. 精确匹配阶段:运用高级统计学原理深入分析剩余备选名单里的每一个实例特性,最终挑选出最符合条件的那个作为目标接受方。 这种双管齐下的做法不仅有效解决了传统单一维度考量带来的种种弊端,而且大大提升了系统运行的整体稳定性和响应速率。实验证明,在相同条件下对比其他同类技术手段时,LocMoE 可以使每轮迭代所需的时间缩短约 12.68%-22.24%,同时保持甚至提高了预测精度水平不变。 ```python def locmoe_routing(input_data, experts): # Step 1: Initial Screening based on predefined criteria filtered_experts = initial_screening(input_data, experts) # Step 2: Precise Matching using advanced statistical methods selected_expert = precise_matching(filtered_experts, input_data) return selected_expert ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值