Files
llm-atlas/research/K3_ATTNRES_REDUCED_PROTOCOL.md
2026-07-30 06:34:52 +08:00

277 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Kimi K3 第四轮:Attention Residuals 独立小模型复现协议
> 协议 ID:`llm-atlas-k3-attnres-reduced-v1`
> 冻结日期:2026-07-30(Asia/Shanghai)
> 状态:正式输出前预注册
> 目标:用可在单张 RTX 5090 上完整训练、复跑和检查的小模型,验证 Attention
> Residuals 的运算合同与早期训练动力学;不冒充 K3 checkpoint forward 或原论文规模复现。
## 1. 为什么本轮不直接“跑 K3 第一层”
截至本协议冻结时,官方开放工件仍是:
- `moonshotai/Kimi-K3@9f62e4e9fffbd0a83ddd60e1c209d828994b3569`;
- K3 GitHub `MoonshotAI/Kimi-K3@7c5be9599120d7993748de66a76128614f15f210`;
- Hugging Face remote code 把 KDA `A_log` 初始化为 `[num_heads]=[96]`;
- checkpoint header 中每个 KDA `A_log` 仍为 `[128]`;
- 当前 vLLM `fa2a2589bd2a1fce0851df7fd42ffb54b6195f04` 与 SGLang
`3c1717d9b6355e48855be7cc079db3ef9958f36d` 都把参数构造成 head 轴 96,并沿该轴
sharding;没有公开的 128→96 转换合同。
因此,裁剪、重复、平均或把 `[128]` 改解释成 channel 参数都会引入未公开假设。本轮不做。
官方也没有发布可加载的 K3 reduced checkpoint;Attention Residuals 论文所述 48B/3B 模型权重
仍未公开。
## 2. 一手来源
| 工件 | 固定 revision / checksum | 本轮用途 |
|---|---|---|
| Kimi K3 HF | `9f62e4e9…b3569` | 说明完整 checkpoint 的执行边界 |
| Kimi K3 GitHub | `7c5be959…f210` | 报告与部署入口 |
| Attention Residuals GitHub | `85e22310fe5ee860b4a023de312d791de8a5a5e6` | 官方论文与公式 |
| `Attention_Residuals.pdf` | SHA-256 `e5831b0d…a26b2f` | Full / Block AttnRes 运算合同 |
| WikiText-2 raw | `Salesforce/wikitext@b08601e04326c79dfdd32d625aee71d232d685c3` | 固定公开语料 |
Grok Headless 只承担正式输出前的对抗式方法检查,不是事实来源,也不参与结果解释。
## 3. 研究问题与声明边界
本轮只问:
1. 在核心 Transformer 权重、训练 Token、输入窗口与 optimizer 合同相同的缩小系统中,
Full / Block AttnRes 的验证 bits-per-byte 相对 PreNorm 方向是否跨三个 seed 一致?
2. 三种残差图的输入、分支输出和累计状态 RMS 怎样随深度变化?
3. 固定诊断 batch 上,每个 Transformer block 的参数梯度 RMS 怎样分布?
4. zero-init pseudo-query 经过训练后,是否出现邻近来源、embedding 和远层来源的可见分工?
5. 额外残差运算带来多少实际 step time 与 peak allocated memory?
本轮不能回答:
- K3 2.8T checkpoint 的真实 hidden state、router load 或 cache trace;
- 原论文 194M–528M activated / 38.7B–119B Token scaling law;
- AttnRes 的 benchmark 能力、长上下文质量或生产吞吐;
- KDA、MLA、MoE 与 AttnRes 的联合因果贡献;
- 任意总体显著性、p-value 或跨数据集普适性。
## 4. 数据合同
下载并校验:
```text
wikitext-2-raw-v1/train-00000-of-00001.parquet
wikitext-2-raw-v1/validation-00000-of-00001.parquet
wikitext-2-raw-v1/test-00000-of-00001.parquet
```
预处理固定为:
1. 按 parquet 行序读取 `text`;
2. 每行原文后追加一个 `\n`;
3. UTF-8 编码,不做 Unicode normalization、去空行、大小写或空白改写;
4. 词表固定为 256 个原始 byte;
5. 每个样本取连续 `context+1=257` bytes,前 256 预测后 256。
训练第 `step`、第 `row` 的起点:
```text
z = first 8 bytes of SHA256(
protocol_id + "\0train-window\0" + seed + "\0" + step + "\0" + row
)
start = uint64_be(z) mod (len(train_bytes) - 257)
```
因此同一 seed 的三种架构逐 step、逐 row 使用完全相同的 token tensor,不依赖 Python、NumPy
或 CUDA RNG 的消费顺序。
验证窗口固定 64 条,诊断窗口固定 16 条,分别用标签 `validation-window` 与
`diagnostic-window`、固定 index 取 SHA-256 起点;它们对全部 seed / 架构相同。
manifest 必须记录:
- dataset revision、三个 parquet SHA-256;
- 拼接后 split byte length 与 SHA-256;
- 训练 seed×step×row 的总 window-schedule hash;
- validation / diagnostic tensor hash。
## 5. 模型合同
所有模型:
| 项 | 固定值 |
|---|---:|
| vocabulary | 256 bytes |
| context | 256 |
| Transformer blocks | 16 |
| residual sublayers | 32(每块 attention + MLP) |
| `d_model` | 192 |
| heads | 6 |
| head dimension | 32 |
| `d_ff` | 768 |
| dropout | 0 |
| positional embedding | learned absolute, 256 × 192 |
| norm | RMSNorm, `eps=1e-6` |
| attention | causal multi-head softmax,score 用 FP32 softmax |
| MLP | bias-free SwiGLU,two `192→768` projections + one `768→192` projection |
| input/output embedding | tied |
| final readout | RMSNorm 后乘 tied token embedding |
三种 residual graph:
1. **PreNorm baseline**:`h ← h + f(RMSNorm(h))`。
2. **Full AttnRes**:每个 attention / MLP 子层从 embedding 与所有早期子层输出中,
以 `softmax(q_l^T RMSNorm(source))` 选出输入;当前分支输出成为下一个独立 source;
32 个子层结束后用同型 output mixer 聚合 embedding + 32 个输出。
3. **Block AttnRes**:32 个子层按顺序冻结为 8 块、每块 4 个子层;跨块保存 8 个 block
sums,块内使用 partial sum,embedding 永远是 source 0;最后用同型 output mixer 聚合
embedding + 8 个完整 block sums。
AttnRes 每个子层增加:
- 一个 `d_model` pseudo-query,初始化严格为 0;
- 一个 `d_model` RMSNorm key weight,初始化严格为 1。
Full / Block 各自再增加一组相同结构的 output mixer。所有 bias-free linear 与 embedding 使用
`N(0, 0.02)`;attention output projection 与 MLP down projection 按
`0.02 / sqrt(2 × 16)` 缩放初始化;普通 RMSNorm 为 1。
核心 token / position embedding、attention、MLP、输入 norm 与 tied output weights 在同一 seed
的三种架构中必须逐 tensor SHA-256 exact。AttnRes 额外参数与 mixer 运算如实报告,不通过
无作用 dummy 参数伪造“完全等容量”。
本实验匹配:
- 核心 Transformer 参数;
- optimizer steps;
- 每步训练 Token;
- 逐 Token 数据顺序。
本实验**不匹配**:
- residual mixer FLOPs;
- step wall time;
- peak activation memory。
后二者正是次要观测指标,不能被用于支持“同算力下更好”。
## 6. 优化与运行合同
| 项 | 固定值 |
|---|---:|
| seeds | `2026073001, 2026073002, 2026073003` |
| formal steps | 2,000 |
| batch | 32 |
| tokens / run | 16,384,000 target bytes |
| optimizer | AdamW |
| betas | `(0.9, 0.95)` |
| epsilon | `1e-8` |
| peak LR | `3e-4` |
| min LR | `3e-5` |
| warmup | 100 steps,linear |
| decay | cosine,step 100→2,000 |
| weight decay | `0.1` for parameters with `ndim >= 2`; otherwise `0` |
| grad clip | global norm `1.0` |
| compute | BF16 autocast,FP32 optimizer state |
| device | one RTX 5090 |
| compile | off / eager |
| RNG | deterministic algorithms,`CUBLAS_WORKSPACE_CONFIG=:4096:8` |
验证发生在 step `0, 100, 250, 500, 1000, 1500, 2000`。每次使用固定 64 条窗口;
以 8 条一个 eval batch,报告 token-mean cross entropy(nats)与:
```text
bits_per_byte = cross_entropy_nats / ln(2)
```
计时:
- 前 20 个训练 step 不进入 wall-time 统计;
- step 21–2,000 每步前后 CUDA synchronize;
- step 20 后 reset peak memory stats;
- 同报 mean / median / p95 step ms、peak allocated 与 peak reserved。
## 7. 预注册指标
### 7.1 主指标
每个 seed 在 step 2,000 的验证 `bits_per_byte`:
```text
Δ_full = Full AttnRes − PreNorm
Δ_block = Block AttnRes − PreNorm
```
只报告三个 paired delta、mean、min–max。
预注册解释规则:
- 三个 seed 全同为负,且 mean delta ≤ `−0.010 BPC`:**directional support in this reduced protocol**;
- 三个 seed 全同为正,且 mean delta ≥ `+0.010 BPC`:**directional concern in this reduced protocol**;
- 其他情况:**inconclusive at this budget**。
不报告 p-value、population CI 或“复现了论文提升”。
### 7.2 次要指标与精确定义
- `branch_output_rms[l]`:第 l 个 attention / MLP 分支输出在 batch×time×channel 上的 RMS;
- `layer_input_rms[l]`:进入第 l 个分支 norm 之前的 mixture / residual state RMS;
- `stream_state_rms[l]`:baseline 加法后的 state;Full 为新 source 输出集合的整体 RMS;
Block 为当前 partial sum 的 RMS;
- `parameter_grad_rms[block]`:固定 diagnostic batch 上、clip 前,该 block 所有核心参数梯度
拼接后的 `sqrt(sum(g²)/numel)`;不含 embedding、LM head 与 AttnRes mixer 参数;
- `depth_weights[l, source]`:固定 diagnostic batch 上 softmax 权重对 batch×time 求均值;
- `source_entropy[l]`:同一权重先逐 token 计算 entropy,再对 batch×time 求均值;
- `step_ms` 与 CUDA memory:按 §6 固定协议。
这些指标是描述性机制账,不进入主判定。
## 8. Smoke、正式运行与复现
正式输出前先跑:
- 三种架构 × seed 1;
- 20 steps;
- batch 4;
- 同一 window schedule;
- 断言无 NaN、loss finite、common-weight hashes exact;
- 在全新进程重跑相同 smoke,比较数据 hash、初始 common hash、逐 eval loss 和最终 common
checkpoint hash。
smoke 只决定实现是否可运行,不用于改变 formal 超参数或挑选架构。
正式运行顺序冻结为:
```text
seed 2026073001: baseline → full → block
seed 2026073002: baseline → full → block
seed 2026073003: baseline → full → block
```
全部 9 个 run 完成后,在全新进程复跑 `seed 2026073001 / block / 2,000 steps`,比较:
- manifest / dataset / schedule hashes;
- common initial weight hash;
- step 0–2,000 eval history;
- final common parameter hash;
- final mixer parameter hash;
- diagnostic tensors与 depth-weight hashes。
计时不要求 exact;数值字段要求 exact,若底层确定性限制导致非 exact,必须报告最大差异,
不能降低字段范围后宣称复现。
## 9. 冻结产物
```text
research/K3_ATTNRES_REDUCED_PROTOCOL.md
research/K3_ATTNRES_REDUCED_AUDIT.md
experiments/k3/attnres/build_dataset.py
experiments/k3/attnres/train.py
experiments/k3/attnres/analyze.py
experiments/k3/attnres/README.md
experiments/k3/attnres/manifest.json
src/data/k3-attnres-reduced.json
src/data/k3-attnres-reduced-compact.json
```
原始 parquet 与训练 checkpoint 留在本机 cache,不进入公开仓库;manifest、原始指标 JSON、
分析结果、代码、环境、checksum 和确定性复现账进入开源树。