mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
643 字
2 分钟
GLaM 论文解读:混合专家模型的高效扩展
2025-06-26

GPT-3 175B 参数的模型训练需要大量计算资源。GLaM(Generalist Language Model)提出了稀疏激活的混合专家架构,用更少的计算量实现更好的性能。

本文将详细解读 GLaM 的稀疏专家混合架构和技术方案。

本文要点#

  • 稀疏激活的混合专家架构
  • GLaM 门控机制设计
  • 与密集模型的对比
  • 高效训练的实现

一、背景:大规模模型的计算挑战#

1.1 密集模型的局限#

flowchart TB A["密集模型的问题"] --> B["训练成本"] A --> C["推理成本"] A --> D["效率问题"] B --> B1["• GPT-3 175B 需要大量 GPU"] B --> B2["• 每次前向传播激活所有参数"] B --> B3["• 计算资源需求随模型规模线性增长"] C --> C1["• 必须加载全部参数"] C --> C2["• 延迟高,难以部署"] D --> D1["• 不是所有参数对每个输入都重要"] D --> D2["• 某些任务可能只需要部分能力"] style A fill:#f44336,color:#fff

1.2 混合专家的思路#

# 混合专家(Mixture of Experts)的核心思想
# 密集模型:所有输入经过所有参数
output = dense_layer(input) # 激活所有参数
# 稀疏 MoE:每个输入只激活部分专家
experts = [expert1, expert2, expert3, expert4]
gating_scores = gate(input) # 门控决定激活哪些
# 稀疏激活:只激活 top-k 个专家
top_k_indices = torch.topk(gating_scores, k=2).indices
output = sum(experts[i](input) for i in top_k_indices)

二、核心架构:稀疏激活的 MoE#

2.1 GLaM 整体架构#

flowchart TB A["输入 Token"] --> B["Token 嵌入"] B --> C["MoE 层 1"] B --> D["MoE 层 2"] B --> E["MoE 层 N"] C --> F["专家网络 1"] C --> G["专家网络 2"] C --> H["专家网络 E"] F --> I["门控加权"] G --> I H --> I I --> J["输出"] style C fill:#4caf50,color:#fff style I fill:#ff9800,color:#fff

2.2 门控机制#

class GLaMGating(nn.Module):
"""GLaM 的门控机制"""
def __init__(self, d_model, n_experts):
super().__init__()
self.n_experts = n_experts
self.gate = nn.Linear(d_model, n_experts)
def forward(self, x):
# 计算每个专家的得分
gating_scores = self.gate(x)
# Softmax 归一化
gating_probs = F.softmax(gating_scores, dim=-1)
# Top-k 稀疏激活:只激活得分最高的 2 个专家
k = 2
top_k_probs, top_k_indices = torch.topk(gating_probs, k)
# 重新归一化
top_k_probs = top_k_probs / top_k_probs.sum(dim=-1, keepdim=True)
return top_k_probs, top_k_indices

2.3 稀疏激活 vs 密集激活#

flowchart LR subgraph 密集激活["密集激活(GPT-3)"] A1["所有 175B 参数参与每个 token 的计算"] A2["FLOPs per token = 175B"] end subgraph 稀疏激活["稀疏激活(GLaM)"] B1["每个 token 只激活 2/64 个专家"] B2["参数量不变,但计算量大减"] B3["FLOPs per token ≈ 175B × 2/64 = 5.5B"] end subgraph 效果 C1["参数规模大,但计算量小"] C2["训练和推理更高效"] end style 密集激活 fill:#f44336,color:#fff style 稀疏激活 fill:#4caf50,color:#fff

三、技术细节#

3.1 专家网络结构#

class Expert(nn.Module):
"""单个专家网络"""
def __init__(self, d_model, d_ff):
super().__init__()
self.w1 = nn.Linear(d_model, d_ff)
self.w2 = nn.Linear(d_ff, d_model)
self.act = nn.GELU()
def forward(self, x):
return self.w2(self.act(self.w1(x)))

3.2 负载均衡#

def load_balancing_loss(gating_probs, top_k_indices, n_experts):
"""专家负载均衡损失,防止只激活少数专家"""
batch_size, seq_len = top_k_indices.shape
# 计算每个专家被选中的频率
expert_counts = torch.zeros(n_experts)
for idx in top_k_indices.view(-1):
expert_counts[idx] += 1
expert_counts = expert_counts / (batch_size * seq_len)
# 计算平均门控概率
avg_gating = gating_probs.mean(dim=[0, 1])
# 负载均衡损失:最小化频率与门控概率的差异
loss = n_experts * (avg_gating * expert_counts).sum()
return loss

3.3 完整的 MoE 层#

class MoELayer(nn.Module):
"""GLaM 的 MoE 层"""
def __init__(self, d_model, n_heads, n_experts):
super().__init__()
self.n_experts = n_experts
self.self_attn = MultiHeadAttention(d_model, n_heads)
self.moe = MixtureOfExperts(d_model, n_experts)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
def forward(self, x):
# 标准 Transformer 块 + MoE
x = x + self.self_attn(self.norm1(x))
x = x + self.moe(self.norm2(x))
return x

四、实验结果#

4.1 模型规格#

flowchart TB subgraph GLaM模型系列["GLaM 模型系列"] A1["GLaM 1B<br/>1B 参数, 2 专家, 激活 2, 稀疏度 100%"] A2["GLaM 7B<br/>7B 参数, 64 专家, 激活 2, 稀疏度 97%"] A3["GLaM 65B<br/>65B 参数, 64 专家, 激活 2, 稀疏度 97%"] A4["GLaM 175B (Sparse)<br/>175B 参数, 64 专家, 激活 2, 稀疏度 99%"] end subgraph 密集对比["密集对比"] B1["GPT-3 175B<br/>175B 参数, 无专家, 激活 64, 稀疏度 0%"] end style GLaM模型系列 fill:#4caf50,color:#fff style 密集对比 fill:#f44336,color:#fff

4.2 性能对比#

bar-chart title "GLaM vs GPT-3 零样本性能" x-label "数据集" y-label "准确率 %" data: "GPT-3 175B": 71.2, "GLaM 175B Sparse": 73.2

4.3 训练效率#

flowchart TB subgraph 训练成本对比["训练成本对比"] A1["训练 FLOPs<br/>GPT-3: 3.14e23<br/>GLaM: 1.04e23<br/>节省: 67%"] A2["GPU 内存需求<br/>GPT-3: 很高<br/>GLaM: 中等<br/>节省: ~3x"] A3["训练时间<br/>GPT-3: 基准<br/>GLaM: 1/3<br/>节省: 66%"] end A4["结论:GLaM 用更少的计算达到更好性能"] A1 --> A4 A2 --> A4 A3 --> A4 style 训练成本对比 fill:#ff9800,color:#fff

4.4 推理效率#

flowchart TB A["GLaM 175B Sparse vs GPT-3 175B"] --> B["推理 FLOPs"] A --> C["实际效果"] B --> B1["GPT-3: 全部参数参与"] B --> B2["GLaM: 2/64 专家 = 3.125% 激活"] C --> C1["推理计算量减少约一半"] C --> C2["延迟显著降低"] C --> C3["吞吐量提升"] style A fill:#f44336,color:#fff

五、稀疏 MoE 的优势#

5.1 与密集模型对比#

# 密集模型:每个 token 激活所有参数
class DenseModel:
def forward(self, x):
for layer in self.layers:
x = layer(x) # 所有参数参与
return x
# 稀疏 MoE:每个 token 只激活部分参数
class SparseMoEModel:
def forward(self, x):
for layer in self.layers:
if isinstance(layer, MoELayer):
x = layer(x, top_k=2) # 只激活 2 个专家
else:
x = layer(x)
return x

5.2 可扩展性#

flowchart TB A["MoE 的扩展性"] --> B["增加专家数量"] A --> C["增加专家容量"] A --> D["实际应用"] B --> B1["参数规模增加,但计算量不变"] B --> B2["可以扩展到更多专家"] B --> B3["知识分工更细"] C --> C1["每个专家可以变得更强大"] C --> C2["保持稀疏激活比例"] D --> D1["Switch Transformer 使用 2048 个专家"] D --> D2["ST-MoE 达到 SoTA 性能"] style A fill:#4caf50,color:#fff

六、影响与后续#

6.1 后续发展#

flowchart A["GLaM"] --> B["Switch Transformer"] A --> C["ST-MoE"] B --> D["更多 MoE 模型"] C --> D D --> E["Mixtral 8x7B"] E --> F["Grok-1"]

6.2 应用场景#

  • 大规模预训练:更高效的模型训练
  • 部署优化:稀疏激活降低推理成本
  • 多任务学习:不同专家处理不同任务

常见问题 FAQ#

Q1:GLaM 和 Switch Transformer 有什么区别?

A:GLaM 使用更简单的门控机制(top-2 选择),而 Switch Transformer 使用 top-1 选择(更稀疏)。两者都实现了稀疏激活,但具体设计有所不同。

Q2:稀疏 MoE 的专家数量如何选择?

A:需要平衡专家数量和每个专家的容量。太多专家会导致每个专家太弱,太少专家会失去稀疏性。通常根据模型规模和任务复杂度来选择。

Q3:GLaM 的负载均衡损失是什么?

A:由于稀疏激活可能导致少数专家被频繁选中而其他专家很少被使用,负载均衡损失鼓励所有专家被均匀选中,提高参数利用率。

Q4:稀疏 MoE 会丢失表达能力吗?

A:理论上不会,因为参数规模仍然很大。稀疏激活只是每次只用一部分参数计算,但所有参数都是可学习的,可以根据输入动态选择。


小结#

GLaM 通过稀疏激活的混合专家架构实现了高效扩展:

flowchart TB A["GLaM 核心总结"] --> B["核心创新"] A --> C["效果"] A --> D["影响"] B --> B1["稀疏激活的 MoE 架构"] B --> B2["Top-2 专家选择"] B --> B3["负载均衡机制"] C --> C1["训练成本减少 2/3"] C --> C2["推理计算减少 ~50%"] C --> C3["零样本性能提升"] D --> D1["启发了更多 MoE 研究"] D --> D2["为大规模模型训练提供新思路"] style A fill:#4caf50,color:#fff

参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

GLaM 论文解读:混合专家模型的高效扩展
https://blog.souloss.com/posts/machine-learning/llm-paper-history/glam-mixture-of-experts/
作者
Souloss
发布于
2025-06-26
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时