Files
llm-atlas/research/K3_ATTNRES_REDUCED_AUDIT.md
2026-07-30 07:35:29 +08:00

20 KiB
Raw Permalink Blame History

Kimi K3 第四轮:Attention Residuals 缩小版独立机制实验审计

协议:llm-atlas-k3-attnres-reduced-v1

预注册:research/K3_ATTNRES_REDUCED_PROTOCOL.md

数据清单:experiments/k3/attnres/manifest.json

执行日期:2026-07-30

执行设备:NVIDIA GeForce RTX 5090;PyTorch 2.11.0+cu128

0. 先说结论

这一轮没有伪装成“跑通了 K3”。它做的是一个刻意缩小、从零训练、可公开复查的 Attention Residuals(AttnRes)机制实验:

3 个结构
× 3 个预先冻结的初始化 seed
× 每格 2,000 steps
× 每步 32 × 256 target bytes
= 9 个正式训练格,147,456,000 target bytes

三个结构共享完全相同的 16 个 Transformer blocks、32 个残差子层、初始公共参数、 训练窗口、优化器与验证集。唯一设计变量是“前面产生的 residual states 怎样供下一层读取”:

Baseline:只读上一残差状态
Full AttnRes:对全部历史残差状态做按维 softmax 混合
Block AttnRes:每 4 个残差子层形成一个局部块,块间再混合

在冻结的 64 个验证窗口上,最终 bits per byte(BPC,越低越好)为:

seed Baseline Full Block Full − Base Block − Base
2026073001 2.00054 1.98454 1.94788 −0.01600 −0.05266
2026073002 1.99844 1.98523 1.95709 −0.01321 −0.04135
2026073003 1.99842 1.98392 1.96503 −0.01450 −0.03339
三 seed 均值 1.99913 1.98457 1.95667 −0.01457 −0.04247

按照看结果前冻结的判据——三个 seed 同为负,并且均值不高于 −0.010 BPC——Full 与 Block 都得到:

directional support in this reduced protocol

中文应该读成:

在这套缩小训练合同中,允许子层重新读取更早的残差状态,方向一致地改善了验证 BPC。

它不应该读成:

  • 已复现 AttnRes 论文的大模型收益;
  • 已运行 Kimi K3 checkpoint;
  • 已证明 Block 一般优于 Full;
  • 已得到同参数、同 FLOPs 或同 wall time 的优势;
  • 三个 seed 可以支持总体显著性、置信区间或 scaling-law 外推。

本轮还有一个同样重要的反结果:预注册的“16 个 Transformer blocks 的核心参数梯度 RMS 变异系数”在本实验中,Baseline 为 0.3447,Full 为 0.5087,Block 为 0.6306。 在这个定义和尺度下,AttnRes 没有表现出更均匀的跨深度梯度。这个结果与论文的大模型 梯度叙述不能直接对齐,网站必须把它作为边界而不是藏起来。


1. 为什么不是直接跑 K3

1.1 公开 checkpoint 的未决形状冲突

第三轮工件审计在 K3 第一层 KDA 中发现:

官方工件 A_log 所要求或实际给出的形状
config.json num_heads = 96
Hugging Face remote code 按 num_heads 构造,即 [96]
FlashKDA kernel API [H],K3 中应为 [96]
checkpoint safetensors header [128]

本轮再次检查了当前官方 Hugging Face / GitHub 工件,并额外检查当前 vLLM 与 SGLang Kimi K3 loader。两者都按 local head 维构造和切分 A_log,没有公开 128 → 96 的转换规则。

因此,以下做法都会越过证据:

裁掉最后 32 个值
把 128 强行 reshape 成别的语义
把 128 解释成 head_dim
绕过 loader 后把输出叫作“K3 forward”

在 Moonshot 给出转换合同、修订权重,或一个官方 loader 明确处理这 32 个额外值之前, 本站不制造“真实 K3 前向结果”。

1.2 为什么缩小版仍有价值

不能诚实执行 1.56 TB checkpoint,不等于只能停在架构示意图。AttnRes 的核心问题可以被 缩成一个更小、但仍可被证伪的问题:

在相同 Transformer 主干、相同输入窗口与相同初始化下,把“固定单位 residual connection”替换成“学习的历史 residual 混合”,短预算训练是否出现一致方向?

这个问题不依赖 KDA、MLA、MoE、MXFP4、视觉塔或完整 K3 参数。它只检验 AttnRes 的局部机制方向,并且可以把全部代码、清单、聚合指标和复现哈希开源。


2. 先冻结什么

首版协议在正式结果产生前冻结以下项目:

  • 数据仓库、revision、config、split 拼接规则与 byte tokenizer;
  • 模型层数、宽度、head 数、FFN 宽度、位置编码、RMSNorm 与激活函数;
  • Baseline / Full / Block 的精确定义;
  • 三个初始化 seed;
  • 每格训练步数、batch、context 与总 target bytes;
  • AdamW、学习率曲线、weight decay、gradient clipping;
  • 验证步、固定验证窗口与主指标;
  • 主对比、方向判据和“不能宣称什么”;
  • 深度 RMS、混合权重与梯度诊断;
  • smoke 与正式独立进程 replay 合同。

正式协议不是从本轮曲线倒推的。关键提交顺序为:

9039de1  research: preregister reduced AttnRes study
e361753  research: lock reduced AttnRes model contract
f998720  research: add reduced AttnRes runner
1f20f81  research: freeze reduced AttnRes corpus

2.1 一次被公开保留的预训练故障

第一次 smoke 在 step 0 的验证 forward 后停止:

RuntimeError:
view size is not compatible with input tensor's size and stride

原因是切片后的 target tensor 不连续,而 loss 路径用了 .view()。当时:

  • 尚未执行一个 optimizer step;
  • 没有正式结果文件;
  • 没有任何条件的训练或最终 BPC 可供选择。

修复仅把 .view() 改为语义等价且支持非连续输入的 .reshape():

5f49906  fix: flatten noncontiguous AttnRes targets

随后三个结构分别完成两次独立 smoke,冻结字段逐字段 exact。这个故障不改变实验设计, 但应留在审计链中,避免“第一次就完美运行”的虚假叙事。


3. 数据合同:文本怎样变成 byte 任务

3.1 固定数据源

项目 固定值
repository Salesforce/wikitext
revision b08601e04326c79dfdd32d625aee71d232d685c3
config wikitext-2-raw-v1
行处理 (text or "") + "\n"
编码 UTF-8
tokenizer byte ID 0..255
vocabulary 256

拼接后的 split:

split bytes SHA-256
train 10,951,563 0ca7d3e74dbe44564ea5942b85232f1bbcb525c9cd481cd5d28a87ee90e7e9b4
validation 1,148,008 a42356f6a8ff1d25daf25ec9db49e10a537c265581b61c74604bb63231dee719
test 1,292,014 bfe9eb16ab9987fb88bde4ea9a30a00f2a45db01dfc14bad78d05325789c4f12

这里的 byte tokenizer 不是为了追求最佳语言模型性能,而是为了移除另一个潜在变量: 不同 BPE 模型、词表和 normalization。BPC 也因此可以直接比较,而不受 tokenization 长度变化影响。

3.2 无状态窗口计划

训练窗口不靠进程内 RNG 顺序产生。对每个:

architecture + seed + step + batch row

协议用 SHA-256 派生 train start offset。三种结构在同一 seed 下使用相同窗口;结构名不进入 窗口选择的有效随机盐。冻结计划包含 192,000 个起点,SHA-256 为:

81521a70ec61f3717968f160cb711e50c5f52a665a6961538d339360cb695f48

固定 64 个验证窗口 tensor hash:

5f71fda757fc75010ed16e7636bc394c69f55b34a3713b3b5a7ef8e03eae3c20

固定 16 个诊断窗口 hash:

d970af9b0c656c9826f369b5fe6e3869a6f6cfeccfa5a922fe94ed1d24b86818

4. 模型合同:只改变 residual 读取拓扑

4.1 公共主干

项目 值
Transformer blocks 16
residual sublayers 32(每 block attention + FFN)
model width 192
attention heads 6
head dimension 32
SwiGLU hidden 768
context 256 bytes
dropout 0
position learned absolute embedding
norm pre-RMSNorm + final RMSNorm
attention softmax causal, float32
embedding / LM head tied

Attention projection 与 SwiGLU 都不使用 bias。三个结构的公共 core 参数均为 9,541,824,每个 seed 的公共参数初始化哈希在三种结构间 exact。

4.2 Baseline

普通 residual 子层:

x_(l+1) = x_l + F_l(RMSNorm(x_l))

它只保留一个随深度持续累积的 residual stream。

4.3 Full AttnRes

第 l 个子层先对从 embedding 到当前深度的全部 residual states 做学习混合:

α_l = softmax(q_l · RMSNorm(states))
x̃_l = Σ_i α_(l,i) state_i
state_(l+1) = F_l(RMSNorm(x̃_l))

q_l 是按 hidden dimension 学习的 pseudoquery,初始化为 0,所以初始 softmax 为均匀 读取。最后还有一个 output mixer,把 33 个可见 sources 混成 LM head 的输入。

4.4 Block AttnRes

32 个 residual sublayers 被分成 8 块,每块 4 层:

块内:新 branch state 做普通局部累加
块边界:对历史块状态做学习混合,产生下一块输入

它保留“可以回读历史”的机制,同时把 Full 随深度增长的状态集合限制在块级。

4.5 参数公平与计算不公平

结构 core mixer total 相对 Baseline mixer overhead
Baseline 9,541,824 0 9,541,824 0
Full 9,541,824 12,672 9,554,496 0.1328%
Block 9,541,824 12,672 9,554,496 0.1328%

这是近似同参数,不是同 FLOPs。当前教学实现用 PyTorch eager 保存和混合历史 states, 没有使用论文的大模型优化 kernel,所以它适合机制观察,不适合推断生产吞吐。


5. 训练与主指标

5.1 每格预算

2,000 steps
× batch 32
× context 256 target bytes
= 16,384,000 target bytes / run

优化器:

AdamW β=(0.9, 0.95), ε=1e-8
peak LR=3e-4, min LR=3e-5
100-step warmup + cosine decay
weight decay=0.1 for ndim>=2
global grad clip=1.0
BF16 autocast

验证发生在 0, 100, 250, 500, 1000, 1500, 2000 steps。主指标只使用 step 2000 的固定验证 BPC;曲线用于帮助理解,不用于重新选择终点。

5.2 判据为什么这么保守

只有三个 seed,不能可靠估计总体方差或给出有意义的 population confidence interval。 所以预注册不用 p-value,而只问两个简单问题:

三个 paired deltas 是否同方向?
mean delta 是否至少达到 0.010 BPC?

如果答案都是“是”,只写作本协议内的 directional support / concern。它是一道防止 夸大结论的阈值,不是一个通用显著性标准。

5.3 正式结果

Full 的三组配对差:

−0.015996
−0.013207
−0.014498
mean = −0.014567 BPC

Block 的三组配对差:

−0.052660
−0.041349
−0.033388
mean = −0.042466 BPC

两组都满足预注册的方向支持规则。Block 相对 Full 的均值差为 −0.027898 BPC,三个 seed 也同为负;但“Block − Full”不是预注册主判据,而且本实现的计算图与优化效率不同, 所以它只适合描述,不升级成一般性排名。


6. 它花了多少计算与显存

排除每次前 20 个计时 warmup steps 后,三个 seed 的均值:

结构 mean step 相对 Baseline peak allocated 相对 Baseline
Baseline 21.62 ms 1.00× 3.04 GB 1.00×
Full 146.81 ms 6.79× 14.26 GB 4.70×
Block 54.63 ms 2.53× 6.52 GB 2.15×

这张表应该怎样读:

  • Full 在教学实现中为每层保留并读取更多历史 states,因此最贵;
  • Block 把可见历史限制在块级,成本明显下降;
  • 时间与显存是“这份 PyTorch eager 实现 + RTX 5090”的观测;
  • 不能把 6.79× / 2.53× 外推到论文 kernel、K3 训练系统或生产推理;
  • BPC 改善不能被写成同 FLOPs 改善。

7. 看 residual stream:Block 为什么呈现锯齿

Baseline 的 stream-state RMS 从平均 0.0661 增到 0.2110:普通 residual connection 把分支输出一路累积。

Block 的前 12 个 partial-state RMS 是:

0.0334  0.0598  0.0967  0.1181
0.0509  0.0569  0.0745  0.0815
0.0532  0.0581  0.1079  0.1158

每四个值形成一个局部块:

块内:逐层累积,RMS 通常上升
块间:重新从历史块状态混合,partial stream 被重置

所以曲线不是训练不稳定造成的随机锯齿,而是 Block 拓扑的直接几何痕迹。完整 32 点向量、 三个 seed 的 min / mean / max 均进入公开 JSON。

Full 的 layer-input RMS 则从 0.0544 降到 0.00866。这不等于信息“消失”: 每层输入是多个经过 RMSNorm 的历史 states 的学习加权和,混合可以通过方向抵消改变 合成向量的 RMS。只看单个标量不能判断信息保留量。


8. mixer 权重:一个事后但有解释力的观察

Full 在第 31 个 residual sublayer 的 branch-output RMS 平均达到 1.4964,是 32 层中 最大值。但最终 output mixer 给这个 source 的平均权重只有:

observed = 0.002794
uniform  = 1 / 33 = 0.030303
ratio    = 0.0922× uniform

一个直观解释是:输出混合器学会了压低这个幅值突增的 source,而不是被迫把它以单位 residual 权重传到输出。

必须同时保留两个限制:

  1. “最大 spike 对应低权重”是看完完整 trace 后挑出的描述;
  2. 它不是预注册 endpoint,不能作为独立确认性证据。

网站会明确标注 post-hoc descriptive callout,并展示完整深度权重图,让读者看到它 不是从被隐藏的其他 source 中挑出的孤立数字。


9. 梯度结果没有复现论文叙述

预注册诊断对每个 Transformer block 的公共 core 参数计算 gradient RMS,再求 16 个 block 间的 coefficient of variation:

结构 seed 1 seed 2 seed 3 mean CV
Baseline 0.3537 0.3409 0.3396 0.3447
Full 0.4890 0.5100 0.5272 0.5087
Block 0.6622 0.6849 0.5448 0.6306

CV 越低,按这个特定定义才越均匀。因此本轮观察是:

Baseline < Full < Block

这和 AttnRes 论文在大模型训练中报告的、更平坦的跨深度梯度幅值叙述不是同一个结果。 合理边界包括:

  • 本实验只有 width 192、16 blocks、2,000 steps;
  • 本指标是“按 block 汇总的核心参数 gradient RMS”;
  • 论文图可能观察 activation / residual-output gradients,聚合对象并不相同;
  • byte-level WikiText-2 与论文的大规模训练数据、优化器状态和训练阶段不同。

正确表述是:

本缩小实验的主 BPC 对比支持 AttnRes 的方向,但预注册的核心参数梯度均匀性指标不支持 论文式叙述;这提示该解释可能依赖尺度、指标定义或训练阶段,需要后续专门实验。

不正确的做法是改换一个看起来更漂亮的梯度统计后,只展示新指标。


10. 复现链

10.1 smoke

三个结构各执行两次独立的 20-step smoke。以下字段对每个结构都 exact:

manifest
model
optimizer
hashes
evaluations
training_history
diagnostic
environment

10.2 正式独立进程 replay

预先指定:

architecture = block
seed = 2026073001
steps = 2000

正式格与 fresh-process replay 的最终 BPC 都是:

1.947877975922777

上面的八组冻结字段全部 exact。计时不要求 exact,实际也不相等,因为 wall time 受系统 调度影响。

文件 SHA-256
formal block / seed 1 5df870369d9a86ccb4ba4191fbd1d6f3642893dd47a60f8f6d1143006bdfbdaf
fresh replay e74d3323e5fe31378bb8aad7a8efa2fb91995cd7224c158cf03006466cdea2a7

10.3 公开产物

产物 内容 SHA-256
src/data/k3-attnres-reduced.json 9 个完整 run + 聚合 + 复现记录 44f8622654d32485f8d6e698c02ba1365ddffb10cbd73db0294136d0bd93ce88
src/data/k3-attnres-reduced-compact.json 网站所需完整曲线与诊断 44864d48eddb2ae5887fba4b74f63b5a3d6a23497886ee307decf5b4f45d9faf
experiments/k3/attnres/reproduction.json smoke、初始化与 replay audit 545543b7e4a970ca3bc0e6246610a32fb53ec3d9546a98e0f17f38d7121918a2

聚合器在同一批只读 run 文件上再次运行后,三个文件 SHA-256 全部不变。


11. 证据等级

A. 本轮可直接主张

  • 冻结协议下 9 个训练格的最终 BPC 与完整验证曲线;
  • Full / Block 相对 Baseline 的三 seed 配对方向;
  • 当前实现的参数量、实测 step time 与 peak allocated memory;
  • 固定诊断窗口上的 residual RMS、mixer 权重与参数梯度统计;
  • smoke 与指定正式格的独立进程 exact replay;
  • 数据、窗口、初始化和产物 SHA-256。

B. 只能作为机制解释

  • Block 的四层锯齿与块边界重混合一致;
  • Full mixer 可能通过降低权重抑制高 RMS source;
  • Full / Block 的短预算优势可能来自更灵活的深度路由。

这些解释与观测相容,但不是唯一因果解释。

C. 本轮明确不主张

  • K3 checkpoint 已成功 forward 或训练;
  • 论文表格、Figure 4–8 或 paper-scale scaling 已复现;
  • AttnRes 在任意模型、数据和预算上都降低 loss;
  • Block 一般优于 Full;
  • 梯度在 AttnRes 中更均匀;
  • 同 FLOPs、同 wall time 或生产系统的性价比优势;
  • 三个 seed 支持总体统计显著性。

12. 下一步

这个实验把“能运行的独立机制 probe”完成了,但真实 K3 仍有两道门:

  1. A_log [128] 的官方转换或权重修订;
  2. 能加载完整或官方切分 K3 的受支持执行环境。

AttnRes 本身的下一轮也不应只增加 seed。优先级更高的是:

  • 对齐论文实际使用的 activation / output-gradient 诊断定义;
  • 增加 depth 与训练预算,检验梯度结论是否随尺度翻转;
  • 做 mixer 计算的优化实现,再讨论同 wall-time 或近似同-FLOP 对比;
  • 冻结一个更强 tokenizer / corpus 后检查 byte-level 结论是否保持;
  • 将 Block size 作为预注册变量,而不是看完结果后挑 4。

13. 一手来源

Grok CLI 在协议冻结前只承担一次对抗式方法审阅:它提出锁定参数容量、残差拓扑、数据顺序、 指标定义和复现合同的检查项。所有论文事实和实验结论仍由一手来源、冻结代码与本地运行产物 支持;Grok 输出不作为证据来源。


14. 发布与回归证据

  • 功能源提交:4ce780d;
  • 不可变镜像:docker.k1412.top/wuyang/llm-atlas:20260729T233142Z-4ce780d;
  • OCI index digest:sha256:6e89f802f07fd8dacb55a734f58b5e6d8cbe143d03b9b11cde87cc3c4f25f582;
  • NAS:Compose Manager project llm-atlas,12010 → 8080,容器 healthy、0 次重启;
  • 代理:NPM host 31,certificate 41,forward 100.94.16.3:12010;
  • 公网:21 / 21 页面路由返回 200,HTTP → HTTPS 301,HTTPS/2 health 200;
  • 静态资产:gzip 与 public, max-age=604800, immutable 保持生效;
  • 门户:LLM ATLAS / projects / order 180;
  • 回归:冻结数据检查、Astro 零诊断、站内引用检查、AttnRes 专项与 K3 全量生产 Chrome 全部通过;桌面与 390px 移动端零文档级溢出、零运行时异常;
  • 回滚镜像:20260729T221654Z-975ed3d。