From b25a7a8bfa35d4dfcb54d8ce40ed650d2fc9f77f Mon Sep 17 00:00:00 2001 From: cbb <2625274797@qq.com> Date: Sun, 18 Oct 2026 07:23:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20pipeline.sh=20run()=20=E5=9B=9E=E6=98=BE?= =?UTF-8?q?=E6=94=B9=E8=B5=B0=20stderr=E2=80=94=E2=80=94gate1=20=E7=94=A8?= =?UTF-8?q?=20tee=20=E6=8A=8A=20stdout=20=E5=AD=98=E6=88=90=20consistency.?= =?UTF-8?q?json=EF=BC=8C=E5=9B=9E=E6=98=BE=E6=B7=B7=E5=85=A5=E8=AE=A9=20ge?= =?UTF-8?q?n=20=E8=AF=BB=20CONSENSUS=20=E6=97=B6=20JSONDecodeError=20?= =?UTF-8?q?=E5=81=9C=E5=9C=A8=20gen=EF=BC=88=E7=AC=AC=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E7=9C=9F=E8=B7=91=E5=AE=9E=E6=B5=8B=EF=BC=9Akin/r4/gate1=20rc?= =?UTF-8?q?=3D0=E3=80=81gen=20rc=3D1=EF=BC=89=EF=BC=9B=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E8=AE=B0=E9=97=A8=201=20=E5=AE=9E=E6=B5=8B=200.838<0.9=20?= =?UTF-8?q?=E2=86=92=20=E8=87=AA=E5=8A=A8=E8=B5=B0=E5=85=B1=E8=AF=86?= =?UTF-8?q?=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ML运行手册审查.md | 13 +++++++++++++ ml/pipeline.sh | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/ML运行手册审查.md b/docs/ML运行手册审查.md index 12ccbd5..7b16b9c 100644 --- a/docs/ML运行手册审查.md +++ b/docs/ML运行手册审查.md @@ -49,3 +49,16 @@ | 后训练与评测 | `FROM=apg TO=accept bash ml/pipeline.sh all` | 约 10–20 小时 | `ml/runs/acceptance.json`、`policy_bench.json`、`r9_browser.json` | 中途出错:把出错信息发我,修完用 `FROM=<出错阶段>` 接着跑,前面的不重做。 + +--- + +## 七、第一次真跑(2026-10-18,网页「开始训练」)暴露的一处阻塞 + 门 1 实测 + +**阻塞(已修,一行)**:`pipeline.sh` 的 `run() { echo "== $*"; "$@"; }` 把命令回显写进 **stdout**,而 `gate1` 是 `run node ml/gen/consistency.cjs … | tee ml/data/consistency.json.tmp` → 回显被一起存进 `consistency.json`,文件首行变成 `== node ml/gen/consistency.cjs 300 4242`。`gen` 阶段读它判 CONSENSUS 时 `json.load` 当场 `JSONDecodeError: Expecting value: line 1 column 1 (char 0)`,`set -e` 下整条 `all` 停在 gen(阶段 rc:kin 0、r4 0、gate1 0、gen 1)。 +- 与平台无关,沙箱 Linux 同样会中,只是没跑到这一步。 +- 修法:回显改走 stderr(`echo "== $*" >&2`)。全仓只有 `gate1` 这一处把 `run` 的输出重定向进文件(`check_r2` 等用 `--out` 自写,不受影响)。 +- 已写坏的 `ml/data/consistency.json` 就地剥掉首行复用,**没有重跑 25–30 分钟的门禁**。 +- 建议实现方顺手加一条自检:任何被 `tee`/`>` 落盘成 JSON 的产物,读之前先确认首字符是 `{`。 + +**门 1 实测(第一次真数据)**:`tasks 300 / pairs 1133 / consistentRate 0.838 / consistentByGateRule 0.838 / gate FAIL / deterministic 300/300`,分类看 `C 0.824`、`B 0.844`,`devP50 3.6`、`devP90 145.1`。 +→ 0.838 < 0.90,**自动走共识分支**(`--consensus 4`),与方案 R1 首测 78% 同一侧;`worstAxisOfInconsistent [43,4,42,40,16,39]` 说明跳变在各轴上分布均匀,不是某一根轴的系统性问题。gen 因此按 4–5 h 那一档估,不是 1 h。 diff --git a/ml/pipeline.sh b/ml/pipeline.sh index 951a079..93e06b5 100755 --- a/ml/pipeline.sh +++ b/ml/pipeline.sh @@ -44,7 +44,7 @@ TAG=$(basename "$CFG" .json) SEL=ml/runs/selected_ckpt ckpt() { if [ -n "${CKPT:-}" ]; then echo "$CKPT"; elif [ -f $SEL ]; then cat $SEL; else echo ml/runs/$TAG/best.pt; fi; } stage=${1:-help} -run() { echo "== $*"; "$@"; } +run() { echo "== $*" >&2; "$@"; } # 回显走 stderr:gate1 用 tee 把 stdout 存成 consistency.json,回显混进去会让后面读它时 JSONDecodeError ALL_STAGES="setup kin r4 gate1 gen prep train m5 apg mine export bench accept" stage_info() { case $1 in gen) echo "target_tasks=$(( (N_TASKS + NPROC - 1) / NPROC * NPROC ))" ;;