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 残点实测矩阵
This commit is contained in:
fmq
2026-09-02 19:37:25 +08:00
parent b058e66722
commit f2700031ce
30 changed files with 3045 additions and 49 deletions
+113
View File
@@ -0,0 +1,113 @@
# Windows 节点远程桌面连接手册(经 Linux 跳板中转)
> 2026-08-20 实战总结。背景:两台 Windows 计算节点(node-fmq-dckj-02/03)与本机不直连,
> 必须经 Linux 跳板 node-fmq-dckj-01dckj@100.66.1.5Tailscale 网段)中转。
> 本机无节点小宝直连 Windows 的能力,所有 Windows 运维(尤其 Docker Desktop 登录自启)
> 都走本文的 SSH 隧道 + RDP 方案。
## 1. 网络拓扑与凭据
| 节点 | 地址 | 登录 | 密码 | 可达路径 |
|---|---|---|---|---|
| 跳板 dckj-01 | 100.66.1.5 | dckj | dckjzndx | 本机直连 |
| node-fmq-dckj-02 | 192.168.6.102 | fmq | 1235 | 仅经跳板 |
| node-fmq-dckj-03 | 192.168.6.103 | Administrator | dev#2dckj@zndx | 仅经跳板 |
- Windows 侧 SSH22)和 RDP(3389)均开放,但只对跳板所在的内网段可达。
- Windows 上运行**节点小宝**(内网穿透工具,服务名 `NodeBabyLinkService`
`StartMode=Auto` 开机自启),负责与 dckj-01 之间的 P2P 链路——
跳板能通 SSH 本身就说明节点小宝是活的。
- ⚠️ 密码写在文档里仅图方便,机器若更换使用人请先改密;长期方案建议配 SSH 公钥。
## 2. 核心方案:SSH 隧道转发 RDP(无需在跳板装任何桌面软件)
原理:本机 `ssh -N -L` 建立经跳板的加密隧道,把远端 3389 映射到本机端口,
再用本机任意 RDP 客户端(Remmina / xfreerdp / GNOME Connections)连 localhost。
```bash
# 隧道一:本机 13389 → dckj-03 (192.168.6.103) RDP
sshpass -p 'dev#2dckj@zndx' ssh -N \
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
-o ServerAliveInterval=30 -o ServerAliveCountMax=6 \
-o ProxyCommand="sshpass -p dckjzndx ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p dckj@100.66.1.5" \
-L 13389:192.168.6.103:3389 Administrator@192.168.6.103 &
# 隧道二:本机 13390 → dckj-02 (192.168.6.102) RDP
sshpass -p 1235 ssh -N \
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
-o ServerAliveInterval=30 -o ServerAliveCountMax=6 \
-o ProxyCommand="sshpass -p dckjzndx ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p dckj@100.66.1.5" \
-L 13390:192.168.6.102:3389 fmq@192.168.6.102 &
```
然后 RDP 客户端连接:
- dckj-03 → `localhost:13389`(用户 Administrator
- dckj-02 → `localhost:13390`(用户 fmq
要点:
- `ProxyCommand` 里层 `sshpass` 付**跳板机**密码,外层 `sshpass` 付**目标机**密码,
两级密码各管一段,这是双密码跳板场景的关键结构。
- `ServerAliveCountMax=6`(默认 3):节点小宝 P2P 链路偶发抖动,放宽容忍避免隧道被误杀。
- 验证隧道:`timeout 3 bash -c '</dev/tcp/127.0.0.1/13389' && echo OK`
- 隧道断了(症状:RDP 卡死、后台 ssh 报 "Timeout, server not responding")直接重跑上面命令即可。
## 3. 经跳板执行远程命令(非交互,运维日常)
```bash
rwin() { # rwin <win-02|win-03> "命令"
case "$1" in
win-02) h=fmq@192.168.6.102; p=1235 ;;
win-03) h=Administrator@192.168.6.103; p='dev#2dckj@zndx' ;;
esac
sshpass -p "$p" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
-o ProxyCommand="sshpass -p dckjzndx ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p dckj@100.66.1.5" \
"$h" "$2"
}
# 用例:rwin win-03 "docker ps"
```
`scripts/fetch_results.sh` / `scripts/deploy.sh` 已原生支持跳板:profile 里加
`REMOTE_PROXY_JUMP=dckj@100.66.1.5` 即自动 `-o ProxyJump`win-01/win-02 两个 profile 已配好)。
## 4. 重要经验:Windows 节点重启后的恢复顺序
**Docker Desktop 是 GUI 程序,必须有所属用户的交互桌面会话才能启动引擎。**
从 SSH 远程 `Start-Process 'Docker Desktop.exe'` 无效——进程落在无桌面的 SSH 会话里,
GUI 初始化不了,引擎 named pipe(`dockerDesktopLinuxEngine`)不会创建,
`docker ps` 报 "unable to start" / "cannot find the file specified"。
正确的恢复链:
1. 确认节点小宝活着(能 SSH 进去即活着;服务 `NodeBabyLinkService` Auto 自启,一般不用管)。
2. 建隧道、RDP 登录对应账户的桌面(**必须是与 Docker 数据同账户的桌面**,
dckj-03 的 Docker 挂在 Administrator 下,登录别的用户如 gaoyuqi 没用)。
3. 登录后 Docker Desktop 自动启动(两台均已开 AutoStart),任务栏鲸鱼图标静止即就绪。
4. `dcts-node` 容器配了 restart 策略,引擎就绪后**自动恢复运行**,无需手动 compose up。
5. 验证:`rwin win-03 "docker ps"` 看到 `dcts-node Up`,再看看板心跳上线。
诊断命令速查(经 `rwin` 执行):
```powershell
# 开机时间(判断是否重启过)
(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
# 节点小宝服务状态
Get-CimInstance Win32_Service | Where-Object {$_.Name -match 'NodeBaby'} | Format-List Name,State,StartMode
# Docker 引擎是否就绪
docker ps
# 当前桌面会话归属(判断该登录哪个账户)
quser
```
## 5. 本次事故时间线(2026-08-20
- 两台 Windows 于 14:52 左右重启;节点小宝 Auto 自启正常(开机 16 秒内拉起),
网络链路一直通。
- Docker Desktop 虽配了 AutoStart,但因 **Administrator/fmq 未登录桌面**Docker Desktop
依赖登录会话),引擎未启动,节点掉线。
- 远程 Start-Process 反复失败 → 查日志发现 backend 未被拉起 → `quser` 发现桌面会话
属于第三方用户且已断开 → 定位根因。
- 经 SSH 隧道 RDP 登录桌面后,Docker 引擎启动、`dcts-node` 容器自动恢复。
治本方向(未做,待定):给两台 Windows 配置 Administrator/fmq 自动登录
(注册表 `AutoAdminLogon`,密码明文存储需评估安全),彻底摆脱重启后必须人工 RDP。