From phd-skills
Compares ML training runs across wandb, neptune, tensorboard, or mlflow with same-epoch alignment to avoid misleading comparisons. Use when comparing runs, checking improvement, or ranking experiments.
How this skill is triggered — by the user, by Claude, or both
Slash command
/phd-skills:compareThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The most common comparison error is reporting "run A is 4 percentage points behind baseline" when run A is at epoch 11 of 100 and the baseline number is from epoch 100. The student is _still training_; the comparison is meaningless. This skill enforces same-epoch alignment.
The most common comparison error is reporting "run A is 4 percentage points behind baseline" when run A is at epoch 11 of 100 and the baseline number is from epoch 100. The student is still training; the comparison is meaningless. This skill enforces same-epoch alignment.
The agentic Stop hook routes here from reason when an assistant reports a delta without aligning the runs.
The user just said any of:
Check in this order:
WANDB_API_KEY env var set, or wandb imports in the project → wandbNEPTUNE_API_TOKEN env var set → neptuneMLFLOW_TRACKING_URI env var set, or mlruns/ dir present → mlflowruns/ or lightning_logs/ dir present → tensorboard*results*.json / *meta*.json files in run dirs → local file formatIf none, ask the user where metrics live before guessing.
Get full names (no shortcodes). If the user says "fvs-fm vs the baseline", clarify:
fvs-fm run (project + entity + run-id)You need the full curve, not the last reported value. Final-value-only comparisons hide convergence dynamics.
For wandb:
import wandb
api = wandb.Api()
run = api.run("entity/project/run-id")
history = run.history(samples=10000) # full history, not just summary
For tensorboard, parse the event files (tensorboard.backend.event_processing.event_accumulator.EventAccumulator).
For neptune / mlflow, use their respective APIs.
The student is the run still in progress (or the one being evaluated). Get its current epoch / step from the latest history row.
This is the critical step. The baseline went all the way to (say) epoch 100. The student is at epoch 11. Pull the baseline's metrics at epoch 11, not at epoch 100.
student_step = student_history['epoch'].max()
baseline_at_same_step = baseline_history[baseline_history['epoch'] == student_step]
If the baseline doesn't have an exactly-matching step, interpolate or pick the nearest. State which.
Most ML pipelines have a proxy metric (cheap, computed during training, kNN accuracy on features, loss, perplexity) and a target downstream metric (expensive, computed periodically or only at the end, finetuned linear probe accuracy, downstream task F1).
The proxy is for tracking convergence; the target is what the project is actually optimizing. Reporting only the proxy can mislead, a run that lags on kNN may close the gap on downstream finetune. Report both, separately:
| student (ep 11) | baseline (ep 11) | delta |
| proxy (kNN top-1) | 36.4% | 38.9% | -2.5 |
| downstream (linear) | not yet | 42.1% | n/a |
If the user only has proxy data, say so explicitly. Never declare a winner from proxy alone.
In every line of the report, use full run names. Never cs-ad vs fvs-fm; always phase1-7src-conv-s-adaptor-mlp vs phase1-7src-fastvit-s-featmap-mlp. Future-you reading this will not remember the shortcode.
Compact comparison table per metric pair (proxy + downstream). Each row aligned at the student's current step. Each cell traceable to a specific tracker run-id and step. End with one or two sentences interpreting the comparison, student is on track to catch up at step N, projected from current slope is a useful framing; student is winning / losing is rarely warranted before convergence.
npx claudepluginhub fcakyon/phd-skills --plugin phd-skillsLogs ML training metrics via Python API, fires structured alerts for diagnostics, and retrieves/analyzes logged metrics via CLI. Syncs to Hugging Face Spaces for real-time dashboards.
Tracks and visualizes ML training experiments with Trackio. Logs metrics via Python API, fires alerts, and retrieves data via CLI. Syncs to Hugging Face Spaces for real-time dashboards.
Logs ML training metrics with Trackio's Python API, fires structured alerts, and retrieves results via CLI or terminal output for real-time experiment monitoring.