← 课程库
语言模型与架构模块三 · MoE / 长上下文代码概念16 分钟

MoE 与长上下文

用「稀疏激活」把参数做大、算力不涨;把窗口拉长

学完这节你能:
  • 理解 MoE 的稀疏激活与路由
  • 说清 MoE「省算力但费显存」的原因
  • 了解长上下文的位置外推与二次复杂度问题

混合专家 MoE

MoE 把一个大 FFN 换成很多个「专家」子网络,加一个路由网络。每个 token 只被送到 Top-K 个专家(稀疏激活),所以总参数很大、但每步实际算的只有一小部分。

MoE 路由核心(对应样题填空:用 softmax 成分布,再 topk 选专家)
router_logits = self.gate(x_flat)                 # (tokens, num_experts)
router_probs  = F.softmax(router_logits, dim=-1)  # 沿专家维归一化
topk_w, topk_idx = torch.topk(router_probs, self.top_k, dim=-1)  # 选 Top-K 专家
✗ 常见误解✓ 正确理解
路由用 sigmoid 或沿 batch 维 softmax。路由用 softmax(dim=-1) 沿专家维归一化成互斥概率分布,再 topk。
MoE 显存和稠密模型一样。所有专家参数都要常驻显存,MoE 显存通常远大于同等算力的稠密模型。
MoE 分布式训练不需要通信。专家并行需要 All-to-All 通信把 token 路由到对应专家所在设备。

🔑 MoE 一句话:计算量≈稠密模型(只激活少数专家),但显存远大(所有专家参数常驻)+ 有 All-to-All 通信开销。路由还要靠负载均衡避免专家旱涝不均。

长上下文

  • 难点一:标准自注意力复杂度是 O(n²),序列翻倍计算量翻四倍;KV 缓存也随长度线性涨。
  • 难点二:位置外推——ALiBi 在注意力分数上按距离加线性偏置、RoPE 插值等,让模型能处理比训练时更长的序列。
  • 常用训练法:渐进式训练,先短序列再逐步加长;并需要高质量长文本数据。
自测关于 MoE,正确的是:
// 带走一句话

MoE=稀疏激活(Top-K 专家),算力省但显存大+需通信;长上下文卡在 O(n²) 与位置外推(ALiBi/RoPE 插值)。

独立练习

做到这些,才算完成本节

  1. 为 8 个 token、4 个专家、Top-2 路由写出派发矩阵并统计每个专家负载。
  2. 构造所有 token 路由到同一专家的失败案例,说明容量限制和负载均衡损失的作用。
  3. 在本地运行代码,打印每个关键张量的 shape。
  4. 关闭示例后从空文件重写核心部分,并补一个异常或边界测试。
  5. 合上正文,用自己的话解释核心概念。
  6. 写出一个相似概念,并说明两者最关键的区别。
学习记录

记录本节阅读进度

建议先独立回答自测。读完记录不等于已经掌握。

继续下一课
← 上一课
高效注意力:MQA、GQA、MLA 与 KV 缓存
下一课 →
极大似然与语言建模:MLE 与交叉熵

学完不要急着赶进度:去练习自测,或完成对应的阶段实验