| name | ml-experiment-tracker |
| description | Guides ML experiment logging, versioning, and reproducibility using tools like MLflow, Weights & Biases, and DVC for systematic model development. |
| license | MIT |
ML Experiment Tracker
This skill provides guidance for systematic machine learning experimentation with proper tracking, versioning, and reproducibility practices.
Core Competencies
- Experiment Tracking: MLflow, Weights & Biases (wandb), Neptune, Comet
- Data Versioning: DVC, Delta Lake, LakeFS
- Model Registry: Version control for trained models
- Reproducibility: Environment, code, data, and hyperparameter tracking
Experiment Tracking Fundamentals
What to Track
Every experiment should log:
| Category | Items | Why |
|---|
| Code | Git commit hash, branch, diff | Reproduce exact code state |
| Data | Dataset version, hash, lineage | Know which data was used |
| Environment | Python version, dependencies, hardware | Reproduce runtime |
| Hyperparameters | All config values | Understand what changed |
| Metrics | Loss, accuracy, custom metrics | Compare performance |
| Artifacts | Models, plots, predictions | Preserve outputs |
Experiment Organization
project/
โโโ experiments/
โ โโโ baseline/ # Initial experiments
โ โโโ feature-engineering/ # Data improvements
โ โโโ architecture/ # Model changes
โ โโโ hyperparameter/ # Tuning runs
โโโ data/
โ โโโ raw/ # Original data (versioned)
โ โโโ processed/ # Cleaned data
โ โโโ features/ # Feature store
โโโ models/
โโโ staging/ # Candidates
โโโ production/ # Deployed models
MLflow Patterns
Basic Experiment Logging
import mlflow
mlflow.set_experiment("my-classification-project")
with mlflow.start_run(run_name="baseline-v1"):
mlflow.log_param("learning_rate", 0.01)
mlflow.log_param("batch_size", 32)
mlflow.log_param("epochs", 100)
for epoch in range(epochs):
train_loss = train_epoch(model, train_loader)
val_loss, val_acc = evaluate(model, val_loader)
mlflow.log_metrics({
"train_loss": train_loss,
"val_loss": val_loss,
"val_accuracy": val_acc
}, step=epoch)
mlflow.pytorch.log_model(model, "model")
mlflow.log_artifact("confusion_matrix.png")
mlflow.log_artifact("config.yaml")
Model Registry Workflow
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ Training โโโโโถโ Staging โโโโโถโ Production โ
โ Runs โ โ Review โ โ Deployed โ
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ โ โ
โผ โผ โผ
Candidate Validated Monitored
Models Models Models
Stages:
- None: Just logged, not registered
- Staging: Candidate for production
- Production: Active serving
- Archived: Historical reference
Weights & Biases Patterns
Project Structure
import wandb
config = {
"learning_rate": 0.01,
"architecture": "ResNet50",
"dataset": "imagenet-subset",
"epochs": 100
}
run = wandb.init(
project="image-classification",
group="architecture-experiments",
tags=["baseline", "resnet"],
config=config,
notes="Testing ResNet50 baseline on subset"
)
for epoch in range(config["epochs"]):
metrics = train_and_eval(model, train_loader, val_loader)
wandb.log(metrics)
wandb.log({"predictions": wandb.Image(pred_grid)})
wandb.log({"confusion_matrix": wandb.plot.confusion_matrix(...)})
wandb.finish()
Hyperparameter Sweeps
program: train.py
method: bayes
metric:
name: val_accuracy
goal: maximize
parameters:
learning_rate:
distribution: log_uniform_values
min: 0.0001
max: 0.1
batch_size:
values: [16, 32, 64, 128]
optimizer:
values: ["adam", "sgd", "adamw"]
early_terminate:
type: hyperband
min_iter: 10
DVC for Data Versioning
Setup and Usage
dvc init
dvc add data/training.csv
git add data/training.csv.dvc data/.gitignore
git commit -m "Add training data v1"
dvc remote add -d storage s3://bucket/dvc
dvc push
dvc run -n preprocess \
-d src/preprocess.py -d data/raw \
-o data/processed \
python src/preprocess.py
dvc repro
DVC Pipeline Definition
stages:
preprocess:
cmd: python src/preprocess.py
deps:
- src/preprocess.py
- data/raw/
outs:
- data/processed/
train:
cmd: python src/train.py
deps:
- src/train.py
- data/processed/
params:
- train.epochs
- train.learning_rate
outs:
- models/model.pkl
metrics:
- metrics.json:
cache: false
Reproducibility Checklist
Code Reproducibility
Environment Reproducibility
Data Reproducibility
Training Reproducibility
Best Practices
Naming Conventions
experiment: {project}-{objective}
run: {date}-{description}-{variant}
model: {architecture}-{dataset}-{version}
Examples:
experiment: fraud-detection-baseline
run: 2024-01-15-xgboost-tuning-lr001
model: xgboost-transactions-v2.3.1
Comparison Dashboards
Track these metrics for model comparison:
- Primary metric (what you optimize)
- Secondary metrics (constraints)
- Resource usage (training time, memory)
- Inference performance (latency, throughput)
Experiment Documentation
Each significant experiment should document:
- Hypothesis: What change and expected outcome
- Method: What was actually done
- Results: Metrics and observations
- Conclusions: What was learned, next steps
References
references/mlflow-setup.md - MLflow installation and configuration
references/wandb-patterns.md - Advanced W&B features and sweeps
references/reproducibility-checklist.md - Detailed reproducibility guide