Files
DCTS/docs/failed400_nan_pseudo_convergence_2026_08_17.md
fmq f2700031ce feat(all): seed_step_stab 稳定化种子链与同族种子轮换、ladder/自适应 Teff/丰度轴延拓三级回退与梯级种子入库复用、热启动首末比豁免、workflow 完成翻转回退链阻塞修复、大气收敛权威统计与 M14 回填
收敛攻坚(81/400 失败点根因与实测,见 docs/failed81_cno_seed_popzer_dpsilg_2026_08_18.md):
- runner: 新增 seed_step_stab 策略链——同物理族(同 Teff/logg/logHe)CNO 邻居种子
  + DPSILG=3.0 λ 算子欠松弛 + POPZER=1E-10 微布居置零(联动 POPZR2/RADZER 同值
  + NITZER=1),针对 20kK He 富大气 He I/II 电离前沿布居极限环
- runner: 三级链内延拓回退(主链与 nl_direct 全败后自动触发):
  · 固定 ladder 步进——plan_ladder_steps 按归一化间隔选轴,Δlogg≤0.25/ΔTeff≤2.5kK,≤4 步
  · 自适应 Teff 延拓——步长 1250K 起、成功 ×1.5 恢复、失败二分至 25K 折叠墙,≤48 步
  · C/N 丰度轴延拓——高温域(Teff>30kK)专用,严格同族种子沿 C(优先)/N 轴 0.2 dex 起步
  延拓阶段 NITER 下限提至 300(慢收敛 waypoint 迭代饥饿误判修复)
- runner: 稳定化多档回退(DPSILG/POPZER 三档互补,联合回收 41/65);
  域门控 Teff≤30kK——高温高金属域实测旋钮致散(17 拍爆至 4e16),域外跳过
- 梯级种子持久化: 收敛中间模型登记 ladder_seeds 随上报落 server seeds 表
  (任务失败也上传,合成名 _ladder 与真实网格点零冲突),簇内相邻失败点自动复用

调度与执行:
- scheduler: 策略解析新增 seed_step_stab 臂——find_exact_family_seed_from_db 严格
  同物理族判定(不做 global 退化,防 ladder 中间种子 ΔTeff≤5000K 误命中),
  排除本点历史已用种子实现重试轮换;链在 stab 耗尽时轮换未试过同族邻居重派
- executor: seed_step_stab 补种子下载(漏列曾致 78 任务假失败,seed_nc 无 fort.8 崩溃);
  Teff>30kK 域外自动降级普通种子链

收敛判据:
- conv_check: 热启动豁免——首拍 max_relc<1(种子已近解)时首末比 1e3 判据数学上
  不可达,豁免后交五重物理硬门槛裁决(修复 nl_ladder 0.038→6e-4 物理全过被误杀);
  冷启动仍受判据门控

workflow 生命周期:
- workflows/tasks: 完成 flip 增加「未消费回退链」阻塞子句——failed 点策略链未耗尽
  或链尾 seed_step_stab 尚有未试过同族种子时不得置 completed(修复最后活跃点 cold
  失败上报抢先 flip、still_running 守卫拦截后续策略永不派发);按 failed_stage 归因
  (synspec 失败行只看 synspec 链,防 stale 审计副本永久卡死)+ json_valid 脏行防护

统计与前端:
- 统计新增权威口径 tlusty_converged(不按策略拆)与 seed_step_stab_converged 分项,
  前端详情页色带/概览卡消费权威总数并新增稳定化青色段(修复 stab 收敛点漏计,
  生产 9137/9216 差额);M14 迁移回填历史 completed 点的 tlusty_status

文档:
- 新增 failed81 POPZER/DPSILG 制胜配方根因分析、Windows 节点经跳板 RDP 运维手册;
  failed400 增补 ladder 生产化实现与第二轮 121 残点实测矩阵
2026-09-02 19:37:25 +08:00

9.3 KiB
Raw Permalink Blame History

400 失败点二次分析与 NaN 伪收敛修复(2026-08-17

背景:三层修复(nst 行宽 / nl_direct 回退 / seed_finder 边界)部署重跑后, 9216 点中 8816 完成、400 失败。数据源:最新 DB 快照 /home/fmq/下载/dcts.db

  • 全量更新后的 data/salvage/6 节点)。

一、400 点分类(按每点最新一次任务)

类别 数量 机制
NaN 伪收敛 261 见 §二,本轮核心 bug
真发散(nl/nl_direct 1e16 STOP ~131 20kK/logg≥6 富氦簇(~50+ 60kK/logg≤5.5 贫氦簇(~65)等
收敛但最深层能量残差 1.0–2.3% 超 1% 阈值 7 边际案例

分布(NaN 伪收敛修复前):teff=20000:76、55000:77、60000:121 为主。

二、NaN 伪收敛:根因链

生产工件实证(t60000_g6.0_he-4_c-4_n-4_o-4,多节点一致):

  1. seed_nc 发散(best_max_relc 1.15e15),fort.7 含 4823 行 NaN → 污染种子
  2. nl 从污染种子启动 → TLUSTY 立即崩溃,fort.9 写出0.00E+00 (NaN 参与的相对变化无法计算,写出零;fort.9 尾部 TEMP 列可见 NaN);
  3. check_fort9max_relc=0 < chmax=1e-3 → converged=true(伪收敛)
  4. 因 nl 被判"收敛"nl_direct 回退被跳过(回退仅在 require_converged 失败时触发);
  5. 最终门槛全灭(emflux nan_ratio=100%、温度 NaN、bfac 38% 极端值)→ 点失败, 282/288 个 emflux 失败的 ratio 恰为 0integrated_flux=0, n_points=0)。

三、修复

crates/common/src/runner.rs execute_tlusty_stage()

  • 阶段被判 converged 后复查本阶段 fort.7atmosphere_has_nan,含 NaN/Inf/***/ E+300 检测),命中即否决收敛并标注 note;
  • 被否决的阶段不产出种子produced_seed=None),阻断污染向下游传播。

测试:unit_nan_pseudo_convergence_veto(全零 fort.9 + NaN fort.7 → seed_nc 判失败、 nl 回退原始种子收敛);全 workspace 测试通过。

四、直测验证(test/20260817_failed400/direct-nl 复现 nl_direct 回退路径)

测试 种子 结果
q1 t60000_g6.0_he-4_c-4_n-4_o-4NaN 伪收敛簇) 邻点 o-2 的收敛 .7 12it 收敛 7.0e-4,温度三项全过(表层 0.79×Teff),emflux 4π∫Hλ/σT⁴=1.0014
q2 t20000_g6.5_he2_c-4_n-4_o-220k 富氦簇) 邻点 c-3_n-3_o-2 iter42 发散 STOP1.35e18
q3 t60000_g5.0_he-4_c-4_n-4_o-260k g5 簇) 邻点 o-4 的收敛 .7 100it 耗尽,max_relc 546(温度结构物理但未收敛)

q1 证明:NaN 伪收敛簇(261 点,65%)在修复后经 nl_direct 回退路径可完整恢复 (数值收敛 + 物理门槛全过)。q2/q3 为真发散硬核(~131 点),所用邻居种子不足以 收敛,需依赖生产的 exact_family 种子选择、多策略重试或 Teff 连续步进。

五、三类问题的验证测试与方案(test/20260817_failed400/

5.1 NaN 伪收敛簇(261 点)回收估计验证 — 成立

分层抽样 17 点(每 teff 档 2 个,种子 = 完成点中 CNO 精确匹配/最近邻的 salvage .7),direct-nl= nl_direct 回退的等价路径):

  • 11/17 收敛(20–41 迭代),温度结构三项全过,emflux 1.00011.0017 全达标;
  • 6 个失败均为种子距离过大(Δlogg 0.5–1.5)直接 STOP——生产端 seed_finder 有 多候选 + 多策略重试(attempt 至 11 次),实际回收率高于单种子 65%;
  • 结论:"修复后预期回收 ~261 点"估计成立且偏保守。

5.2 能量边际点(7 个)— nl_tight 回退,已实现

实测(mg_tight):从自身最终模型续迭代、CHMAX 1e-3→1e-4,约 19 迭代后 最深层 (RAD+CON)/TOT 残差 0.0199/0.0228 → 0.0011/0.0016(降 ~10×)。

runner.rs 新增 nl_tight 回退:能量门槛失败 + 最终大气无 NaN 时,以 <label>_tight(CHMAX÷10)从自身模型续迭代,成功则刷新最终大气/快照并 重判能量。单测 unit_nl_tight_fallback_wiring 通过。

5.3 真发散硬核(~131 点)— 连续步进(continuation)方案验证通过

批次 配置 结果
hard_base16 点分层抽样) direct-nl + 最近完成点种子 4/16
hard_ore0312 个失败点) 同上 + ORELAX=0.3 1/12
ladder_60k_he460k 贫氦簇代表) 55k→57.5k→60k 三步 Teff 步进 28it/3.9e-4,物理过,emflux=1.0008
ladder_20k_he220k/6.5 富氦簇代表) g6.0→6.25→6.5 三步 logg 步进 27it/8.1e-4,物理过,emflux=1.0112<2% 阈值)

两个最难簇的代表点在 direct-nl、ORELAX 全部失败后,仅靠 2 个中间参数的 连续步进即完全收敛。机理:单步 Δ 超出 Newton 收敛域时,把参数空间距离 切分为多段,每段以段首收敛解热启动段尾。

5.4 生产化:ladder 策略已实现(2026-08-17

三层回退架构(runner 内自动触发,零配置/调度器改动):

主链(nst 修复后) → nl_direct(污染种子跳过) → nl_ladder(连续步进) → nl_tight(能量边际)
  • 规划plan_ladder_steps(seed, target)——归一化间隔更大的轴, 步长 Δlogg≤0.25 / ΔTeff≤2.5kK,≤4 个中间步;双轴均在单步域内不触发。 种子参数由 executor 从权威 seed_point_name 解析(parse_point_name)。
  • 执行:每中间步 clone 终阶段 ChainSteprequire_converged),前步收敛解作 后步 fort.8;链尾 nl_ladder 用目标参数收尾。任一步发散即中止。
  • 持久化:中间步「收敛 + fort.7 无 NaN」即登记 ModelSummary.ladder_seeds → node executor 读快照字节随 TaskReport 上报(任务失败也上传)→ server POST /api/task/reportseeds_dir/<name>_ladder/ + seeds 表(ON CONFLICT 仅刷新 file_path_ladder 后缀名与真实网格点零冲突;bucket 查找按数值列 匹配天然覆盖中间参数点)。簇内相邻失败点自动复用已收敛梯级。
  • 重复网格点:未来工作流若含与中间种子同参数的网格点,照常计算(种子≠结果), seed_step 命中同参数种子后 ~1–2 迭代收敛——重验五重门槛,成本可忽略。
  • 测试:test_plan_ladder_steps(规划纯函数)、unit_ladder_fallback_wiring (假 tlusty 六调用接线:seed_nc/nl/nl_direct 失败→ladder_g5.75/ladder_g6/ nl_ladder 收敛 + ladder_seeds 登记)、test_parse_point_name。 物理有效性由手工 ladder 实测证明(§5.3,与生产同一 ChainStep 配置与种子)。 workspace 全测试 10 套件通过。

部署:server + node 重建重部署后,对 400 失败点发起重试即可(ladder 自动生效)。

七、第二轮重跑后 121 残点分析与 ladder 实测(2026-08-18

7.1 121 残点分类(最新 DB,每点最新任务)

类别 数量 归因
NaN 伪收敛(否决未生效) 32 全部来自 node-fmq-ubuntu-01 旧二进制(其他节点同期已有 nl_tight 记录证明新二进制)——重新部署该节点即解决,随重试进入 nl_direct/正常链路
真发散(20kK/logg≥6 富氦簇) ~62 nl/nl_direct 均 1e16 STOP
真发散(60kK/logg5.0 最贫 CNO 簇) ~19 同上,且对一切种子/轴免疫
能量边际残留 2 nl_tight 已触发(其一 tight 数值收敛但模型含 NaN 被否决)

7.2 ladder 实测矩阵(12 点分层抽样 + 变体,test/20260817_failed400/

变体 配置 结果
ladder121 生产语义(nl 步进,Δlogg 0.25 / ΔTeff 2.5k 1/12
ladder121_teff 换 Teff 轴(同 CNO ±5kK rung +2/7
ladder121_nc 中间步 seed_nc 式(ilvlin=0 + ORELAX=0.3 + NITER=20 0/9(发散转"卡住"
ladder121_nc100 同上 + NITER=100 + 2× 细化(0.125/1.25k 0/9(单步可达 1e-4@34it,但链条后段单深度 POP 振荡 ~0.2 或 NITER 耗尽;每步最长达 1h+)
he_seed 60k 簇换 he0 种子直接 nl 1/4t55000 完整收敛 83it/3.7e-4/emflux 1.0008
ladder20k_final 20k 簇 nc+细化+7200s/步 0/3step3 处 iter100 单深度 0.199 振荡)

7.3 结论

  1. 部署项收益最大:重新部署 ubuntu-01 → 直接回收 32 点(确定性)。
  2. ladder 对本轮残点增益有限:全部变体合计 ~4-6/87。已实现的 ladder 保留 (自动触发、零额外成本、对上一轮 5 个验证点有效),但不应期望它清掉这批残点。
  3. 残点本质:20kK 富氦高重力簇在阻尼下不雪崩但呈单深度 POP 极限环 iter 100 时个别深度 |ΔPOP|≈0.2 不衰减);60kK 贫 CNO 低重力簇从任何 CNO/He/logg/Teff 种子均在前几迭代雪崩。两者均已超出"步进/种子"工程层 可解范围,属 TLUSTY Newton 求解器在这些极端参数组合下的固有收敛域缺失。
  4. 可行后续(求解器层,需另行立项):针对极限环深度的逐深度阻尼/POPZER 策略调优;或物理上接受这 ~85 点为"不可收敛角"并在工作流中显式标记。

7.4 测试工件

test/20260817_failed400/ladder121/ladder121_teff/ladder121_nc/ladder121_nc100/ladder20k_final/he_seed/batch_ladder.py(支持 --nc-int/--fine=N 变体的通用 ladder 驱动)。