ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Parameter Golf 深度循环架构研究复盘:Noisy QAT、3x3 循环配置与“循环税“的量化证据(PR 363)

Parameter Golf 深度循环架构研究复盘:Noisy QAT、3x3 循环配置与“循环税“的量化证据(PR 363)

【免费下载链接】parameter-golf

Train the smallest LM you can that fits in 16MB. Best model wins!

项目地址:https://gitcode.com/gh_mirrors/pa/parameter-golf
点击查看免费下载

本篇文章以 OpenAI Parameter Golf 竞赛非记录提交 PR #363(Depth Recurrence + Mixed-Precision Quantization)为对象,系统复盘一次"用权重共享换有效深度"的完整失败实验:包括 Middle-Cycle 循环架构的 Stem/Core/Tail 布局、3x3 与 2x5 两种循环配置的受控对比、原创的 Noisy QAT 量化感知训练技术(量化 gap 从 0.37 bpb 压缩到 0.002 bpb),以及 12 项带具体数字的负面结果。读完本文,你将掌握为什么"参数高效"的循环架构在 10 分钟训练赛制下反而落后平面模型 0.025 bpb,以及哪些结论可以直接迁移到其他深度循环 / 权重共享架构的实践中。


背景:在 16MB / 10 分钟约束下,循环深度为什么诱人

Parameter Golf 的赛制是:在 8xH100 上训练不超过 10 分钟,把"模型权重 + 代码"打包进 16,000,000 字节(十进制 16MB,非 16 MiB)的 artifact,在 FineWeb 验证集上以 tokenizer 无关的 bits-per-byte(bpb)作为唯一评分指标。项目根 README.md 明确欢迎参数共享、深度循环(depth recurrence)、低秩训练、激进量化等非常规路线。

深度循环的核心论点是:把同一个 transformer block 在前向中复用多次,每一字节 artifact 就能买到更多"有效深度"。这一思路的谱系包括 Universal Transformer(Dehghani et al., 2019)、Alibaba Huginn、Samsung TRM,以及竞赛内的 PR #325(Aum08Desai,1.1462 bpb 的循环 2x5 Middle-Cycle 提交)。PR #363 的作者 Evangeline Kamin 从 PR #325 fork 出发,历时 4 天、约 35 次实验,在 8xH100 SXM 裸金属、2xH100、RTX 3070、A4500 等多种硬件上验证了这一命题,最终结论是:在竞赛约束下循环架构不具竞争力——受控对比中平面 11 层模型比循环 3x3 模型领先 0.025 bpb(1.1648 vs 1.1894)。有趣的是,三位独立研究者(作者、Frosty40、Ciprian-Florin Ifrim)从不同起点得出了相同结论。

值得先说明本仓库的记录形态:该 PR 的说明文档位于 records/track_non_record_16mb/2026-03-21_DepthRecurrence_MixedPrecisionQuant/README.md,其 submission.json 记录了本次非记录提交的元数据(val_bpb 2.3876、val_loss 4.0314、bytes_total 1,461,542,作者 evangelinehelsinki)。文档中提到的训练脚本名是pr325_train_gpt.py,仓库实际收录的可复现脚本为 train_gpt.py,下文会指出两者环境变量名的差异。


架构:Middle-Cycle 循环布局与其源码实现

Stem / Core / Tail 三段式布局

PR #325 提出的 Middle-Cycle 架构把层切成三段,参数节约全部来自中间的共享段:

[Stem blocks] → [Core blocks × R repeats] → [Tail blocks]
  • Stem blocks(茎段):处理原始 embedding 的唯一层,不共享;
  • Core blocks(核心段):共享层,在前向中执行 R 次,参数节约的来源;
  • Tail blocks(尾段):产出最终表示的唯一层,不共享;
  • U-Net skip connections:Stem 输出以可学习权重加到 Tail block 输入上。

文档重点测试了两种配置(模型维度均为 640d、8 注意力头 + 4 KV 头 GQA、3x MLP 扩展、tied embedding + vocab 1024,并沿用 PR #325 基线的 SmearGate + BigramHash + RoPE):

配置StemCoreRepeatsTail有效深度唯一 block 数
3x33333129
2x52252166

2x5 是 fork 自 PR #325 的起点;3x3 则源自对 Frosty40 的 Frugendorff(PR #499,6 block × 2 repeats)的研究。3x3 之所以最终胜出,核心直觉是"更多唯一 block、更少重复次数 = 每个参数买到更多表征多样性",详见下文受控对比。

仓库源码中的对应实现

收录脚本 train_gpt.py 中,循环架构由RecurrentGPT(train_gpt.py)实现,关键设计:

  • 循环调度表:block_schedule = [i % num_unique_blocks for i in range(effective_depth)](L862-L863),由NUM_UNIQUE_BLOCKS(唯一 block 数)与EFFECTIVE_DEPTH(虚拟层数)两个超参驱动;
  • 编码器/解码器切分 + U-Net skip:num_encoder_layers = effective_depth // 2,skip 权重为可学习参数(L837-L842);
  • Per-depth LoRA 适配器:每个虚拟深度挂一组 Q/V 低秩适配(DepthLoRA,L771-L793),由DEPTH_LORA_RANK控制(0 为关闭),up 分支零初始化保证起始无扰动;
  • BigramHash:把相邻 token 对哈希进 embedding 表(bigram_emb+bigram_proj,L866-L870),由BIGRAM_BUCKETS/BIGRAM_DIM控制;
  • XSA(Exclusive Self Attention):仅作用于最后 N 个虚拟层(xsa_last_n,L872-L877),把注意力输出中与 value 对齐的分量投影掉。

这些超参全部集中在Hyperparameters类中(L74-L136),通过环境变量注入,为复现与扫描提供了统一入口。优化侧使用 Newton-Schulz 迭代的 Muon 优化器(zeropower_via_newtonschulz5,L142-L153)配分参数组学习率(token/embedding 用 Adam,矩阵用 Muon,标量/控制张量用 Adam)。


两大"循环税":循环架构在竞赛约束下失败的结构性原因

文档把失败归因于两个结构性惩罚,并称之为the two taxes of recurrence(循环的两项税)。强调"结构性"的意思是:这不是超参没调好或实现有 bug,而是固定时间预算 + artifact 大小限制共同作用下的必然结果。

税 1:量化误差复合(Quantization Compounding)

共享权重只存储一次、只量化一次,但推理时量化误差会穿过每一次循环迭代:3x3 每个 core block 的误差被看到 3 次,2x5 则被看到 5 次,且由于上一轮输出是下一轮输入,误差以非线性方式复合。作者实测的放大倍数约为3 个循环周期内放大 900 倍;int6 的逐行误差大约是 int8 的 4 倍,这个差距穿过循环就变成灾难。

Day 1 的 8xH100 首跑给出了最直观的证据:量化前 bpb 2.07(对该架构算不错),量化后 3.22,1.14 bpb 的量化 gap。社区成员 boreas 的总结一针见血:"所以你没法利用更小的尺寸来放大循环,因为复合的量化税挡在前面?"——正是如此。

税 2:步时开销(Step Time Overhead)

每一次循环迭代都增加 wall-clock 时间。8xH100 上的换算:

  • Flat 11L:600s / 0.112s ≈5375 steps
  • Looped 3x3:600s / 0.144s ≈4175 steps

循环模型少训练了约 22% 的步数,而在"每步都算数"的 10 分钟赛制里这是残酷的惩罚。

为什么尺寸优势无法弥补

循环模型 artifact 小 0.8 MB(14.5 vs 15.3 MB),能否用这部分 headroom 升级精度来填平 0.025 bpb 的差距?文档给出明确否定:把 0.8 MB 参数从 int5 升到 int8 大约只换回 0.005 bpb(基于全竞赛的量化 delta 经验),比 0.025 的缺口差一个数量级。权重共享省下的参数是真实的,但不足以同时抵消两项税。


受控对比:同一硬件、同一技巧下,平面 11L 完胜循环 3x3

这是文档中最具决定性的实验:8xH100 SXM 裸金属、全部 int5 量化、全 MHA(8 KV 头)、BigramHash 4096、warmdown 2000、同一 seed、同一评估管线(滑动窗口 stride 64、T=0.90)。

指标Flat 11L 512dLooped 3x3 640dDelta
bpb(滑动窗口)1.16481.1894+0.025(循环更差)
Artifact 大小15.3 MB14.5 MB-0.8 MB(循环更小)
训练步数53754175-1200 步(循环更少)
ms/step112144+32 ms(循环更慢)

同时期 Frosty40 在 Discord 公开了自己的结论:"yeah i did a ton of a/b testing and its not improving anything, it was other modifications... the recursion in this form is a bust",并补充说那些加在"循环层"上的修改本身有效,只是循环层在浪费周期。Ciprian-Florin Ifrim(三元量化提交,250+ 实验)的评估深度循环扫描显示,5 种不同重复次数的 bpb 总跨度仅0.0009 bpb,纯属噪声。三位独立研究者、三种架构、三种优化路线,结论一致。

8xH100 上的完整结果汇总如下(含 3-seed 均值口径):

配置滑动 bpbStepsms/stepArtifact16MB 内?
Flat 11L tuned(fullMHA+bg4096+wd2000, all-int5)1.1648537511215.3MBYES
Flat 11L baseline(GQA, bg2048, wd1500, all-int5)1.1671555010815.0MBYES
Flat 11L(int6, 超预算)1.1600555010817.2MBNO
Looped 3x3 best(EMA+MTP+int5+GPTQ-lite)1.1787420014315.6MBYES
Looped 3x3 tuned(与 flat 胜者同配置)1.1894417514414.5MBYES
Looped 2x5(PR #325 fork, 3-seed 均值)1.1834420014315.6MBYES

作为赛况参照(约 640 个 PR 时的 meta):总体领先者 #573 以多遍流式 legal TTT 拿到 1.0523;无 TTT 的平面堆栈最佳约 1.1154(#609)与 1.1171(#593);起点 PR #325 为 1.1462;本 PR 最佳循环结果 1.1787,比最佳无 TTT 平面提交落后 0.063 bpb——这就是该约束下循环的代价。


幸存发现 1:Noisy QAT——把循环架构的量化 gap 从 0.37 压到 0.002 bpb

这是 PR #363 最核心的原创贡献,也是该 PR 存在的理由。

问题:STE 假量化在循环架构上失效

标准 STE(Straight-Through Estimator)QAT 在前向中模拟量化、反向直通。这对"每个权重矩阵只用一次"的平面架构有效;但对循环架构,误差会在 N 次迭代中传播复合。文档测得 int8 误差经 3 次循环放大约900 倍,Day 1 首跑因此出现 2.07 → 3.22 的灾难性量化 gap。

修复:注入与 int8 逐行量化误差同量级且可微的均匀噪声

与 STE 的"前向假量化、反向直通"不同,Noisy QAT 在前向注入可微的均匀噪声,让模型学到对量化尺度扰动鲁棒的权重配置。文档给出的核心代码(仅用于循环 core block 的CastedLinear.forward()):

# In CastedLinear.forward(), for loop core blocks only: with torch.no_grad(): amax = self.weight.float().abs().amax(dim=1, keepdim=True).clamp_min(1e-12) step_size = amax / 127.0 noise = (torch.rand_like(w) - 0.5) * step_size.to(w.dtype) w = w + noise

三个关键属性:

  • 可微:与 STE 不同,梯度穿过噪声流动,模型学到对量化尺度扰动鲁棒的配置;
  • 循环感知:只作用于 core(共享)block,不作用于 stem/tail;
  • 校准过:噪声量级与 int8 逐行量化步长相匹配,是"贴齐实际导出格式"的正则化,而非任意噪声。

结果:量化 gap 从0.37 bpb 塌缩到 0.002 bpb,约 185 倍改善;推理时零成本,且对任何深度循环架构原则上可迁移。

一个重要的边界条件(对应负面结果 #10):在 Middle-Cycle + int5 导出的组合下,按 int8 校准的 Noisy QAT 反而轻微有害(+0.006 bpb),因为噪声量级对 int5 的步长来说是错的——噪声必须与真实导出精度匹配。

收录脚本中的对应实现

需要如实说明:仓库收录的 train_gpt.py 中,QAT 路径是按步数分片启用的 STE 假量化:_fake_quantize_int6_ste()(L597-L605)实现前向 int6 假量化 + 反向直通;全局开关_QAT_ACTIVE(L49)由QAT_FRACTION控制,在训练末尾max_wallclock_ms * (1.0 - qat_fraction)时刻激活(L1174-L1180),CastedLinear.forward()(L621-L627)在训练中且开关打开时套用。文档中的 Noisy QAT 是该 PR 的原始方法叙述,与收录脚本中这条 STE 路径是两种不同实现,读者复现时需区分。值得一提的插曲是:文档披露 26 模型代码审查关曾揪出一个global _QAT_ACTIVEbug——QAT 可能从未真正运行过,这类全局开关的正确性值得每一位实验者警惕。


幸存发现 2:SWA 在 Middle-Cycle 上"反转"量化 gap

这是最诡异的结果:Stochastic Weight Averaging(SWA,周期性平均模型 checkpoint)使权重分布更平滑,在 Middle-Cycle 架构上,量化后的 bpb 有时反而优于量化前。

作者假说:SWA 把权重推向更平坦的最小值,使各行的权重分布更均匀;逐行量化恰好擅长处理均匀分布,SWA 的平滑效应意外地"补偿"了量化噪声,而不是与之对抗。对任何把 SWA 与激进量化方案结合的实践者,这都是一条可能被复用的线索。


幸存发现 3:3x3 优于 2x5——更多唯一 block、更少重复

这是对循环 transformer 实践者最有操作价值的一条。受控对比(单 GPU、完全相同的超参):

配置有效深度bpbArtifact 大小ms/step
3x3(3 core × 3 repeats)121.346211.9 MB236
2x5(2 core × 5 repeats)161.351913.2 MB260

3x3 在全部维度胜出:-0.006 bpb、-1.3 MB、-24 ms/step。2 个共享 block 重复 5 次,模型只能组合出 2 个不同的计算"程序";3 个共享 block 重复 3 次则有 3 个不同程序,多样性多 50%,代价仅多一个 block 的参数。推论是:在参数预算内优先增加唯一 block 数,而非重复次数。


一条免费的经验教训:永远用满全部 80 个训练分片

Day 3 中作者在 8xH100 VM 上反复拿到 1.28 bpb,而同一份代码在 Hyperbolic 裸金属上是 1.18。做了 A/B 测试、把 LeakyReLU 做成可配置、排查代码回归,全部无果。根因出人意料:只下载了 1 个训练分片而不是 80 个。模型在记忆单个分片,泛化极差:

  • 80 个分片:1.1914 bpb
  • 1 个分片:约 1.30 bpb

仅训练数据多样性一项就值 0.1 bpb。数据下载方式可参考 data/README.md(cached_challenge_fineweb.py --train-shards N,默认 80 个分片 / 8B tokens)。这条忠告对任何参赛者都成立:永远用满全部 80 个 shards,永远。


12 项负面结果:带具体数字的完整清单

文档明确表示这部分可能是全文最有用的一节。以下 12 项全部按原文档数字整理,其中多项揭示出"平面架构上的技巧搬不到循环架构"这一共性规律。

1. 全层 XSA(循环版)

XSA 施加到包括循环 core 在内的所有 block:+0.001 更差(1.1953 vs 1.1940)。平面 11L 的"all 11 layers"是 11 个唯一计算;循环版的"all layers"是 3 个唯一计算各重复 3 次,语义完全不同,过犹不及。

2. 循环 Muon 动量(0.85–0.95,周期 50)

平面架构上报告 -0.0045(PR #623)。与 XSA、QuadgramHash 组合后:+0.058 更差(灾难性)。动量掉到 warmup 目标(0.85)以下,扰动经循环迭代复合,破坏循环收敛。

3. QuadgramHash(1024 buckets, dim 32)

与 #2 组合测试,无法单独隔离;预算不足未独立验证。结论:inconclusive。

4. 分解嵌入(EMBED_DIM 192 / 256)

FIIZiK_ 在 768d 三元模型上用 EMBED_DIM=254 称"损失很小",但那是三元权重 + 8192 vocab 的架构。在 int5 + vocab 1024 上:

EMBED_DIM比例bpbDeltaArtifact
640(无分解)100%1.1787基线15.6MB
25640%1.2416+0.06314.8MB
19230%1.2316+0.05316.4MB(超限)

两个都糟糕。1024 词表下嵌入表本已很小(1024 × 512 ≈ 0.5M 参数),再压缩省不了多少参数却摧毁表示质量。分解嵌入只在大词表(如 8192)下才有意义。

5. Value Residual(ResFormer)

平面架构报告 -0.015(PR #486/#490)。循环版:+0.14 更差(1.4378),即使加初始化修复(lambda 初始化为 -4.0,使 sigmoid(-4.0) ≈ 0.018,初始几乎不混合)。原因是循环 core 每一轮都看到同一个 stem 的 V,V 残差随深度变成越来越过期的参考;共享权重无法为不同重复轮次学不同的混合比例。Value Residual 假设每层在网络中有唯一位置,共享层违反该假设。

6. 渐进循环展开(2 → 5 repeats)

训练开始时 2 次循环、线性增至 5 次:DDP 崩溃。动态控制流与 torch.compile + DistributedDataParallel 不兼容;单 GPU 下 2172 ms/step(比基线 236 ms/step 慢 9 倍),每次 repeat 数变化都会打破编译图、触发整体重编译。

7. 锯齿形 LR 调度

LR 变化触发 torch.compile guard 检查,每一步都重编译:步时从 248 ms 涨到 987 ms(4 倍),只完成 607 步,结果作废。与 #6 同根因——任何被 torch.compile 追踪的值发生变化都会引发重编译,LR 调度必须实现在编译区之外。

8. 全权重测试时训练(TTT)

在验证数据上跑 829 步 AdamW:1.56 bpb vs 1.38 基线,严重过拟合。GPTQ 量化后的权重处于狭窄的、对齐曲率的最小值中,AdamW 的自适应学习率会摧毁它。TTT 与激进量化本质冲突,除非用 SGD 或严格约束的 LoRA。(文档注明:per-document LoRA TTT 已实现,但 DDP 崩溃阻止了多 GPU 测试。)

9. LeakyReLU(0.5)²

平面架构报告 -0.003。2xH100(1 分片)上观察到 -0.003 改善,但 8xH100(80 分片)上可忽略。可能是数据 regime 相关:1 分片时数据多样性低,leaky 激活对负值区间的梯度流有帮助;80 分片时模型自然学会绕开死亡 ReLU 区域。教训:单 GPU 结论必须在目标硬件上验证。

10. Late QAT + int5

最后 10% 步数启用 QAT 并配 int5 导出:+0.006 更差。按 int8 噪声校准的 QAT 量级对 int5 导出是错的——模型被训练成对 int8 尺度扰动鲁棒,实际面对的却是 int5 尺度扰动。QAT 噪声必须匹配导出精度(呼应 Noisy QAT 一节)。

11. BigramHash(10240)

平面 11L 上报告 -0.070(PR #450)。循环版:无改善(2xH100 上 1.2980 vs 1.2963)。假说:循环架构"多次看到同一批数据",本身已获得某种 n-gram 式模式识别能力,额外 bigram 容量与循环冗余。

12. 704d 模型维度

640d → 704d 增加单 block 容量:2xH100 上更差。更宽的模型在 10 分钟内训练步数不足,增加的每步成本无法被容量收益抵消。


超参数扫描与实验时间线

2xH100 上的扫描(1 个数据分片,方向性可靠但绝对值高于 8xH100)

  • EMA × Warmdown(20 组合,多数被 torch.compile 重编译污染):幸存最佳为EMA 0.996 + Warmdown 2000 = 1.2910 bpb;
  • MTP(Multi-Token Prediction):
MTP HeadsLoss Weightbpb
40.31.2974
60.31.3010
20.31.3045
  • Muon Weight Decay(循环架构上越低越好,与平面惯例相反):
WDbpbDelta
0.021.2955基线
0.041.2983+0.003
0.061.3060+0.011

假说:共享参数的 weight decay 影响被放大,因为这些权重在每次循环迭代中都被使用;激进的 decay 就像量化误差一样穿过循环复合。

四天实验时间线摘要

  • Day 0:部署 15 个研究 agent 跨国挖论文,锁定深度循环;3070 上首个循环模型 1.5630 bpb / 6.1M 参数 / 4.1MB artifact;3070 上做宽/深/均衡三向 scaling sweep,全部吞吐受限;调研自定义压缩(entropy 分析 int6 约 2.94 bits/value vs zstd 的 5.0–5.5),测试 bit-packing、delta encoding(失败)、Huffman;
  • Day 1:2x A4500 平价 pod 扫 scaling;LoRA adapter 在低步数下 NoLoRA 胜出;BigramHash 与循环兼容良好;SmearGate 伤循环;MTP 严重破坏共享循环权重;首个 8xH100 跑出 1.14 bpb 灾难性量化 gap;发现 ~900x 误差放大;发明 Noisy QAT(0.37 → 0.002);提交 PR #363;
  • Day 2:fork PR #325;批量套用 Muon 0.99、warmdown 调整、Partial RoPE 16/64、LN Scale、XSA last 4、Late QAT;发现 SWA gap 反转;26 模型代码审查揪出global _QAT_ACTIVEbug 等 6 个问题;双 2xH100 并行扫超参;确认 EMA(0.997) ≈ SWA、warmdown 1500 > 3000 > 1000、MTP 4 头/0.3、Muon WD 0.02;GPTQ-lite 白赚 -0.0027;Value Residual 与循环灾难性冲突(+0.14);AdamW TTT 灾难性过拟合(1.5636);
  • Day 3:3x3 全面胜 2x5;分片教训(1 vs 80 shards);8xH100 循环最佳1.1787(3x3 + EMA + MTP + int5 + GPTQ-lite + T=0.90);验证 stride 16 eval(-0.015,显著)与 T=0.90(relu² 网格搜索最优,SwiGLU 架构则用 T=1.0,激活依赖,非普适默认);分解嵌入 192d / 256d 均灾难;
  • Day 4:Frosty40 确认递归是死路;受控 flat vs looped 对比落地;把循环加回 tuned flat 配置再次确认 +0.025 惩罚;对照 PR #499 发现其增益来自 MLP 宽度而非循环。

更多算力下可能成立的方向(明确标注为推测)

  • 更长训练预算:循环模型用步数换有效深度,10 分钟不利;30+ 分钟或无限算力赛道下,步数惩罚缩小、参数效率优势放大(参照 PR #612 在 100 分钟赛道的 1.1079 bpb)。循环架构可能在更长时间尺度上有竞争力;
  • 推理期自适应深度:每 token 选择循环次数,简单 token 提前退出、难 token 多迭代(Universal Transformer 的原始提议),挑战在于与 torch.compile 和批量推理要求的静态计算图兼容;
  • 匹配导出精度的 Noisy QAT:当前校准到 int8(step_size = amax / 127.0)却按 int5 导出;若按 int5 校准(step_size = amax / 15.0)可能填平缺口(作者因算力耗尽未验证);
  • 更好的循环设计:3x3 > 2x5 说明最优配置远未探明——非对称循环(stem 多于 tail)、异构重复次数(block 1 重复多于 block 2)、只在首尾轮次做 attention 而中间轮次只跑 MLP,均未探索。

复现指南:环境变量与运行方式

原文档给出的受控对比复现命令(训练脚本名按其 PR 内文件为pr325_train_gpt.py):

# Flat 11L 512d(可提交最优:1.1648 bpb) NUM_LAYERS=11 MODEL_DIM=512 LOOP_CORE_LAYERS=0 LOOP_REPEATS=1 \ MLP_INT5=1 ATTN_INT5=1 NUM_HEADS=8 NUM_KV_HEADS=8 \ BIGRAM_VOCAB_SIZE=4096 WARMDOWN_ITERS=2000 \ EVAL_TEMPERATURE=0.90 EVAL_STRIDE=64 SEED=42 # Looped 3x3 640d(同配置下 1.1894 bpb) NUM_LAYERS=9 MODEL_DIM=640 LOOP_CORE_LAYERS=3 LOOP_REPEATS=3 \ MLP_INT5=1 ATTN_INT5=1 NUM_HEADS=8 NUM_KV_HEADS=8 \ BIGRAM_VOCAB_SIZE=4096 WARMDOWN_ITERS=2000 \ EVAL_TEMPERATURE=0.90 EVAL_STRIDE=64 SEED=42

两条配置均以MAX_WALLCLOCK_SECONDS=600在 8xH100 SXM 上配合 80 个训练分片运行。

仓库收录脚本的变量名差异(重要):本仓库收录的 train_gpt.py 并非 PR #325 原文件,其Hyperparameters(L74-L136)使用另一套环境变量:循环配置由NUM_UNIQUE_BLOCKS(默认 3)与EFFECTIVE_DEPTH(默认 9)驱动(L119-L122),此外还有DEPTH_LORA_RANK、BIGRAM_BUCKETS、BIGRAM_DIM、XSA_LAST_N、QAT_FRACTION、MUON_WEIGHT_DECAY、MATRIX_LR、MUON_MOMENTUM等。按收录脚本复现时,需将上表LOOP_CORE_LAYERS/LOOP_REPEATS映射为对应的NUM_UNIQUE_BLOCKS/EFFECTIVE_DEPTH语义(3x3 即 NUM_UNIQUE_BLOCKS=3 + EFFECTIVE_DEPTH=9 的 block 循环调度;文档中的平面配置可理解为 unique blocks = 层数、EFFECTIVE_DEPTH = 层数、无重复)。

运行方式与依赖:

  • 脚本以torchrun --standalone --nproc_per_node=N启动(脚本头注释 L14),要求 CUDA;数据路径由DATA_PATH、TOKENIZER_PATH指向 FineWeb sp1024 缓存;
  • 训练受MAX_WALLCLOCK_SECONDS(默认 600.0)硬性封顶,到达后停止并进入序列化阶段;
  • 序列化默认走int6/zstd-22混合精度量化路径(quantize_state_dict_int6,L457-L512),zstd 不可用时回退 int8/zlib-9(compress_bytes,L521-L526);脚本会在 L1246-L1249 检查 artifact 是否超出 16,000,000 字节上限并打印 headroom,随后做"量化 → 反量化 → 重评"的 roundtrip 验证,输出final_int6_roundtrip行;
  • 依赖清单见 requirements.txt(torch、sentencepiece、zstandard、huggingface-hub、datasets、tiktoken 等)。

另需注意评估口径:文档中 1.1787 / 1.1648 等数字来自滑动窗口评估(stride 64、T=0.90),这是竞赛社区验证出的显著收益项(可参见先例 SlidingWindowEval,stride 64 相对非重叠基线带来可观改善);而 submission.json 中的 2.3876 bpb 是另一种评估口径下的存档值,两者不可直接比较。


结论:这次"失败"留下了什么

作者的原话是:"我出发去证明深度循环能在 Parameter Golf 中有竞争力,我失败了。但这次失败的价值超过标准堆栈上的又一个 0.001 提升。"

结构性结论已经明确:量化复合与步时开销这两项"循环税"不是超参问题、不是实现 bug,而是固定时间预算 + artifact 大小限制的直接后果。三条可迁移的经验是:

  1. Noisy QAT:循环 core 权重应当用与量化误差校准一致的噪声训练;int8 目标下量化 gap 从 0.37 塌缩到 0.002 bpb,是该工作最强的单一结果,且对任意深度循环架构原则上可迁移;
  2. 3x3 > 2x5:优先更多唯一 block、更少重复次数;
  3. 12 项负面结果:特别是"平面架构技巧不可直接搬上循环架构"(XSA 全层、Value Residual、分解嵌入、TTT、BigramHash 扩容等),为后来者省下真实算力与真金白银。

最后回到文档的致谢名单:Aum08Desai(PR #325 Middle-Cycle 起点)、Frosty40(PR #499,公开分享递归负面结果)、Ciprian-Florin Ifrim(250+ 实验的系统记录)、boreas(点破量化税)、OpenAI / Will DePue(算力赞助与"people aren't being nearly ambitious enough"的激励)以及整个 Parameter Golf 社区。对每一位考虑在 Parameter Golf 里尝试深度循环的人,这份记录的目标就一句话:读它,省下 4 天和 200 美元。

最佳循环:1.1787 bpb(3x3,8xH100,滑动窗口)| 最佳平面:1.1648 bpb(11L,同硬件)| 受控差距:+0.025 bpb(循环更差)

【免费下载链接】parameter-golf

Train the smallest LM you can that fits in 16MB. Best model wins!

项目地址:https://gitcode.com/gh_mirrors/pa/parameter-golf
点击查看免费下载
上一篇:Saasfly国际化(i18n)实现:多语言支持与SEO优化的完美结合
下一篇:Horizon安全最佳实践:金融应用数据保护方案

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进