GitHub - Zmmfly/loop_moe: Loop MoE LLM research — Human ideas, GLM-5.2 builds, GPT-5.5 reviews · GitHub
Skip to content

Zmmfly/loop_moe

Repository files navigation

Loop MoE

MoE x Loop Transformer 混合架构研究:在权重共享循环体内做分段重路由专家选择,并研究 outer/inner 双动态 ACT halt。当前目标是在 RTX 4060 Laptop 8GB 上用小模型验证可训练性、公平对照和参数效率边界。

项目是什么

Loop MoE 把 MoE 的稀疏专家选择放进共享权重的循环 Transformer 中:模型不堆叠很多独立层,而是让同一个 LoopBody 重复执行 D 步;每个路由段选择 Top-M 专家,段内复用这组专家,段边界重新路由。路由间隔 L 是连续轴:L=1 表示每步换专家,L=T 表示只入口路由一次,1<L<T 是主研究对象“分段重路由”。

总迭代口径来自 docs/loop_arch.mdN = Σ_i M · L(i),其中 M 是每轮激活专家数,L(i) 是第 i 个外层路由段的专家循环步数。

当前阶段的简要判断:Loop MoE 能学习、能收敛;在同计算量语言建模对照下,普通非循环 MoE 仍更强;双动态 ACT halt 明确优于固定深度 Loop;同 total params 的 Round 11 单点对照给出参数效率正信号,但还没有证明 Loop 位于 total-fair Pareto 前沿。

架构

输入 -> Dense stem(2) -> 共享 LoopBody(A+B) x D 步 -> final(1) -> head(tied)
                          |
               Block A/B: 独立 attention + router,共享专家池(E=8 + shared)
                          |
               分段重路由: 每 L 步换专家;段内版本 B 共享状态聚合
               双动态 ACT halt: outer 控总深度,inner 控段边界
               Loop timestep encoding: alpha/beta gates + loop_emb
  • 版本 B:共享状态聚合。当前实现不是“每个专家独立维护一条 hidden trajectory”的版本 A,而是选中的 Top-M 专家每步共同作用在同一个 hidden state 上,段内复用同一组专家/权重,段边界重新路由。
  • 双动态 ACT halt。Round 9 起使用 ACT hazard/survival:p_t/s_t/q_tΣq=1h_final=Σq·h_t,LM loss 从 h_final 出 logits。outer halt 决定最终有效深度,inner halt 决定段边界 soft endpoint。
  • OrdinaryMoETransformer。Round 7 引入普通非循环 Transformer-MoE baseline:独立 N 层、每层独立权重、每层每 token 独立路由,无 Loop、无段缓存、无 timestep gates。它用于隔离“MoE 稀疏容量”和“Loop 权重共享循环”各自的贡献。

研究进展

阶段 轮次 做了什么 当前读法
可行性 1 C0-C3 基础实现 C0-C3 都能从随机基线 ln(65)≈4.17 降到约 2.4,说明架构可训练
工程口径 2 bf16、公平对照、路由日志 5000 iters 后 C0/C1/C2/C3/CV1 val loss 约 1.616-1.630,MoE 与 dense 接近
路由诊断 3 aux 扫描、多 seed、MI aux 主要影响均衡和确定性,mi_content_nmi0.10;active 公平下 dense 约优 0.14
规模/任务 4 S256 长训、TinyStories Shakespeare dense 优势缩小到 best 0.026;TinyStories S256 的 MoE-dense +0.0106,未显著
路由增强 5 memory router 单 seed 方向性负结果:memory 未提高 content routing,loss 略差;不能排除其它 router 机制
动态段长 6a 内层 ACT shakespeare S256 无 loss 优势,动态段机制工作但证据有限;不应写成 ACT 被排除
放大验证 6b S512 TinyStories MoE-dense −0.0053,3 seed 同向但未达 2σ;这是 active-fair、非 total-fair 的首个方向性正信号
架构隔离 7 Ordinary MoE + FLOP-fair S256 FLOP-fair 下 OMOE19 显著优于 fixed Loop,Loop−OMOE +0.0191;同计算量 Loop 无优势
双动态初版 8 outer+inner halt dd≈fixed,dd−fixed +0.0005mean_D_eff=8.0 且 halt 未触发,说明 objective 没学到按需停机
ACT 修正 9 ACT halt objective dd 显著优于 fixed,dd−fixed −0.0122mean_D_eff=6.94effective_flop_proxy=0.868、inner halt 约 24%
普通 MoE 复验 10 dd vs OMOE 双口径 同计算量下 OMOE 仍优于 dd:FLOP-fair +0.0078,effective-flop-fair +0.0097
参数效率 11 total-fair 单点对照 同 total 7.7M 下 dd−OMOE_TOTAL −0.3375;但 OMOE_TOTAL 是 active 2.9M 的单点弱基线,Pareto 待扫

三口径结论

口径 已验证结果 应如何解读
FLOP/compute-fair(同计算量) OMOE > dd,差距约 +0.008~0.010 普通非循环 MoE 的独立多层在当前 S256 TinyStories LM 计算受限口径更高效
total-fair(同 total params,参数效率口径) dd >> 单点 OMOE_TOTAL,dd−OMOE_TOTAL = −0.3375 这是参数/存储效率正信号,不是计算效率结论;当前只击败 n=2/h=768/M=2 的弱 OMOE_TOTAL
dd vs fixed(动态机制口径) dd > fixed,dd−fixed = −0.0122 双动态 ACT halt 有效,按需停机优于固定深度;但不能推出 dd 优于 Ordinary MoE

当前价值定位应保持克制:Loop MoE 的候选优势是参数/存储受限但允许更多串行计算的场景。Round 11 证明了 Loop 击败一个 total-fair 单点弱基线,尚未证明击败 Ordinary MoE 的 total-fair Pareto 前沿;Round 12 需要做 loss-vs-total-params sweep。

代码结构

src/loop_moe/
  config.py            LoopMoeConfig + C0-C3/CV1/OMOE/S 预设 + active_params_estimate
  model.py             LoopMoEFFN(版本B/分段重路由/inner ACT) + LoopBody(A/B复合)
                       + LoopMoETransformer(权重共享循环 + 双动态 ACT halt)
                       + OrdinaryMoETransformer(普通非循环 MoE baseline)
  moe_utils.py         topk_route / load_balance_aux_loss / count_params / estimate_flops
  baselines.py         build_model 统一入口(Loop/OMOE/dense)
  train.py             AdamW + cosine + bf16 + 梯度累积 + halt/ACT CLI
  analyze.py           loss 曲线、专家使用、转移矩阵、MI、effective_depth、dh_norm
scripts/
  prepare_shakespeare.py / prepare_tinystories.py
tests/                 每模块独立测试;当前基线 358 collected,354 passed / 4 skipped
experiments/           实验产物(log/meta/samples/plots);大文件 gitignore

使用

环境约束:Python 3.14 + PyTorch 2.12.1+cu130;RTX 4060 Laptop 8GB;训练默认用 .venv/bin/python、bf16 和梯度累积。

.venv/bin/python -m loop_moe.train --config C2 --out experiments/... \
    --max-iters 5000 --batch 16 --grad-accum 2 --seed 42 \
    --data-dir data/tinystories_char --eval-batch 16 --aux-weight 0.0001

.venv/bin/python -m loop_moe.train --config C2 --outer-halt --inner-loop-halt \
    --out experiments/... --max-iters 5000 --batch 16 --grad-accum 2 --seed 42

.venv/bin/python -m loop_moe.analyze DIR1 DIR2 ...
.venv/bin/python -m pytest

数据:首轮 shakespeare_char,Round 4 起主要使用 tinystories_char

文档索引

  • 架构公式:docs/loop_arch.md
  • 原始设计对话:docs/ChatGPT_MoE_mixed_loop.md
  • 架构 spec:docs/superpowers/specs/2026-06-25-loop-moe-design.md
  • 实现计划:docs/superpowers/plans/2026-06-25-loop-moe-round1.md
  • Codex 架构审阅:docs/review/2026-06-25-loop-moe-architecture-review.md
  • 实验报告:docs/report/round1-2026-06-25-feasibility.mddocs/report/round11-2026-06-28-total-fair.md
  • 下一步计划:docs/nextplan/round11-2026-06-28-nextplan.md,主题是 Round 12 Pareto sweep

Codex 协作

  • 查码优先使用 CodeGraph:MCP codegraph_explorecodegraph explore "<问题或符号>"
  • Claude Code 环境中,用 Agent(subagent_type="codex:codex-rescue") 调 Codex;prompt 显式带 --wait --model gpt-5.5 --effort xhigh
  • 制定下一轮计划后,必须交 Codex 审核计划文件;Codex 只能直接修改 docs/nextplan/*.mddocs/superpowers/plans/*.md,代码和其它文件只能给建议。
  • 每轮结束后,把关键上下文和结果交 Codex 复核,再决定继续自定计划还是让 Codex 制定下一轮计划。
  • 插件不可用时,CLI 只是后备:codex exec -m gpt-5.5 -c model_reasoning_effort=xhigh "<prompt>"

关键技术决策

  • 版本 B 作为主线:共享 hidden state 更稳、省显存、对照干净;版本 A(专家独立 hidden trajectory)只作为后续诊断实验。
  • 公平口径分离:active-fair、FLOP/compute-fair、total-fair 不混用;Round 11 的 total-fair 是参数效率口径,不是计算效率口径。
  • Ordinary MoE baseline 必要:dense vs MoE 无法隔离 Loop 架构贡献;Round 7 后必须用普通非循环 MoE 做架构对照。
  • ACT halt objective 替代 hard threshold:Round 8 halt 没学,Round 9 用 hazard/survival + soft remainder 后 dd 才显著优于 fixed。
  • Round 11 结论收窄:OMOE_TOTAL 是单点弱基线,Loop 的 Pareto 优势还待 Round 12 sweep 验证。

About

Loop MoE LLM research — Human ideas, GLM-5.2 builds, GPT-5.5 reviews

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages