收敛攻坚(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 残点实测矩阵
9.3 KiB
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,多节点一致):
seed_nc发散(best_max_relc 1.15e15),fort.7 含 4823 行 NaN → 污染种子;nl从污染种子启动 → TLUSTY 立即崩溃,fort.9 写出全0.00E+00(NaN 参与的相对变化无法计算,写出零;fort.9 尾部 TEMP 列可见 NaN);check_fort9:max_relc=0 < chmax=1e-3 →converged=true(伪收敛);- 因 nl 被判"收敛",nl_direct 回退被跳过(回退仅在 require_converged 失败时触发);
- 最终门槛全灭(emflux nan_ratio=100%、温度 NaN、bfac 38% 极端值)→ 点失败,
282/288 个 emflux 失败的 ratio 恰为 0(
integrated_flux=0, n_points=0)。
三、修复
crates/common/src/runner.rs execute_tlusty_stage():
- 阶段被判 converged 后复查本阶段 fort.7(
atmosphere_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-4(NaN 伪收敛簇) | 邻点 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-2(20k 富氦簇) | 邻点 c-3_n-3_o-2 | ❌ iter42 发散 STOP(1.35e18) |
| q3 | t60000_g5.0_he-4_c-4_n-4_o-2(60k 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.0001–1.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_base(16 点分层抽样) | direct-nl + 最近完成点种子 | 4/16 |
| hard_ore03(12 个失败点) | 同上 + ORELAX=0.3 | 1/12 |
| ladder_60k_he4(60k 贫氦簇代表) | 55k→57.5k→60k 三步 Teff 步进 | ✅ 28it/3.9e-4,物理过,emflux=1.0008 |
| ladder_20k_he2(20k/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 终阶段 ChainStep(require_converged),前步收敛解作
后步 fort.8;链尾
nl_ladder用目标参数收尾。任一步发散即中止。 - 持久化:中间步「收敛 + fort.7 无 NaN」即登记
ModelSummary.ladder_seeds→ node executor 读快照字节随 TaskReport 上报(任务失败也上传)→ serverPOST /api/task/report落seeds_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/4(t55000 完整收敛 83it/3.7e-4/emflux 1.0008) |
| ladder20k_final | 20k 簇 nc+细化+7200s/步 | 0/3(step3 处 iter100 单深度 0.199 振荡) |
7.3 结论
- 部署项收益最大:重新部署 ubuntu-01 → 直接回收 32 点(确定性)。
- ladder 对本轮残点增益有限:全部变体合计 ~4-6/87。已实现的 ladder 保留 (自动触发、零额外成本、对上一轮 5 个验证点有效),但不应期望它清掉这批残点。
- 残点本质:20kK 富氦高重力簇在阻尼下不雪崩但呈单深度 POP 极限环 (iter 100 时个别深度 |ΔPOP|≈0.2 不衰减);60kK 贫 CNO 低重力簇从任何 CNO/He/logg/Teff 种子均在前几迭代雪崩。两者均已超出"步进/种子"工程层 可解范围,属 TLUSTY Newton 求解器在这些极端参数组合下的固有收敛域缺失。
- 可行后续(求解器层,需另行立项):针对极限环深度的逐深度阻尼/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 驱动)。