tchbcb commited on
Commit
06eed5b
·
verified ·
1 Parent(s): 0f44b4c

round7 2B: round7_2b_results.md

Browse files
Files changed (1) hide show
  1. docs/round7_2b_results.md +123 -0
docs/round7_2b_results.md ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Round 7 结果报告 — 2B 稠密基座直接迁移(Ponder-动态MoE + MTP)
2
+
3
+ > 架构宪法 §七:"机制全部跑通、ablation 有效,再正式迁移到 2B 稠密基座正式训练。"
4
+ > 本轮为 **跳过 0.3B/0.5B 中间尺度的指令式直接迁移**:round6 四判据达标后,直接对
5
+ > MiniCPM5-2B(42 层 / hidden 2048 / GQA 16+2 / intermediate 6144 / vocab 130,560)实施
6
+ > 同构 Ponder-动态MoE + MTP 改造与正式训练。
7
+
8
+ ## 一、执行环境
9
+
10
+ | 项 | 值 |
11
+ |---|---|
12
+ | GPU | Tesla T4 15GB(sm_75) |
13
+ | 精度 | **fp16 + GradScaler**(T4 无原生 bf16 tensor core,`resolve_dtype` 正确降级;宪法 §四 的 BF16 AMP 条款按硬件能力映射为 fp16 AMP) |
14
+ | 注意力 | SDPA memory-efficient(FlashAttention-2 需 sm_80+,T4 物理不支持——宪法 §三.1 底层加速条款在 T4 上的等价实现) |
15
+ | 栈 | torch 2.11.0+cu128 / transformers 5.16.1 / peft 0.20.0 / accelerate 1.14.0 |
16
+ | 训练时长 | 27.8 分钟(1200 iter,~1.2 s/iter 均值) |
17
+ | 显存峰值 | ~13.3 GB / 15.4 GB(含 autocast 与 MTP 全序列 logits) |
18
+
19
+ ## 二、转换(稠密 → Ponder-动态MoE)
20
+
21
+ `convert_to_ponder_moe.py --src tchbcb/MiniCPM5-2B-cpu --num-experts 8
22
+ --mtp-num-tokens 2 --ponder-signal learned --max-ponder-steps 8 --dtype float16
23
+ --load-dtype float16 --src-device cuda`
24
+
25
+ | 模块 | 参数量 | 说明 |
26
+ |---|---|---|
27
+ | 思考块 | 层 [34, 42),8 层 FFN 拆 8 同构专家 | **参数守恒 301,989,888**(gate/up 行切 / down 列切,逐位断言通过) |
28
+ | Router(新增) | 131,136 | 每层 Linear(2048→8),零初始化 → 初始 p=1/8 全激活,**与稠密基座严格等价**(重载自检 moe_active=8.0 证实) |
29
+ | Halt 头(新增) | 2,049 | MLP halting head(round5 方向①规格) |
30
+ | MTP 头(新增) | 25,178,112 | D=2 深度,共享 lm_head,推理自动旁路 |
31
+ | **总参数** | **2,542,067,777** | |
32
+ | **宪法 §四 冻结方案可训** | **26,949,697** | Router(16 张量) + Halt(2) + MTP(10) + 思考块 LoRA r16(64),主干与专家全部冻结 |
33
+
34
+ 2B 内存适配(Colab 系统内存 12.7GB 约束):
35
+ - `--load-dtype float16`:转换器与训练器均 fp16 直接加载,杜绝 fp32 中转(峰值 10GB+ 必 OOM)
36
+ - `--src-device cuda`:稠密基座驻留 GPU,权重拷贝跨设备完成,拷贝后即时释放
37
+ - transformers v5 语义修正:`from_pretrained` 不传 dtype(auto=checkpoint fp16,meta 快路径 0.4s);显式 dtype kwarg 会触发全量 `_init_weights` 慢路径(2.5B 参数分钟级)
38
+
39
+ ## 三、训练(宪法 §四/§六 全条款落实)
40
+
41
+ ```
42
+ python train_ponder_moe.py --model out_2b/pnet2b_moe --data out_2b/data_zh/zh_cot.jsonl \
43
+ --out out_2b/ckpt_2b --epochs 2 --batch-size 2 --accum 4 \
44
+ --difficulty-prior easy:0.7,medium:0.4,hard:0.15 --dtype auto --grad-ckpt --lora 16
45
+ ```
46
+
47
+ - 数据:MetaMathQA_GSM8K_zh 扫描 16,669 条 → 1200 训练(easy/medium/hard 各 400,按解答步数分桶)+ 90 评估(各 30)
48
+ - 总 Loss = LM + β·KL(‖Geometric(p_g 难度先验)) + 负载均衡 aux + MTP(宪法 §六 唯一公式)
49
+ - **单次路由铁律**:每 forward 每层 Router 恰 1 次前向,Ponder 循环与 commit pass 全程
50
+ 复用同一专家组(route_mode fresh→frozen,round6 结构性验证代码原样生效)
51
+ - 混合精度:前向 autocast fp16(CE/softmax 自动升 fp32);Router/MTP/LoRA 参数恒 fp32
52
+ (90 张量,防 fp16 AdamW 更新被参数分辨率吞掉);grad-ckpt 用 use_reentrant=False
53
+ (重计算保留 autocast 上下文,否则 fp32 Router 遇 fp16 隐状态报 dtype 错)
54
+
55
+ ### 训练曲线(epoch 级,train_report.json)
56
+
57
+ | epoch | loss | kl | aux | mtp | active | steps |
58
+ |---|---|---|---|---|---|---|
59
+ | 1 | 5.798 | 1.041 | 5.668 | 4.669 | 1.851 | 1.428 |
60
+ | 2 | **3.247** | 0.938 | 5.219 | **2.656** | **1.519** | **1.129** |
61
+
62
+ 全程无 NaN。active 8.00→1.52(**自发稀疏化至 19%**,与 round6 0.3B 的 27% 同构行为);
63
+ steps 8.00→1.13(halting 从随机满循环收敛到先验附近的早停)。
64
+
65
+ ## 四、评估(90 条分桶 + forced-sweep + SSD-LRU)
66
+
67
+ ### 难度分桶
68
+
69
+ | bucket | n | CE ↓ | active | steps | MTP top-1 |
70
+ |---|---|---|---|---|---|
71
+ | easy | 15 | 4.019 | 1.602 | 2.00 | 0.549 |
72
+ | medium | 15 | 4.229 | 1.614 | 2.03 | 0.526 |
73
+ | hard | 15 | 4.073 | 1.618 | **2.07** | **0.572** |
74
+
75
+ 对比 round6(0.3B):CE 5.91-6.13 → **4.02-4.23**(−1.9 nats);MTP top-1 0.37-0.38 →
76
+ **0.53-0.57**。steps 分化方向正确(hard 2.07 > medium 2.03 > easy 2.00)但幅度轻微
77
+ ——halting 主导信号仍是难度先验 KL,hard 桶的"多想"倾向需要更长训练或更强
78
+ step-ce 监督(round5 方向②路径,本层未启用)。
79
+
80
+ ### 专家结构特化(每 forward 每层激活次数)
81
+
82
+ - layer 40 仅存活 4 专家 [45,45,0,0,0,45,0,45];layer 36 专家 5 死亡 / 专家 3 弱化;
83
+ - 均衡度 0.82-1.00,无专家坍缩(aux 负载均衡生效)
84
+ - **单次路由 → LRU 稳定性**:与 round6 一��,每 token 每层恰一次 miss 后循环全命中
85
+
86
+ ### 思考深度-质量曲线(forced rollout CE)
87
+
88
+ | K | 1 | 2 | 4 | 8 |
89
+ |---|---|---|---|---|
90
+ | CE | **3.216** | 3.938 | 9.893 | 16.154 |
91
+
92
+ 与 steps→1.13 收敛自洽:模型已学会在 1-2 步内早停,强制加深反而有害——
93
+ **佐证 ponder_cost 正则的必要性**(与 round6 forced-sweep 结论一致)。
94
+
95
+ ### SSD-LRU 模拟(cap=4/层)
96
+
97
+ hit_rate 0.586(hit=479 / miss=339 / evict=307),miss_calls=113 > 结构上界 64:
98
+ cap=4 低于该工作集(跨 batch 路由多样性 + frozen/commit 批),发生真实 thrash。
99
+ 机制本身正确(输出逐位一致语义由 round6 测试 [7] 保证),**容量规划语义 =
100
+ 每 forward 激活专家数上限**——生产部署建议 cap ≥ N 或按层路由分布动态配置。
101
+
102
+ ## 五、2B 适配补丁清单(相对 round6 代码的全部增量)
103
+
104
+ 1. `convert_to_ponder_moe.py`:`--load-dtype`(fp16 直接加载)+ `--src-device`
105
+ (基座驻留 GPU)+ 跨设备断言修复 + 拷贝后即时释放稠密基座
106
+ 2. `train_ponder_moe.py`:加载去 dtype kwarg(v5 auto 快路径)+ autocast 前向包裹 +
107
+ Router/MTP/LoRA 参数 fp32 化 + `use_reentrant=False` 非重入 checkpointing
108
+ 3. 环境:卸载 torchao 0.10(peft 0.20 版本门冲突);后台训练用 setsid + 看门狗脚本
109
+ (防进程组回收)
110
+
111
+ ## 六、产物
112
+
113
+ | 路径(/content/pondernet_repo/pondernet/out_2b/) | 内容 |
114
+ |---|---|
115
+ | `pnet2b_moe/` | 转换产物:fp16 safetensors 5.08GB + tokenizer(自包含)+ CONVERT_REPORT.txt |
116
+ | `ckpt_2b/` | 训练产物 103MB:ponder_head.safetensors + ponder_moe_extras.safetensors(26 张量)+ adapter/(LoRA r16 层 34-41)+ train_report.json |
117
+ | `eval_2b.json` | 分桶评估结果 |
118
+ | `data_zh/` | zh_cot.jsonl (1200) + zh_cot.eval.jsonl (90) |
119
+
120
+ **交付状态**:HF 仓 `tchbcb/samaidev-pnet-2b` 推送需写权限 token(当前 Colab 实例
121
+ 未配置 HF_TOKEN)。产物已就绪于 `/content`,配置 token 后执行:
122
+ `cd /content/pondernet_repo && git add pondernet/out_2b/{ckpt_2b,eval_2b.json} docs/round7_2b_results.md && git commit -m "round7: 2B migration" && git push`
123
+ (pnet2b_moe 建议走 LFS 或单独 model repo)