Tracking Experiments

This example demonstrates experiment tracking in Pacha.

Running the Example

cargo run --example experiment_tracking

Experiment Tracking Features

  • Run tracking - Track individual training executions
  • Metric logging - Log loss, accuracy, and custom metrics over time
  • Hyperparameter storage - Record the exact parameters used
  • Run comparison - Find the best run by any metric

Creating a Training Recipe

let recipe = TrainingRecipe::builder()
    .name("fraud-training")
    .version(RecipeVersion::new(1, 0, 0))
    .description("Fraud detection training recipe")
    .hyperparameters(
        Hyperparameters::builder()
            .learning_rate(1e-3)
            .batch_size(32)
            .epochs(10)
            .build(),
    )
    .build();

registry.register_recipe(&recipe)?;

Creating an Experiment Run

let hyperparams = Hyperparameters::builder()
    .learning_rate(1e-4)
    .batch_size(64)
    .epochs(20)
    .build();

let mut run = ExperimentRun::from_recipe(recipe.reference(), hyperparams);
run.start();

Logging Metrics

// During training loop
for epoch in 0..epochs {
    let loss = train_epoch(&model, &data);
    run.log_metric("loss", loss, epoch as u64);
    run.log_metric("accuracy", accuracy, epoch as u64);
}

Completing the Run

run.complete();  // On success
run.fail("Out of memory");  // On failure
run.cancel();  // On cancellation

Finding the Best Run

let runs = registry.list_runs(&recipe.reference())?;

let best = runs
    .iter()
    .filter(|r| r.status == RunStatus::Completed)
    .max_by(|a, b| {
        let auc_a = a.get_metric("auc").unwrap_or(0.0);
        let auc_b = b.get_metric("auc").unwrap_or(0.0);
        auc_a.partial_cmp(&auc_b).unwrap()
    });