这是一个面向可验证数学规划的离散扩散语言模型微调项目。我们以公开的
SEDD-medium(约 4.24 亿参数)
为基础,不要求模型直接计算数值,而是让它逐轮生成引用式工具调用;外部
fractions.Fraction 计算器负责精确执行,每一步都可以解析、回放和审计。
公开推理权重: Jrffy666/SEDD-medium
Problem: 7 + 9 * 7
<CALL>MUL(x1,x2)</CALL> -> r0=63
<CALL>ADD(x0,r0)</CALL> -> r1=70
<FINAL>r1</FINAL>
模型负责选择运算和引用关系,计算器负责数值执行。工具参数只能引用 x0、
r0 等符号,不能直接包含数值。这种设计将“规划是否正确”与“计算是否正确”
分开,避免把格式正确或偶然命中答案误判为可靠推理。
最终模型在一个固定的 512 道七步算术外推面板上完成了评估,但这 512 道题 并不应全部称为未见测试集:
- 第 0--63 题曾用于 Stage 3 和 Recovery 的阶段性外推观察,实际上承担了
extrapolation-dev的作用; - 第 64--511 题在最终模型冻结前未用于阶段性观察,共 448 题,是本项目更严格 的 held-out 结果口径。
因此,主要结果是:
| 评测范围 | 最终答案正确率 | 解释 |
|---|---|---|
| 未用于阶段观察的后 448 题 | 208/448(46.43%) | 主要 held-out 结果 |
| 包含 64 道开发观察题的全部 512 题 | 237/512(46.29%) | 补充描述性统计 |
完整 512 题报告还得到:
| 指标 | 结果 |
|---|---|
| 完成率 | 444/512(86.72%) |
| 完整计划与 oracle 一致 | 230/512(44.92%) |
逐轮动作一致率(包含 CALL 和 FINAL) |
86.32% |
| 动作语法有效率 | 98.24% |
这些聚合指标不能替代一个从开发到最终发布始终完全隔离的独立测试面板。若要
继续迭代模型,下一次正式比较应使用不同随机种子重新生成、预先登记并在模型
冻结前从不运行的七步测试集。当前公开指标和报告哈希见
results/final/。
项目实际使用了三种不同目的的数据:
| 划分 | 用途 | 是否参与梯度更新 |
|---|---|---|
train |
学习当前课程阶段的工具动作 | 是 |
validation |
同运算深度的插值验证和训练监控 | 否 |
extrapolate |
更长运算链的结构外推评估 | 否 |
普通 validation 与对应阶段的训练题具有相同运算深度,例如 Stage 3 都是
四至六步题;它不能回答模型是否能推广到七步长链。因此实验中额外观察了少量
extrapolate 样本。方法上的问题不在于观察外推开发集,而在于其中前 64 题
后来仍被计入 512 题总表。README 因此将这 64 题明确重分类为开发观察样本,
并把未观察的后 448 题单独作为主要结果。
训练、插值验证和外推集合按表达式签名去重,训练器只读取 train/validation transition,不会读取外推题进行梯度更新。这里的“阶段性观察”是评估和模型 选择层面的信息泄露,不是训练样本泄露。
数据生成器固定为 Google DeepMind Mathematics Dataset commit
427f45075f84b8b9774950196ad63867ca20ffb3。每道表达式经过以下处理:
- 使用受限 Python AST 编译,只接受项目支持的算术表达式;
- 通过
fractions.Fraction精确执行 oracle 轨迹; - 将工具计算结果与 DeepMind 官方答案严格比较,不一致则拒绝样本;
- 将一道题拆成“一份当前状态 -> 一个
CALL或FINAL动作”的多条 SFT transition; - 使用 GPT-2 tokenizer 编码,序列长度固定为 256,禁止截断。
工具结果只会出现在下一条 transition 的已知 prompt 中,模型不会被监督去生成
计算结果,也不会使用模型生成的自由文本思维链作为训练数据。协议和数据构造
分别见 tool_protocol.py 与
deepmind_tool_data.py。
| 阶段 | 训练数据 | transition 数 | 优化步数 | 峰值学习率 | 核心训练时间 |
|---|---|---|---|---|---|
| Stage 1 | 10,000 道单步题 | 20,000 | 400 | 5e-5 |
约 11.6 分钟 |
| Stage 2 | 30,000 道二至三步题 | 105,197 | 1,320 | 2.5e-5 |
约 38.2 分钟 |
| Stage 3 | 50,000 道四至六步题 | 300,095 | 3,440 | 2.5e-5 |
约 99.9 分钟 |
| Recovery | 深度 1--6 均衡混合 | 120,000 | 600 | 5e-6 |
约 17.4 分钟 |
Stage 3 提升了长链规划能力,但短链保持测试降至 Stage 1 的 0/64 和 Stage 2 的 32/64,表现出明显的灾难性遗忘。Recovery 从 Stage 3 online 权重出发, 使用较低学习率和深度均衡数据恢复短链能力,同时尽量保留七步外推表现。
Stage 2、Stage 3 和 Recovery 只 warm-start 上一阶段的模型与 noise 权重;优化器、 EMA、batch cursor 和阶段步数都会重新初始化。最终发布和评测使用 online 权重, 不是 EMA 权重。
正式运行使用:
- NVIDIA RTX PRO 6000 Blackwell 96GB;
- Python 3.12.3、PyTorch 2.8.0+cu128;
- 全参数 BF16 SFT,FP32 master weights;
- AdamW、余弦学习率、5% warmup、weight decay 0;
- 有效 batch 160、梯度裁剪 1.0、EMA 0.9999;
stratified_high_noise_25扩散时间采样;- 64 步扩散推理。
四次核心训练合计约 2 小时 47 分钟,不含数据准备和完整评估。权威参数见
configs/final/,configs/planned/ 仅保留前期计划,不能当作
最终运行配置。
这个模型适合研究受限算术表达式上的结构化工具规划,支持 +、-、*、
/ 和括号。它不是通用数学模型,也不适用于自然语言应用题、证明、代数、
几何、微积分、安全关键计算或任意代码执行。
46.43% 的未观察七步题准确率说明这条训练路线具有可学习性,但长链规划、错误 恢复和采样稳定性仍有明显提升空间。98.24% 的语法有效率也低于项目预先设定的 99% 目标,因此该模型应被视为可审计的研究结果和演示,而不是生产级计算器。
model/ SEDD 模型结构
configs/planned/ 前期计划配置,仅保留实验历史
configs/final/ 从正式 resolved_run 导出的脱敏真实配置
scripts/ 数据、训练、评估、资产和证据脚本
tests/ Python 单元测试
demo/ FastAPI + React 数学问答演示
data/*_smoke_v1/ 可提交的小型 smoke fixture
datasets/manifests/ 公开 smoke 清单与私有正式清单的哈希承诺
results/final/ 聚合评测、checkpoint SHA 和 artifact manifest
docs/ 训练路线、模型卡和实验总结
third_party/ 外部数据生成器的固定版本说明
大文件不进入 Git。公开仓库包含源码、smoke fixture、脱敏配置和聚合证据,不 包含生产数据、逐题最终评测轨迹、优化器 checkpoint 或私有 manifest。
Python 3.11 的本地 Demo/测试环境:
python3.11 -m venv .venv
.venv/bin/python -m pip install -r demo/backend/requirements.txt
npm --prefix demo/frontend ci
npm --prefix demo/frontend test
npm --prefix demo/frontend run build
.venv/bin/python -m pytest -q tests demo/backend/tests匿名 clone 后,无需模型权重即可运行明确标识的 Mock UI:
SEDD_DEMO_RUNTIME=mock ./demo/run_demo.sh下载并校验原始 SEDD-medium 与 GPT-2 tokenizer:
.venv/bin/python scripts/fetch_public_assets.py下载公开的 FP32 online Safetensors 推理权重:
hf download Jrffy666/SEDD-medium --local-dir ./hf-model这是自定义 SEDD PyTorch artifact,不是标准 Transformers AutoModel
checkpoint。请使用仓库中的 hf_model_loader.py 严格加载。
公开推理包不包含优化器、EMA、RNG 或精确恢复训练所需的状态。
model.safetensors 大小为 1,697,932,808 bytes。它导出自未公开的原始训练
checkpoint;原始 checkpoint 大小为 6,792,032,589 bytes,SHA-256 为:
020f76c434acb7652adcf0bc09f26c4605a00e7fe4462b6f71cea7f91438ebd5
使用私有 .pt checkpoint 运行真实 Demo 时,默认路径为:
checkpoints/sedd_medium_tool_depth_balanced_recovery_full_v1/checkpoint_latest.pt
也可以指定外置路径:
SEDD_MODEL_DIR=/data/sedd-medium \
SEDD_CHECKPOINT_PATH=/data/checkpoint_latest.pt \
HF_HOME=/data/hf-cache \
./demo/run_demo.sh真实模式加载失败时不会自动退回 Mock。
正式训练环境与本地 Demo 环境有意分开:
python3.12 -m venv .venv-final
.venv-final/bin/python -m pip install -r requirements-training-final.txt
scripts/bootstrap_deepmind_source.sh
.venv-final/bin/python scripts/fetch_public_assets.py
PYTHON_BIN=.venv-final/bin/python PROFILE=production \
scripts/prepare_deepmind_tool_curriculum.sh公开脚本会生成可用于复核训练流程的独立外推面板,不会生成或暴露私有评测
面板。公开 train/validation shard 可以通过 configs/final/ 中的 SHA-256 校验;
完整私有 manifest 只公布哈希承诺。
在与正式实验相当的 96GB GPU 上运行四阶段训练:
PYTHON_BIN=.venv-final/bin/python scripts/run_final_curriculum.sh默认 micro-batch 为 160。显存较小时可以覆盖 MICRO_BATCH 和 GRAD_ACCUM,
但这将不再是完全相同的 batch 配置。完整协议见
docs/current_tool_training_route.md,中文实验
记录见 docs/fine_tuning_work_summary_zh.md。
项目基于 Aaron Lou 等人的
Score-Entropy-Discrete-Diffusion。
SEDD 源码遵循 MIT License;DeepMind Mathematics Dataset 生成器和由它生成的
smoke fixtures 遵循 Apache-2.0。详见 LICENSE、
licenses/Apache-2.0.txt 和 NOTICE.md。
上游基础权重和私有训练 checkpoint 未通过本 Git 仓库重新分发,不能从源码 许可证推定模型权重许可证;Hugging Face 模型卡对公开权重的许可范围另有说明。