外观
混合专家模型MoE架构详解
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. 为什么需要 MOE(Mixture-of-Experts)?
| 问题 | 说明 |
|---|---|
| 训练成本平方级增长 | 模型和训练样本的增加,导致了训练成本的平方级增长 |
| 规模扩展瓶颈 | 如何在牺牲极少的计算效率的情况下,把模型规模提升上百倍、千倍? |
2. MOE 的思路是什么样的?
MOE(Mixture-of-Experts)作为一种基于稀疏 MoE 层的深度学习模型架构,能够将大模型拆分成多个小模型(专家,expert),然后在每轮迭代过程中,根据样本数量决定激活一定量的专家用于计算,实现节省计算资源的目的。
核心机制:MOE 引入可训练并确保稀疏性的门(gate)机制,以保证计算能力的优化。
密集模型 vs MoE
与密集模型不同,MoE 将模型的某一层扩展为多个具有相同结构的专家网络(expert),并由门(gate)网络决定激活哪些 expert 用于计算,从而实现超大规模稀疏模型的训练。
MoE 计算过程
MoE 层的计算过程如下:
- 首先对样本 x 进行门控计算,W 表示权重矩阵
- 由 Softmax 处理后获得样本 x 被分配到各个 expert 的权重
- 然后只取前 k(通常取 1 或者 2)个最大权重
- 最终,整个 MoE Layer 的计算结果就是选中的 k 个专家网络输出的加权和
结构说明:以下图为例,模型包含 3 个模型层,将中间层扩展为具有 n 个 expert 的 MoE 结构,并引入 Gating network 和 Top-k 机制。
3. MOE 分布式并行策略
3.1 MOE + 数据并行
在数据并行模式下包含 MOE 架构,门网络(gate)和专家网络都被复制地放置在各个运算单元上。
| 特点 | 说明 |
|---|---|
| 优点 | 对现有的代码侵入性较小 |
| 缺点 | 专家的数量受到单个计算单元(如 GPU)的内存大小限制 |
3.2 MOE + 模型并行
该策略中门网络依然是复制地被放置在每个计算单元上,但专家网络被独立地分别放置在各个计算单元上。
| 特点 | 说明 |
|---|---|
| 优点 | 可以允许更多的专家网络同时被训练,数量限制与计算单元的数量(如 GPU 数量)正相关 |
| 缺点 | 需引入额外的通信操作,针对不同模型和设备拓扑需要专门的并行策略,侵入性更强 |
其他并行方案:除了上述两种方案,还可以使用 MOE + 数据并行 + 模型并行、MOE + ZeRO 增强的数据并行等。
4. MoE 大模型具备哪些优势?
| 序号 | 优势 | 说明 |
|---|---|---|
| 1 | 训练速度更快,效果更好 | 稀疏激活机制使得训练效率大幅提升 |
| 2 | 相同参数,推理成本低 | 每个 token 只激活部分专家,推理时计算量更小 |
| 3 | 扩展性好 | 允许模型在保持计算成本不变的情况下增加参数数量,能够扩展到万亿参数模型 |
| 4 | 多任务学习能力强 | 如 Switch Transformer 在所有 101 种语言上都显示出了性能提升 |
5. MoE 大模型具备哪些缺点?
| 序号 | 缺点 | 说明 |
|---|---|---|
| 1 | 训练稳定性 | MoE 在训练过程中可能会遇到稳定性问题 |
| 2 | 通信成本 | 在分布式训练环境中,专家路由机制可能会增加通信成本,尤其是在模型规模较大时 |
| 3 | 模型复杂性 | MoE 的设计相对复杂,可能需要更多的工程努力来实现和优化 |
| 4 | 下游任务性能 | 由于稀疏性,使得在 Fine-tuning 过程中容易出现过拟合 |
6. MoE 为什么可以实现更大模型参数、更低训练成本?
| 原因 | 说明 |
|---|---|
| 稀疏路由 | 每个 token 只会选择 top-k 个专家进行计算,而非全部专家参与 |
| 混合精度训练 | 使用 bfloat16 精度训练专家,同时对其余计算使用全精度,降低通信成本、计算成本和存储 tensor 的内存 |
| 多种并行策略 | 可以使用模型并行、专家并行和数据并行,优化 MoE 的训练效率 |
| 负载均衡损失 | 可提升每个 device 的利用率 |
7. MoE 如何解决训练稳定性问题?
可以通过以下方法提升训练稳定性:
- 混合精度训练:如使用 bfloat16 精度
- 更小的参数初始化:降低初始权重幅度
- Router z-loss:专门针对路由器的损失函数
8. MoE 如何解决 Fine-Tuning 过程中的过拟合问题?
可以通过以下方法缓解过拟合:
| 方法 | 说明 |
|---|---|
| 更大的 dropout | 主要针对 expert |
| 更大的学习率 | 加速收敛,减少过拟合风险 |
| 更小的 batch size | 增加训练随机性 |
现状:目前看到的主要是预训练的优化,针对 Fine-Tuning 的优化主要是一些常规的手段。