round7 2B: round7_2b_results.md
Browse files- 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)
|