大模型之MoE

MoE:Mixture of Experts 混合专家模型

1、MoE优缺点:

推理速度:相当于占用更多的GPU显存,但是因为只使用其中1/4甚至更低的参数,推理时速度更快。相比于非MoE的模型,快多少倍?

低成本:与具有相同总参数数量的密集模型相比,训练和推理上是会好一些,但是效果也会差一些。

GPU VRAM 需求:一个问题是它们对 VRAM 的高需求,因为所有专家都需要加载到内存中,即使在某个特定时间只使用了 1 或 2 个。

微调困难:历史上,MoEs 在微调方面存在困难,经常导致过拟合。尽管现在在这方面已经取得了许多进展,并且变得更容易。

训练和推理的权衡:尽管提供了更快的推理,但它们需要对 VRAM 和计算资源进行谨慎管理。还是时间和空间的平衡问题。

GPT4的参数量预估:GPT4 -> 8 x 220B 参数 = 1.7T 参数 (1.7万亿参数)

GPT-3.5 大约有 175B 参数

2、Mistral 8x7B MOE

8 个专家模型,每次推理时激活 2 个专家模型。总参数量 46.7B,每次推理用 12.9B。其效果自然比 14B强、速度比 48B快。

3、Gshard MoE的核心架构

DeepSpeed的MoE模型架构是Gshard。

from 知乎 猛猿

首先,我们有一串过Attention层后的token序列

我们通过Gate,计算每个token去往每个expert的概率

我们希望不同expert处理的token数尽量均衡,所以我们同时采取三方面优化

Capacity: 为每个expert设置capacity(expert buffer),限制它能处理的最大token数量,多出来的token算为溢出,在top2Expert都溢出的情况下,该token会被直接发去下一层attention。

Random Routing: 每个token一定会被发去1st Expert,在此基础上我们通过random routing加噪的方式,重新选出2nd expert。在做完capacity + random routing后,我们最终确认了每个token要发去的top2expert和其对应的权重,通过加权计算的方式,确认Moe-Layer最终的输出结果。

Auxiliary Loss:添加辅助损失函数,对expert负载不均的情况做进一步惩罚。

回到上图的处理方式是:

如果只有单个expert溢出,那么就把另一个expert的权重值为1,然后正常参与加权计算(如图中t6

如果2个expert都溢出,那么该token就不经过任何expert,直接通过残差连接的方式,原样发去下一层的Attention上(如图中t7

Capacity的计算公式:

S是 token数,E是 专家总数, K是 选择专家数。

capacity_factor 调节每个expert多处理或少处理一些token,min_capacity 容量下界。

capacity公式

DeepSpeed-Megatron MoE并行训练

### Mixture of Experts (MoE) 大模型的技术原理 Mixture of Experts (MoE) 是一种用于构建超大规模机器学习模型的方法,其核心思想是通过稀疏激活机制来实现高效的大规模参数扩展。具体来说,在 MoE 中,整个模型由多个独立的子模块(称为“专家”)组成,而这些专家仅在特定条件下被调用[^1]。 #### 技术原理 MoE 的基本架构基于 Transformer 模型,并引入了一种新的计算模式——路由器(Router)。路由器负责决定哪些输入应该分配给哪个专家处理。这一过程可以描述如下: - **输入分发**:对于每一个 token 输入,路由器会根据当前上下文动态选择一组最适合该任务的专家。 - **专家并行化**:由于不同样本可能对应不同的专家组合,因此可以在硬件层面利用分布式计算框架完成高效的训练和推理操作[^2]。 #### 实现方法 为了有效实施上述策略,需要解决以下几个关键技术挑战: 1. **负载均衡问题** 路由器的选择逻辑可能导致某些热门专家过载,从而影响整体性能表现。为此提出了多种改进方案,比如 Top-k gating 函数以及 noise-based load balancing 方法等。 2. **通信开销优化** 当采用多设备部署时,跨节点间的数据交换不可避免会产生额外延迟成本。针对此情况可以通过减少全网广播次数或者设计局部拓扑结构等方式降低此类损耗。 3. **可扩展性支持** 随着总参数量级持续增长至万亿级别以上,单机难以承载如此庞大的存储需求。此时需借助于先进的软件工程手段如 ZeRO/DeepSpeed 或者 Megatron-LM 来提供充分保障。 以下是 Python 版本的一个简单伪代码示例展示如何定义一个基础版 MoE 层次: ```python import torch.nn as nn class Expert(nn.Module): def __init__(self, input_dim, output_dim): super().__init__() self.ffn = nn.Linear(input_dim, output_dim) def forward(self, x): return self.ffn(x) class Router(nn.Module): def __init__(self, num_experts): super().__init__() self.gating_network = nn.Linear(... ,num_experts ) def forward(self,x): gates = F.softmax(self.gating_network(x), dim=-1) return gates def moe_layer(inputs, experts_list, router_instance): gate_outputs = router_instance(inputs) final_output = sum([gate * expert(inputs) for gate,expert in zip(gate_outputs.split(1,-1),experts_list)]) return final_output ``` ### 常见框架 目前主流深度学习平台均已提供了对 MoE 结构的支持功能,其中包括但不限于 TensorFlow Mesh、PyTorch BigModel 和 HuggingFace Transformers 库中的相关组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值