Skip to content

5. MoE 架构

导读:MoE (Mixture of Experts) 通过稀疏激活,让模型总参数量翻倍而 FLOPs 不变。它是 GPT-4、Mixtral、DeepSeek-V3 等顶级模型的共同选择。本章从基本公式出发,讲解 Switch Transformer、Mixtral、DeepSeek-MoE 的架构演进,剖析负载均衡、容量因子、Expert Choice 等核心机制,并讨论专家并行的通信开销。

5.1 为什么需要 MoE

5.1.1 稠密模型的 Scaling 瓶颈

按 Chinchilla scaling law,模型 N 与数据 D 等比扩展时性能持续提升。但稠密模型有两大矛盾:

  • 训练成本C=6ND FLOPs,N 翻倍则 FLOPs 翻倍
  • 推理成本:每生成 1 token 都要走完所有 N 个参数,延迟随 N 线性增长

是否存在"参数量大但 FLOPs 不变"的架构?这就是 MoE 的目标。

5.1.2 MoE 的核心思想

人脑约 860 亿神经元,但任意一个时刻只有 1-3% 神经元在放电。同理,对每个 token,没必要让所有参数都参与——只激活与该 token 相关的子模块。

把 FFN 替换为 N专家 (expert) FFN E1,,EN,路由器 (router) 为每个 token 选 K 个专家:

MoE(u)=i=1NGi(u)Ei(u)

G(u) 是稀疏门控,KN,仅 KGi 非零。

参数量:N×FFN,但 FLOPs 仅 K×FFN。Mixtral 8×7B 总参 47B、激活 13B,DeepSeek-V3 总参 671B、激活 37B。

5.1.3 历史脉络

时间模型关键创新
1991Jacobs et al.提出 MoE 概念(adaptive mixture of local experts)
2017Shazeer et al. "Outrageously Large NN"LSTM-based MoE,1.4 万亿参数
2020GShardTop-2 路由,扩展到 600B 参数
2021Switch TransformerTop-1 简化路由,1.6T 参数
2022GLaM1.2T 参数,性能接近 GPT-3
2023Mixtral 8×7B首个公开高质量 MoE,47B/13B
2024DeepSeek-MoE细粒度专家 + 共享专家
2024-12DeepSeek-V3671B/37B,无辅助 loss 负载均衡,MTP 训练

5.2 基本 MoE 数学

5.2.1 路由器与门控

输入 token 向量 uRd。路由器是一个简单线性层:

g(u)=WguRN

其中 WgRN×d 是 router 的权重。gi 是对专家 i 的"亲和度 logit"。

5.2.2 Top-K 选择

把 logits 经过 softmax 得到概率分布,再取最大的 K 个:

Gi(u)={softmax(g(u))iiTopK(g(u),K)0else

或者先取 Top-K 再 softmax(更常见):

TopKMaski={giiTopK(g,K)elseGi(u)=softmax(TopKMask)i

两种做法在 K 较小时(如 K=2)效果相近。

5.2.3 输出聚合

MoE(u)=iTopKGi(u)Ei(u)

Ei 通常是与原 FFN 同样结构的 SwiGLU FFN(参数独立)。

5.2.4 计算量

每 token:

  • Router:dN
  • K 个 expert FFN:KFLOPsFFN

相比稠密 FFN,计算量近似 K/N。Mixtral K/N=2/8=25%;DeepSeek-V3 K/N=8/2563%(不算共享专家)。

显存占用是 N,且推理时所有专家参数都要常驻(无法预测哪个 batch 用哪个专家)。


5.3 Switch Transformer

Fedus et al. (2021) "Switch Transformers" 提出Top-1 路由的极简 MoE:每 token 只选 1 个专家。

5.3.1 设计动机

Top-2 之前是默认(GShard),但:

  • Top-1 实现更简单(无需 softmax 重归一化)
  • 通信只需 1 次 all-to-all
  • 实测 Top-1 + 更多专家 ≈ Top-2 + 较少专家(在固定计算预算下)

5.3.2 公式

Gi(u)={softmax(g(u))ii=argmaxjgj(u)0elseMoE(u)=Gi(u)Ei(u),i=argmaxjgj

注意:保留 softmax 概率作为权重(不是简单的 1.0),让梯度能流过 router。

5.3.3 容量因子 (Capacity Factor)

理想情况下每个专家收到 T/N 个 token(T 是 batch 总 token 数)。但实际分布不均匀,可能某个专家收到远超 T/N 的 token。

引入容量 C:每个专家最多接受多少 token。

C=TKNCF

其中 CF 是容量因子,通常取 1.0-2.0。CF>1 提供 buffer 容纳负载不均。

超容量的 token 怎么办?两种策略:

  1. Drop(Switch 默认):超过 C 的 token 直接走残差(残差连接保留输入),相当于这个 token 跳过 MoE 层
  2. No-Drop:让多余 token 排队,下个 micro-batch 再处理(实现复杂,少见)

Drop 比例称为 token drop rate,监控指标,理想 < 1%。

5.3.4 辅助负载均衡 Loss

如果不约束,router 容易"塌缩"——所有 token 都路由到同一个专家。需要引入辅助 loss鼓励均匀分布。

T 个 token,N 个专家:

fi=1Tt=1T1[i=argmaxjgj(ut)]

fi实际路由到专家 i 的 token 比例(硬分配,不可微)。

Pi=1Tt=1Tsoftmax(g(ut))i

Pi 是 router 给专家 i平均概率(可微)。

辅助 loss:

Laux=αNi=1NfiPi

通常 α=0.01

为什么这个形式

  • 均匀分布时 fi=Pi=1/NfiPi=N(1/N)2=1/N,乘 NLaux=α(min 值)
  • 极端塌缩时 fi=Pi=1,其他都是 0,fiPi=1,乘 N=αN(max 值)
  • 梯度:Laux=αN(fP)f 不可微,作为常数),推动 Pi 向高 fi 的反方向调整——实际上是惩罚"高频专家进一步被路由"

工程实现:

python
def switch_aux_loss(probs, indices, num_experts, alpha=0.01):
    # probs: [T, N] softmax 输出; indices: [T] argmax
    f = torch.zeros(num_experts, device=probs.device)
    f.scatter_add_(0, indices, torch.ones_like(indices, dtype=torch.float))
    f = f / probs.shape[0]              # 实际路由比例
    P = probs.mean(0)                    # 软概率均值
    return alpha * num_experts * (f * P).sum()

5.3.5 Router z-loss

为防止 router logits 数值过大导致 softmax 不稳:

Lz=1Tt=1T(logiegi(ut))2

权重 103。这惩罚 logits 的"绝对大小",让 softmax 在敏感区。

总 loss:

L=LLM+αLaux+βLz

5.3.6 Switch 配置

Switch-T:

  • 编码器层:每隔一层把 FFN 替换为 MoE 层(不是每层都换)
  • N=32,128,512,2048 不等
  • 总参数 1.6T(最大版)
  • 训练吞吐比 T5-XXL 快 7x

5.4 GShard 与 Top-2 路由

GShard (Lepikhin et al. 2020) 是 Switch 之前的方案,Top-2 路由

每 token 选两个专家:

MoE(u)=Gi1(u)Ei1(u)+Gi2(u)Ei2(u)

其中 i1,i2 是 logits 最大的两个,Gi1+Gi2 不一定等于 1(不重新归一),保留路由的"置信度"。

Mixtral 8×7B 用 Top-2,每 token 2 个专家激活。

5.4.1 Top-2 vs Top-1 对比

维度Top-1 (Switch)Top-2 (GShard, Mixtral)
计算量1×FFN2×FFN
通信1× all-to-all2× all-to-all
实现复杂度简单中等
鲁棒性drop 1 个专家就丢信息备份机制
Quality较低较高

实践:

  • N 大(64):Top-1 效率高
  • N 小(16):Top-2 质量更好

5.4.2 Mixtral 8×7B 配置

  • 8 个专家,每个相当于一个 Mistral 7B 的 FFN
  • Top-2 路由
  • d=4096, dff=14336(Mistral 风格 SwiGLU)
  • 32 层 decoder
  • 每层都是 MoE(不像 Switch 隔层)
  • 总参数 47B, 激活参数 13B
  • 仅在 FFN 用 MoE,attention 仍是稠密 GQA

实测 Mixtral 8×7B 在多数 benchmark 上接近 LLaMA-2 70B(13B 激活 vs 70B 激活),是 MoE 路线的关键证据。


5.5 DeepSeek-MoE

Dai et al. (2024) "DeepSeekMoE" 针对传统 MoE 的两个问题:

  1. 知识混杂:每个专家内部学了过多重叠知识
  2. 专家冗余:相同基础能力(如语法、常识)在多个专家重复存储

5.5.1 创新 1:细粒度专家分割

思路:保持总参数不变,把专家做小、变多

设原 MoE:N=8,K=2,dff=4d。细粒度因子 m=4 后:

  • N=mN=32 个专家
  • K=mK=8 个激活
  • dff=dff/m=d

总参数 Ndff2d=32d2d=64d2,与原 84d2d=64d2 相同。

好处

  • 专家组合数大大增加:原 (82)=28 种组合 → 现 (328)=10518300
  • 每个专家更"专精",可以捕获更细致的语义
  • 计算量近似不变(FLOPs ∝ Kdff=8d=Kdff=24d,相同)

DeepSeek-V3 实际配置:256 个路由专家,Top-8 激活。

5.5.2 创新 2:共享专家隔离

某些通用知识(语法规则、常用词义)应该被所有 token 用到,让普通专家学这些是浪费。

引入共享专家 (shared expert):

  • Ns 个共享专家,强制激活(所有 token 都过)
  • Nr 个路由专家,从中选 Kr
MoE(u)=u+i=1NsEi(s)(u)共享专家+i=1Nrgi(u)Ei(r)(u)路由专家

DeepSeek-V3 用 Ns=1,Nr=256,Kr=8

效果:

  • 共享专家承担"基础设施",路由专家专注"特化能力"
  • 路由更平衡(不需要每个专家都掌握通用知识)
  • 实测同 FLOPs 下能力提升 2-5%

5.5.3 创新 3:无辅助 Loss 负载均衡 (DeepSeek-V3)

问题:辅助 loss Laux 与主 loss LLM 冲突,会损害模型质量。

DeepSeek-V3 创新:给每个专家加可调偏置 bi,影响 Top-K 选择,但不进入 gate weight

gi,t={si,tsi,t+biTopK({sj,t+bj}j=1Nr,Kr)0else

注意:

  • TopK 用 si,t+bi 选择
  • gi,t 取的是未加偏置si,t

亲和度评分 si,t=σ(utei)(sigmoid,不是 softmax,让多个专家可以独立有高分)。

偏置更新

每个 micro-batch 后:

  • 若专家 i 过载(fi>1/Nr):bi=γ
  • 若专家 i 欠载:bi+=γ

γ 是更新速率,103

类似自动控制:偏置充当"反馈控制器",把负载推回均衡。

序列级辅助 loss(轻量)

虽然全局靠偏置,但单个序列内仍可能极端不均(如某序列全是数学,把数学专家用爆)。补充一个极小的 sequence-wise loss:

Lseq=αifi(seq)Pi(seq)

α=104(远小于传统辅助 loss 的 102)。

效果:DeepSeek-V3 在 14.8T token 上几乎没有性能损失就实现了负载均衡,是 MoE 工程的重要进展。

5.5.4 路由策略对比

模型NK共享负载均衡
Switch-T32-204810aux loss + z-loss
GShard204820aux loss
Mixtral 8×7B820aux loss
DBRX1640aux loss
DeepSeek-V2160 + 262aux loss + device-level
DeepSeek-V3256 + 181bias-based, 几乎无 aux
Qwen2-MoE64 + 444aux loss

5.6 训练稳定性

5.6.1 路由崩溃 (Route Collapse)

少数专家被频繁选中,其他专家几乎不被激活。

原因

  • 训练初期 router 随机,某些专家偶然胜出
  • 胜出的专家得到更多梯度,更善于处理任意 token,进一步胜出("富者愈富")

解决

  • 辅助 loss / 偏置(DeepSeek)
  • Expert Choice(见下)
  • Token-choice 切换为 expert-choice

5.6.2 Token Drop 损失

容量超限的 token 被 drop,相当于这部分 token "白训了"(仍用残差,但 MoE 层贡献为零)。

监控:每个 batch 的 drop rate 应 < 1%;> 5% 说明容量因子过小。

解决

  • 增大 CF(默认 1.0 → 1.25)
  • Pad-and-Drop:drop 后再补充随机 token 维持 batch shape
  • 训练时用 dropless batching:动态调整 batch 内 token 数

5.6.3 数值不稳

症状:训练中途 loss 突然爆炸、router logits → ∞

原因

  • Router 是线性层,没有归一化,logits 可能任意大
  • softmax 的 exp 在大值时溢出

解决

  • Router z-loss
  • Router 输出 FP32 计算(即使其他用 BF16)
  • Logits clip:gimin(gi,c)

5.6.4 专家初始化

每个专家独立初始化的话,training 初期可能某专家恰好"看起来好"。

技巧:

  • 共享专家从相同种子初始化
  • 路由专家用相同 RMSNorm scale,避免幅度差异

5.7 Expert Choice:换个思路

Zhou et al. (2022) 提出 Expert Choice (EC) 路由:

反向选择:不是 token 选 expert,而是 expert 选 token——每个专家从所有 token 中选 Top-K 个最适合自己的。

5.7.1 公式

T 个 token,N 个专家,每个专家容量 C=Tk/Nk 是平均每 token 被路由的专家数)。

TopTokensi=argTopK({gi(ut)}t=1T,C)

每个专家选自己排名前 C 的 token。

5.7.2 性质

性质Token-ChoiceExpert-Choice
负载均衡需要 aux loss天然均衡
每 token 专家数固定 K不固定(可能 0、可能多)
因果性保留破坏(需要看完整 batch 才能选)
训练适用
推理适用(自回归无法预知后续 token)

EC 的"天然均衡"非常吸引人,但因果性问题让它只能用于训练(实际工程中也少见,因为推理切回 token-choice 会引入分布偏移)。

5.7.3 GShard EC 变体

部分实现用 EC 训练 + token-choice 推理,效果中等。DeepSeek 路线选择了 token-choice + 偏置均衡,不走 EC。


5.8 专家并行 (Expert Parallelism)

5.8.1 基本思路

N 个专家分布到 E 个 GPU 上(EN,每 GPU 持 N/E 个专家)。每 token 可能被路由到任意 GPU 上的专家,需要跨 GPU 通信

5.8.2 All-to-All 通信

每层 MoE 的前向流程:

  1. 本地 GPU 算完 attention,得到 token 表示
  2. All-to-All 1:把每个 token 发到它的目标专家所在的 GPU
  3. 各 GPU 上的专家计算(本地 GEMM)
  4. All-to-All 2:把结果送回原 token 所在的 GPU
  5. 加权求和(如果 Top-K, K>1)

每次 all-to-all 的通信量:TKdbytes(每 token 发 K 份)。

5.8.3 DeepSeek-V3 的 EP

DeepSeek-V3 用 64-way 专家并行(256 专家分到 64 GPU),跨节点 all-to-all 是性能瓶颈。

优化:DualPipe + 通信内核

DualPipe 是 DeepSeek 自创的流水线并行,把 PP 与 EP 的通信完全 overlap:

  • PP 做反向计算时,EP 做下一 micro-batch 的 all-to-all
  • 用 NVLink + IB 双链路,单链路打满

约束:每 token 跨 4 个节点的限制(避免通信爆炸)。这通过节点级路由实现:先选节点(看每节点上专家的最大亲和度),再选节点内专家。

5.8.4 通信开销估算

T batch token, K Top, d hidden, E EP 数:

每层 MoE 通信量(FP16):

2TKd2 B=4TKd

DeepSeek-V3:T=40968=32768(全局 batch 32K token),K=8, d=7168,每层每方向:43276887168=7.5 GB

61 层(含 MoE 层)→ 每个 step 单方向通信 460 GB。

H800 IB 带宽 50 GB/s(双向 400 Gb/s),460/50=9.2 s(忽略 overlap)——这就是为什么必须 overlap。


5.9 MLA (Multi-head Latent Attention)

DeepSeek 的另一个创新(虽然不是 MoE 本身),与 MoE 一起构成 DeepSeek-V2/V3 架构。

5.9.1 动机

MoE 大幅压缩了 FFN 参数(37B 激活/671B 总),但 attention 部分仍然稠密。在长上下文推理时,KV-Cache 成为新瓶颈。

GQA-8 已经把 KV 缩小 8 倍,能否更激进?

5.9.2 MLA 设计

把 K、V 投影到一个低维 latent 向量 c

ct=WDKVxtRdc,dc=512

只缓存 ct(每 token 512 维)。

推理时再"解压":

kt=WUKctRhdhvt=WUVctRhdh

由于注意力是 qk=qWUKc,可以把 WUK 吸收到 WQ 中:W~Q=WQWUK,于是

qk=xWQWUKc=xW~Qc

直接在 latent 空间做注意力。

5.9.3 KV-Cache 对比

DeepSeek-V2 配置:d=5120,标准 MHA 的 KV =2hdh=2128128=32768/token;MLA 仅 dc=512/token,减小 64 倍

加上 RoPE 兼容设计(c 不带位置信息,单独有 kR 带 RoPE),实际 KV =dc+dh=512+64=576/token,减小 56 倍

5.9.4 MLA + MoE = DeepSeek-V3

V3 配置:

  • 61 层(其中 58 层 MoE,3 层稠密)
  • d=7168
  • 注意力:MLA, h=128, dh=128, dc=512
  • MoE:256 路由专家 + 1 共享,Top-8
  • 671B 总参,37B 激活
  • 14.8T token 训练,FP8 mixed precision
  • 上下文 128K(YaRN 扩展)

效果:在多数 benchmark 上比肩 GPT-4o,开源、可商用,是 2024 年最重要的开源 LLM。


5.10 工程实现要点

5.10.1 PyTorch 版 MoE 层

python
class MoELayer(nn.Module):
    def __init__(self, dim, hidden_dim, num_experts, top_k):
        super().__init__()
        self.num_experts = num_experts
        self.top_k = top_k
        self.gate = nn.Linear(dim, num_experts, bias=False)
        self.experts = nn.ModuleList([
            FFN(dim, hidden_dim) for _ in range(num_experts)
        ])

    def forward(self, x):
        # x: [B, T, d]
        B, T, D = x.shape
        x_flat = x.view(-1, D)              # [B*T, d]
        N = x_flat.size(0)

        # Router
        logits = self.gate(x_flat)           # [N, E]
        topk_val, topk_idx = logits.topk(self.top_k, dim=-1)  # [N, K]
        topk_val = F.softmax(topk_val, dim=-1)

        # 朴素实现:遍历专家
        out = torch.zeros_like(x_flat)
        for e in range(self.num_experts):
            mask = (topk_idx == e).any(dim=-1)
            if not mask.any():
                continue
            tokens = x_flat[mask]
            expert_out = self.experts[e](tokens)
            # 加权
            weights = topk_val[mask] * (topk_idx[mask] == e).float()
            weight = weights.sum(-1, keepdim=True)
            out[mask] += expert_out * weight

        return out.view(B, T, D)

朴素版有 Python 循环开销大、负载不均的问题。生产用 Megatron-CoreDeepSpeed-MoE,融合内核 + 高效 all-to-all。

5.10.2 Switch-style aux loss

python
def switch_aux_loss(logits, top1_idx, num_experts, alpha=0.01):
    probs = F.softmax(logits, dim=-1)        # [N, E]
    f = torch.zeros(num_experts, device=logits.device)
    f.scatter_add_(0, top1_idx, torch.ones_like(top1_idx, dtype=torch.float))
    f = f / probs.size(0)                      # 实际比例
    P = probs.mean(0)                          # 软概率均值
    return alpha * num_experts * (f * P).sum()

5.10.3 Router z-loss

python
def router_z_loss(logits, beta=1e-3):
    logsumexp = torch.logsumexp(logits, dim=-1)
    return beta * (logsumexp ** 2).mean()

5.10.4 DeepSeek-V3 风格的 bias-based router

python
class DeepSeekRouter(nn.Module):
    def __init__(self, dim, num_experts, top_k, gamma=1e-3):
        super().__init__()
        self.num_experts = num_experts
        self.top_k = top_k
        self.gamma = gamma
        self.gate = nn.Linear(dim, num_experts, bias=False)
        # bias 不是 nn.Parameter,是手动维护的 buffer
        self.register_buffer("bias", torch.zeros(num_experts))

    def forward(self, x):
        logits = self.gate(x)                  # [N, E]
        scores = torch.sigmoid(logits)          # 用 sigmoid 而非 softmax
        # Top-K 选择基于 scores + bias
        adjusted = scores + self.bias
        topk_val, topk_idx = adjusted.topk(self.top_k, dim=-1)
        # gate weight 用未加 bias 的 scores
        weights = scores.gather(-1, topk_idx)
        weights = weights / weights.sum(-1, keepdim=True)
        return topk_idx, weights, scores

    @torch.no_grad()
    def update_bias(self, topk_idx):
        # 每 step 后调用
        N = topk_idx.numel() / self.top_k
        f = torch.zeros(self.num_experts, device=topk_idx.device)
        f.scatter_add_(0, topk_idx.flatten(), torch.ones_like(topk_idx.flatten(), dtype=torch.float))
        f = f / (N * self.top_k / self.num_experts)  # 归一化到 1.0 = 平均
        # 过载(f > 1)→ bias 减;欠载 → bias 加
        self.bias -= self.gamma * (f - 1.0).sign()

5.11 主流 MoE 模型一览

模型总参激活N + 共享K负载均衡备注
Switch-T1.6T~7B32-20481aux + z编码器,T5 风格
GShard600B-20482aux翻译模型
GLaM1.2T96B642aux稠密性能
Mixtral 8×7B47B13B82aux完全开源
Mixtral 8×22B141B39B82aux22B 基座
DBRX132B36B164auxDatabricks
Arctic480B17B1282auxSnowflake
DeepSeek-V2236B21B160 + 26aux + deviceMLA + DeepSeekMoE
DeepSeek-V3671B37B256 + 18bias-basedMLA + FP8 + MTP
Qwen2-MoE57B14B64 + 44aux阿里开源
MiniMax-M1456B45.9B322aux混合 attention

5.12 MoE 的局限

5.12.1 显存仍受总参数约束

虽然 FLOPs 仅 K/N,但所有 N 个专家的参数都要常驻显存——总参数 671B 的 DeepSeek-V3,推理仍需 ~1.4 TB 显存(FP16)。

部署上需要:

  • 跨 GPU 切分(专家并行)
  • 量化(FP8 / INT4)
  • offload(CPU / NVMe)

5.12.2 推理动态性

每 batch 的负载分布不可预测,可能某 GPU 闲、某 GPU 忙。这给推理调度带来挑战:

  • vLLM、TensorRT-LLM 都在加 MoE 优化
  • DeepSpeed-MoE 推理引擎专门优化 all-to-all
  • 实际部署 MoE 推理 throughput 通常低于同尺寸 dense 模型

5.12.3 训练超大 batch 的依赖

MoE 需要大 batch 才能让所有专家都被训到。Mixtral / DeepSeek-V3 都用 token batch ≥ 16M(4096 seq × 4096 micro_batch × DP)。这要求大集群。

5.12.4 微调难度

SFT、RLHF 阶段 batch 通常较小,MoE 容易出现专家激活不均,效果可能比 dense base 差。常见做法:

  • 微调时冻结 router
  • 上采样(同 prompt 重复几次)
  • 用 expert-choice 训练以保证均衡

5.13 本章小结

  1. MoE 通过稀疏激活解耦参数量与 FLOPs,是当前 SOTA 模型的标配。Mixtral 47B 用 13B 激活、DeepSeek-V3 671B 用 37B 激活。
  2. 路由机制从 Top-1 (Switch) 演进到 Top-K (GShard, Mixtral) 再到细粒度 + 共享 (DeepSeek)。
  3. 负载均衡经历了 aux loss → bias-based 的演进,DeepSeek-V3 的 bias-based 几乎无 quality 损失。
  4. 训练稳定性靠 z-loss、FP32 路由、专家初始化。
  5. 专家并行 (EP) 必须配合 all-to-all 通信,DualPipe 等技术做计算-通信 overlap。
  6. MLA + MoE 是 DeepSeek 路线的精髓:MLA 压 KV-Cache,MoE 压 FFN,整体高效。

下一章讨论分布式训练的全景。


5.14 思考题

  1. 细粒度专家的临界点:DeepSeek-V3 用 N=256,K=8 的细粒度配置。请分析当 N(同时 K 保持 K/N 不变)时会出现什么问题?给出一个权衡分析(如 router 的 dN 计算量、per-expert capacity 退化等)。

  2. 辅助 loss 与主 loss 冲突:传统 MoE 的 Laux=αNfiPiLLM 共同训练,会让 router 偏向"均匀分布"而非"准确分布"。请定量分析当 α=0.01N=256 时,辅助 loss 在总 loss 中的占比,并解释为什么 DeepSeek 的 bias-based 方法能避免此冲突。

  3. MLA vs GQA 的工程权衡:MLA 把 KV-Cache 减小 ~50 倍,但引入了 WUK,WUV 两个解压矩阵的参数量与计算开销。设 d=7168,h=128,dh=128,dc=512,请计算 MLA 在训练时 attention 部分的总参数量与 FLOPs,与同尺寸 GQA-8 对比。

  4. 专家并行的通信瓶颈:64 卡 EP,每 step 需要 460 GB 单向 all-to-all 通信,IB 带宽 50 GB/s 单链路。若不做 overlap,单 step 通信耗时 9.2 s。请提出至少 3 种 overlap 策略(参考 DualPipe),并估算理想情况下能掩盖多大比例的通信。

基于 MIT 协议发布