MoE 专家路由攻防实验室
一个能在浏览器里真跑的最小 MoE 路由模型——隐向量 → W_router → softmax → top-k → 容量上限 → expert→device 映射, 看「重复输入」如何把流量堆到一张卡上,以及为什么换个指标结论就翻转
归一化熵 ℋ(P)
0.431
📖 论文口径 · deployment-agnostic
瓶颈卡占比
33.3%
理想均分 12.5% · EP=8
🧮 all-reduce 拖慢倍数
2.67×
由瓶颈卡负载推导,与动画速度无关
🧮 溢出率
88.3%
C=1.25 · 丢弃
路由配置
🧮 真跑架构档位
专家数 E
top-k6
每个 token 激活的专家数
EP 度数(一张卡放几个专家的倒数)
容量因子 C1.25
每专家容量 = C · N·k/E = 120 token
溢出策略
输入(攻击面)
整段 prompt 是同一个 token 反复出现 → 所有 token 隐向量相同 → top-k 完全相同
重复 token 占比85%
(当前模式下由模式决定:全重复 = 100%,正常 = 0%)
prompt 长度 N对应论文 100 → 16k 长度可扩展性实验
seed7
换 W_router
层号0
换该层 router
softmax 温度1.0
越低越尖锐
设备负载(按卡聚合)
分母统一Dev0
0.0%0.00×
Dev1
0.0%0.00×
Dev2
33.3%2.67×
Dev3
0.0%0.00×
Dev4
0.0%0.00×
Dev5
33.3%2.67×
Dev6
16.7%1.33×
Dev7
16.7%1.33×
竖线 = 理想均分 1/EP = 12.5%;右侧倍数 = 该卡负载 ÷ 理想均分和 = 100.0% ✅
瓶颈卡占比
33.3%
理想均分 12.5%
🧮 all-reduce 拖慢倍数
2.67×
= 瓶颈卡占比 ÷ 理想均分
归一化熵 ℋ(P)
0.431
📖 论文口径 · 不随 EP 变化
溢出率
88.3%
丢弃 5424 个 token 路由
机制自检:崩塌是从机制里涌现的吗?
⚠️ 可逐条验输入里不同 token 数
1
共 1024 个 token
实际出现的 top-k 组合数
1
每个 token 选出的 k 个专家
专家占比基尼系数
0.906
0 = 完全均匀,1 = 全挤一个
专家 → 卡 映射
连续放置
E=64 → EP=8
崩塌已确认,且是从机制里涌现的:1 个不同 token 只产生了 1 种 top-k 组合。链路是 「同一个 token 反复出现 →
embedToken 返回同一个隐向量 h →h · W_router 得到同一组 logits → softmax 后选中同一组 top-k 专家 → 全部流量压到这组专家所在的卡上」。没有任何一段代码写着「把流量集中起来」。机制原文 📖 :router 为 G(h) = Softmax(h · W_router); 攻击等价于最小化 D(H^l(X)) = (1/N) · Σ_i ‖ h_i^l − h̄^l ‖²(攻击等价于最小化该层隐状态的离散度 D —— 让所有 token 的隐向量收敛到同一个点)。 本站用「同一个 token → 同一个 h」这条最简路径让 D 归零。
专家负载 Top 12
🧮E18
16.67%Dev2
E20
16.67%Dev2
E42
16.67%Dev5
E46
16.67%Dev5
E51
16.67%Dev6
E62
16.67%Dev7
E0
0.00%Dev0
E1
0.00%Dev0
E2
0.00%Dev0
E3
0.00%Dev0
E4
0.00%Dev0
E5
0.00%Dev0
📖 论文 / 官方读数,照抄不改🧮 浏览器内真算(本页现跑)⚠️ 本站教学模型,不是复现
路由模型(隐向量投影、W_router 分布、容量与设备映射口径)是为让机制可见而做的最小构造,不是任何一篇论文的复现;凡 🧮 数值都与 📖 论文读数分栏呈现,不做数值对齐。 数据快照日 2026-10-12。