mcpField
M
monitor-experiment

monitor-experiment

github.com/wanshuiyin云与 DevOps18.2k525 次安装4 天前更新
代码仓库

关于 monitor-experiment

monitor-experiment 是用于检查运行中实验并收集日志、结果文件和指标的科研技能。它会对照基线汇总原始结果,并指出仍在运行或数值异常等情况。

主要功能

  1. 01检查远程及 Modal 任务
  2. 02收集 screen 输出和 JSON 结果
  3. 03按配置提取 W&B 指标
  4. 04对照基线比较结果
  5. 05报告运行状态和潜在问题

适用场景

  1. 01检查远程实验是否完成
  2. 02将实验指标与基线比较
  3. 03查看训练曲线和运行状态

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wanshuiyin/auto-claude-code-research-in-sleep --skill monitor-experiment

安装后在 Claude Code 中输入/monitor-experiment确认已加载。

详细介绍

监控实验结果

⏱ 这里适合采用外部节奏。 此技能会等待外部事实(任务完成/进度),因此很适合作为 /loop / CronCreate 的使用场景:唤醒时读取状态,并且只自行判断可由机器检查的完成情况(退出代码、文件是否存在、是否记录了纪元)——绝不判断质量。这是 shared-references/external-cadence.md 中介绍的附加式外部等待模式。 如果这里的定时等待结束后要执行判定步骤(例如随后审核结果),请在等待结束后只执行一次该判定,而不是每个计时周期都重新执行。

监控:$ARGUMENTS

工作流

步骤 1:检查正在运行的任务

SSH 服务:

ssh <server> "screen -ls"

Vast.ai 实例(从 vast-instances.json 读取 ssh_host、ssh_port):

ssh -p <PORT> root@<HOST> "screen -ls"

同时检查 Vast.ai 实例状态:

vastai show instances

Modal(当 CLAUDE.md 中配置了 gpu: modal 时):

modal app list         # List running/recent apps
modal app logs <app>   # Stream logs from a running app

Modal 应用会在任务完成后自动终止——如果列表中没有该应用,说明它已经完成。使用 modal volume ls <volume> 或本地输出检查结果。

步骤 2:收集各个 Screen 的输出

对于每个 Screen 会话,截取最后 N 行:

ssh <server> "screen -S <name> -X hardcopy /tmp/screen_<name>.txt && tail -50 /tmp/screen_<name>.txt"

如果 hardcopy 失败,请检查日志文件或 tee 输出。

步骤 3:检查 JSON 结果文件
ssh <server> "ls -lt <results_dir>/*.json 2>/dev/null | head -20"

如果存在 JSON 结果,请获取并解析:

ssh <server> "cat <results_dir>/<latest>.json"
步骤 3.5:提取 W&B 指标(当 CLAUDE.md 中配置了 wandb: true 时)

如果 CLAUDE.md 中未设置 wandb 或其值为 false,则完全跳过此步骤。

通过 Python API 从 Weights & Biases 提取训练曲线和指标:

# List recent runs in the project
ssh <server> "python3 -c \"
import wandb
api = wandb.Api()
runs = api.runs('<entity>/<project>', per_page=10)
for r in runs:
    print(f'{r.id}  {r.state}  {r.name}  {r.summary.get(\"eval/loss\", \"N/A\")}')
\""

# Pull specific metrics from a run (last 50 steps)
ssh <server> "python3 -c \"
import wandb, json
api = wandb.Api()
run = api.run('<entity>/<project>/<run_id>')
history = list(run.scan_history(keys=['train/loss', 'eval/loss', 'eval/ppl', 'train/lr'], page_size=50))
print(json.dumps(history[-10:], indent=2))
\""

# Pull run summary (final metrics)
ssh <server> "python3 -c \"
import wandb, json
api = wandb.Api()
run = api.run('<entity>/<project>/<run_id>')
print(json.dumps(dict(run.summary), indent=2, default=str))
\""

需要提取的内容:

  • 训练损失曲线——是否收敛、发散或进入平台期?
  • 评估指标——最新检查点的损失、PPL、准确率
  • 学习率——学习率计划是否符合预期?
  • GPU 内存——是否存在 OOM 风险?
  • 运行状态——运行中/已完成/已崩溃?

W&B 仪表板链接(在给用户的摘要中附上):

https://wandb.ai/<entity>/<project>/runs/<run_id>

与仅查看 Screen 输出相比,这能为自动审核循环提供更丰富的信号,包括训练动态、损失曲线和指标随时间的变化趋势。

步骤 4:总结结果

使用对比表格呈现结果:

| Experiment | Metric | Delta vs Baseline | Status |
|-----------|--------|-------------------|--------|
| Baseline  | X.XX   | —                 | done   |
| Method A  | X.XX   | +Y.Y              | done   |
步骤 5:解读
  • 与已知基线进行比较
  • 标记异常结果(负向增量、NaN、发散)
  • 根据发现提出后续步骤建议
步骤 6:飞书通知(如果已配置)

收集结果后,检查 ~/.claude/feishu.json:

  • 发送 experiment_done 通知:结果摘要表、与基线的差异
  • 如果配置文件不存在或模式为 "off":完全跳过(不执行任何操作)

关键规则

  • 始终先展示原始数值,再进行解读
  • 与正确的基线(相同配置)进行比较
  • 注明实验是否仍在运行(检查进度条、迭代次数)
  • 如果结果看起来异常,先检查训练日志中的错误,再下结论
  • Vast.ai 成本注意事项:监控 Vast.ai 实例时,报告运行成本(运行小时数 * vast-instances.json 中的 $/小时)。如果实例上的所有实验都已完成,提醒用户运行 /vast-gpu destroy <instance_id> 停止计费
  • Modal 成本注意事项:Modal 会自动缩容至零——空闲时不计费。报告 Modal 运行结果时,注明实际执行时间和预估成本(运行时间 * 所用 GPU 层级的 $/小时)。无需执行清理操作

评论

支持 Markdown