From e6418da0849fb4ac852696479365c24a4aad3693 Mon Sep 17 00:00:00 2001 From: cbb <2625274797@qq.com> Date: Sun, 18 Oct 2026 13:54:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(monitor):=20=E8=A1=A5=E9=87=8F=E6=97=B6?= =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E6=9D=A1=E6=98=BE=E7=A4=BA=E5=85=A8=E9=87=8F?= =?UTF-8?q?=E8=80=8C=E4=B8=8D=E6=98=AF=E4=BB=8E=200=20=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=EF=BC=9B=E5=81=9C=E6=AD=A2=E6=97=B6=E8=A1=A5=E6=9D=80=20Git=20?= =?UTF-8?q?Bash=20=E9=80=83=E6=8E=89=E7=9A=84=20node=20=E5=AD=99=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gen 进度:分子改为统计全部分片(含之前轮次),分母仍是累计 target_tasks,补量时显示 50,008/79,688 并标注「本轮补 N 条」。此前只统计本轮开始后改过的文件,看起来像从零重跑。 - 停止:taskkill /T 在 Git Bash 下只杀到 bash,node 孙进程会逃(实测点了停止还有 28 个 gen_dataset 在跑)。按命令行补扫 gen_dataset.cjs / run_parallel.sh / teacher.cjs / policy_bench.cjs 并 Stop-Process;正则已验证命中 gen、不误伤普通 node。 --- ml/monitor.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/ml/monitor.py b/ml/monitor.py index f03ee89..e8890b7 100644 --- a/ml/monitor.py +++ b/ml/monitor.py @@ -135,9 +135,14 @@ def stage_progress(st, s): """当前阶段的进度:返回 {'frac': 0..1 或 None(无法计量), 'label': 文字}。""" t0, info = s['start'], s.get('info') or {} if st == 'gen': - n = sum(LC.count(f) for f in newer(f'{DATA}/shard_*.jsonl', t0) + newer(f'{DATA}/shard_*.jsonl.part', t0)) + # 分子算全部(含之前轮次已完成的分片),分母是累计目标:补量时显示 50,008/79,688 而不是 0/79,688。 + # 2026-10-18 实测:只统计本轮开始后改过的文件会让"补量"看起来像从零开始。 + allf = glob.glob(os.path.join(ROOT, DATA, 'shard_*.jsonl')) + glob.glob(os.path.join(ROOT, DATA, 'shard_*.jsonl.part')) + n = sum(LC.count(f) for f in allf) tgt = info.get('target_tasks') or 0 - return {'frac': min(1, n / tgt) if tgt else None, 'label': f'已生成 {n:,} / {tgt:,} 条任务'} + new = sum(LC.count(f) for f in newer(f'{DATA}/shard_*.jsonl', t0) + newer(f'{DATA}/shard_*.jsonl.part', t0)) + lab = f'已生成 {n:,} / {tgt:,} 条任务' + (f'(本轮补 {new:,} 条)' if 0 < new < n else '') + return {'frac': min(1, n / tgt) if tgt else None, 'label': lab} if st == 'prep': nsh = len(glob.glob(os.path.join(ROOT, DATA, 'shard_*.jsonl'))) done = len(newer(f'{DATA}/samples/*.X.npy', t0)) @@ -347,6 +352,14 @@ class Job: with self.lock: if os.name == 'nt': subprocess.run(['taskkill', '/T', '/F', '/PID', str(pid)], capture_output=True) + # Git Bash 下 taskkill /T 只杀到 bash,node 孙进程会逃掉(2026-10-18 实测:点了停止还有 28 个 + # gen_dataset 在跑)。按命令行补扫:只动本仓库 ml/ 下的脚本,绝不碰用户自己的 node 进程。 + try: + q = ("Get-CimInstance Win32_Process -Filter \"Name='node.exe'\" | " + "Where-Object { $_.CommandLine -match 'gen_dataset\\.cjs|run_parallel\\.sh|teacher\\.cjs|policy_bench\\.cjs' } | " + "ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue }") + subprocess.run(['pwsh', '-NoProfile', '-Command', q], capture_output=True, timeout=60) + except Exception: pass else: if ours: kill_session(pid)