mcpField
M
monitor-experiment

monitor-experiment

github.com/wanshuiyinクラウド・DevOps18.2k525 回インストール4 日前に更新
リポジトリ

monitor-experiment について

monitor-experimentは、実行中の実験を確認し、ログ、結果ファイル、メトリクスを集める研究スキルです。ベースラインと比較して結果をまとめ、実行中のジョブや異常値などを報告します。

主な機能

  1. 01リモートとModalのジョブ確認
  2. 02screen出力と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"

ハードコピーの取得に失敗した場合は、ログファイルまたは 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)を記載します。クリーンアップは不要です

コメント