c5a3b7d0bb
- train_sft.py: FSDP 环境变量前置块(import 前,DDP 下无害);fail-fast 加载 顺序(数据→tokenizer→模型);首样本自检打印(真 tokenizer 掩码边界肉眼核对); remove_unused_columns=False 等非显然约束逐条注释;sanity 模式 = replace 覆盖 - train_sft.sh: 显式 CUDA_VISIBLE_DEVICES 4 卡、PYTHONUNBUFFERED、HF 镜像/缓存 改道 /data,前置检查清单(含 scp 数据命令) - 本地验证:fail-fast 到 teacher 缓存缺失处显式报错(941/1000,59 条真实命中 反向证明 prompt_key 契约端到端成立) - roadmap 存档点:层 1 代码完成,进入运行阶段 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
5.3 KiB
Markdown
60 lines
5.3 KiB
Markdown
# 00 · 分层重构路线图
|
||
|
||
> 原则:按论文概念的依赖顺序逐层重建,每层完成后代码可运行、可验证。学习路径 = 提交历史。
|
||
> 后面各层不提前细化——细节在进入该层时随章节文档长出来(依据见 `appendix-claudemd-decisions.md` 的延迟接入哲学)。
|
||
|
||
## 当前进度(存档点)
|
||
|
||
> 每次断点(层完成/工作暂停)更新此节。恢复上下文时:读 CLAUDE.md → 本节 → 对应章节文档。
|
||
|
||
- **日期**: 2026-07-18
|
||
- **当前层**: 层 1(SFT 基线),待开工
|
||
- **层 0**: ✅ 已关账(2026-07-18)。两端 pytest 4/4 全绿;本地 env `ars-opd`(torch 2.13 cu130,4070Ti 可做小规模 GPU 调试);远程 env `/data/zym/envs/ars-opd`(torch 2.10 cu128,8 卡可见);gitea 双端打通(SSH 222)
|
||
- **已完成学习**: 第一章全部精讲(式 1-8、§3.1-3.6、detach 命门专题);第二章已写好待读
|
||
- **层 1 代码全部完成**(T1 configs / T3 data / T4 trainer / T2 teacher / T5 train_sft 脚本,46+ 单测全绿;teacher=MiniMax-M3 经自建网关,2026-07-18 改定)
|
||
- **下一步(运行阶段)**: ① 本地跑完 teacher 生成 1k(scripts/generate_teacher_completions.py,断点续传)→ ② scp parquet+缓存到远程 data/ → ③ 远程 `bash scripts/train_sft.sh sanity`(看首样本自检与 loss 下降)→ ④ `bash scripts/train_sft.sh` 正式 1 epoch → 关账判据见 docs/02 §5
|
||
- **层 1 讨论已完成的**: docs/02 全部难点已精讲(collator 五步流水线与坑二、FSDP 决策与 DDP 触发点、删除/替代清单逐项理由、hash 不稳定演示)
|
||
- **未精讲的文档账**: docs/01 的 §3.7(KL 锚三处实现差异)、§3.8(论文外稳定器)、§4(训练步流程走读)
|
||
- **未精讲的文档账**: docs/01 的 §3.7(KL 锚三处实现差异)、§3.8(论文外稳定器)、§4(训练步流程走读)
|
||
- **远程磁盘备忘**: 根分区 100% 的结构性原因是 `/root/zym`(507G 历史工作区)压在根分区,建议择期整体搬迁 `/data`;临时缓解 = 清 `/tmp/pip-unpack-*`、旧 tar.gz、journal。所有新增写盘已改道 `/data/zym`
|
||
|
||
## 分层计划
|
||
|
||
| 层 | 主题 | 论文对应 | 产出 | 验证方式 |
|
||
|----|------|----------|------|----------|
|
||
| 0 | 环境与骨架 | — | 本地/远程 conda 环境、gitea 同步、包骨架 | 两端 `pytest` 空跑通过 |
|
||
| 1 | SFT 基线 | §3.1 式(1) | 数据管线 + 最小 SFT 训练脚本(Qwen3-0.6B) | 远程 4 卡跑通,loss 正常下降 |
|
||
| 2 | White-box OPD 基线 | §3.1 式(2) | token 级反向 KL 蒸馏(teacher Qwen3-4B 本地 vLLM) | 远程跑通;理解式(2)梯度爆炸问题(§4.1) |
|
||
| 3 | 相似度 + MC 估计器 | §3.2.1-3.2.2 式(3)(4)(5) | `similarity.py` + `estimator.py`(纯逻辑) | 本地 CPU 单测,对拍 `validate_mc_estimator.py`;detach 命门测试已预置(`tests/test_estimator_detach.py`),完成后需接入真实实现 |
|
||
| 4 | Peak-entropy 调度器 | §3.2.3 式(6)(7) | `chunking.py`(纯逻辑) | 本地 CPU 单测:toy 熵序列上验证 chunk 选择与合并 |
|
||
| 5 | 完整 OmniOPD | §3.2.4 式(8) | `teacher.py`(API 客户端+缓存)+ `trainer.py`(chunk 损失 + KL 锚定) | 远程端到端跑通(DeepSeek/MiniMax teacher) |
|
||
| 6 | 评测与消融 | §5 | 数学评测脚本;三个消融开关 | MATH-500 子集上 student 有可测提升趋势 |
|
||
|
||
## 章节文档索引
|
||
|
||
| 文档 | 内容 | 状态 |
|
||
|------|------|------|
|
||
| `00-roadmap.md` | 本文 | ✅ |
|
||
| `01-paper-code-map.md` | 论文 §3-§4 精读 + 参考实现全景解剖 + 概念↔代码对照表 | ✅ |
|
||
| `02-sft-baseline.md` | 层 1:SFT 与数据管线 | ✅ 待读 |
|
||
| `03-whitebox-opd.md` | 层 2:token 级 KL 蒸馏及其脆弱性 | ⬜ |
|
||
| `04-mc-estimator.md` | 层 3:MC 估计 + 贝叶斯平滑 | ⬜ |
|
||
| `05-entropy-chunking.md` | 层 4:熵调度 | ⬜ |
|
||
| `06-omniopd-full.md` | 层 5:完整损失与 teacher 客户端 | ⬜ |
|
||
| `07-eval-ablation.md` | 层 6:评测与消融 | ⬜ |
|
||
|
||
## 关键设定(与论文默认对齐,规模缩小)
|
||
|
||
| 参数 | 论文默认 | 本项目 | 说明 |
|
||
|------|----------|--------|------|
|
||
| chunk 数 M | 10 | 10 | 每条轨迹审计的 chunk 数 |
|
||
| rollout 数 N | 10 | 10 | 每个 chunk 的 teacher MC 采样数(§4.2 证明 N=10 是甜点) |
|
||
| chunk 长度 C | 50 | 50 | token 数 |
|
||
| 先验强度 α | 1.0 | 1.0 | `chunk_alpha`,Dirichlet 平滑 |
|
||
| 相似度 φ | **edit_distance**(§5.1) | edit_distance | ⚠️ 代码默认 rouge1(config L298)与论文默认背离,须显式指定 |
|
||
| KL 锚权重 β | **0.1**(§5.1) | 0.1 | ⚠️ 代码默认 `mc_kl_weight=0` 与论文背离,须显式指定 |
|
||
| 训练数据 | DAPO-Math-17K(prompt-only) | 同(层 1 先抽 ~1k 子集控制 API 成本) | 一份数据服务层 1-6;学生升到 1.7B 后可直接对表论文 Table 1 |
|
||
| Student | Qwen3-1.7B / 4B | Qwen3-0.6B | 跑通优先;升级 1.7B 即可与论文对比 |
|
||
| Teacher | Qwen3-32B / Claude-4.5-Haiku / Gemini-2.5-Flash | MiniMax-M3(自建 new-api 网关,OpenAI 兼容;2026-07-18 由 DeepSeek 改定) | logit-free 主路径;M3 是 reasoning 模型,思考段入库前剥离(teacher.py strip_think) |
|
||
| SFT 基线定义 | teacher rollout 上的离线蒸馏(非人写答案) | 同 | 对应参考实现 `_generate_teacher_completions` + JSONL 缓存路径 |
|