monitor-experiment について
monitor-experimentは、実行中の実験を確認し、ログ、結果ファイル、メトリクスを集める研究スキルです。ベースラインと比較して結果をまとめ、実行中のジョブや異常値などを報告します。
主な機能
- 01リモートとModalのジョブ確認
- 02screen出力とJSON結果の収集
- 03設定時のW&Bメトリクス取得
- 04ベースラインとの結果比較
- 05実行状況と問題の報告
活用シーン
- 01リモート実験の完了確認
- 02実験メトリクスとベースラインの比較
- 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"
ハードコピーの取得に失敗した場合は、ログファイルまたは 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>
これにより、画面出力だけの場合よりも豊富な情報(トレーニングの動態、損失曲線、時間経過に伴うメトリクスの傾向)を自動レビューのループに提供できます。
ステップ 4:結果を要約する
比較表で結果を提示します:
| Experiment | Metric | Delta vs Baseline | Status |
|-----------|--------|-------------------|--------|
| Baseline | X.XX | — | done |
| Method A | X.XX | +Y.Y | done |
ステップ 5:解釈する
- 既知のベースラインと比較する
- 想定外の結果(負の差分、NaN、発散)があれば明示する
- 調査結果に基づいて次のステップを提案する
ステップ 6:Feishu 通知(設定されている場合)
結果を収集した後、~/.claude/feishu.json を確認します:
experiment_done通知を送信します:結果の概要表、ベースラインとの差分- 設定ファイルがない場合、またはモードが
"off"の場合は、通知全体をスキップします(何もしません)
主なルール
- 解釈の前に、必ず生の数値を示す
- 適切なベースライン(同じ設定)と比較する
- 実験がまだ実行中かどうかを記載する(進捗バー、反復回数を確認)
- 結果が不自然な場合は、結論を出す前にトレーニングログでエラーを確認する
- Vast.ai のコストに関する注意:vast.ai インスタンスをモニタリングする際は、実行コスト(時間 ×
vast-instances.jsonの $/hr)を報告します。インスタンス上の実験がすべて完了している場合は、課金を停止するために/vast-gpu destroy <instance_id>を実行するようユーザーに促します - Modal のコストに関する注意:Modal はゼロまで自動スケールするため、アイドル時の課金はありません。Modal の実行結果を報告する際は、実際の実行時間と推定コスト(時間 × 使用した GPU ティアの $/hr)を記載します。クリーンアップは不要です