Skip to main content

Local-first ML experiment tracker with a real-time dashboard, convergence forecasting, and zero cloud dependencies

Project description

Caliper

Local-first ML experiment tracker. Log metrics, visualize training runs, compare experiments — all on your machine, zero cloud required.

PyPI Python License: MIT


What is Caliper?

Caliper is a lightweight experiment tracker that stores everything locally as plain JSONL files and serves a rich dashboard from a single CLI command. No accounts, no API keys, no telemetry.

  • Convergence forecasting — predicts final val loss and steps to convergence in real-time
  • Step-level annotations — pin notes directly onto chart steps
  • Multi-run comparison — overlay up to 8 runs with hyperparameter diffs
  • Project + tag filtering — organize and filter runs from the sidebar
  • GPU monitoring — log utilization, VRAM, temperature, and CPU alongside metrics
  • 100% offline — all data lives in .caliper/runs/ in your working directory

Installation

pip install caliper-py

Requires Python 3.8+. No heavy dependencies.


Quickstart

1. Initialize a run in your training script

import caliper

run = caliper.init(
    project="CIFAR-10",
    name="resnet50-baseline",
    tags=["ResNet-50", "baseline"],
    hyperparams={
        "model": "ResNet-50",
        "optimizer": "Adam",
        "learning_rate": 0.001,
        "batch_size": 64,
        "epochs": 50,
    }
)

2. Log metrics each step

for step, batch in enumerate(dataloader):
    loss = train_step(batch)
    val_loss, val_acc = evaluate()

    run.log({
        "step": step,
        "trainLoss": loss,
        "valLoss": val_loss,
        "valAcc": val_acc,
        "lr": scheduler.get_last_lr()[0],
        # optional hardware metrics
        "gpuUtil": get_gpu_util(),
        "vramUsage": get_vram_gb(),
    })

run.finish()

3. Launch the dashboard

caliper ui

Opens http://localhost:5173 automatically. All runs in .caliper/runs/ load instantly.


CLI Reference

caliper ui                  Launch the dashboard (default port 5173)
caliper ui --port 8080      Use a custom port
caliper ui --no-browser     Start server without opening a browser

Data Format

Caliper writes two files per run inside .caliper/runs/:

File Description
{run_id}_meta.json Run metadata: name, project, tags, hyperparams, status, annotations
{run_id}_logs.jsonl One JSON object per logged step

Both are plain text — you can read, edit, or version-control them however you like.

Example _meta.json

{
  "id": "run-001",
  "name": "resnet50-baseline",
  "project": "CIFAR-10",
  "status": "completed",
  "tags": ["ResNet-50", "baseline"],
  "hyperparams": { "model": "ResNet-50", "learning_rate": 0.001 },
  "annotations": [],
  "meta": { "startTime": "2026-06-01T10:00:00Z", "duration": 7260 }
}

Example _logs.jsonl (one line per step)

{"step": 0, "trainLoss": 2.31, "valLoss": 2.45, "valAcc": 0.12, "lr": 0.001}
{"step": 1, "trainLoss": 2.18, "valLoss": 2.30, "valAcc": 0.15, "lr": 0.001}

Generating Sample Data

A sample data generator is included for testing the dashboard:

python -c "
import subprocess, sys
subprocess.run([sys.executable, '-m', 'pip', 'show', '-f', 'caliper-py'])
"

Or clone the repo and run:

git clone https://github.com/verz0/Caliper
cd Caliper/caliper-py
python generate_sample_runs.py
caliper ui

Links


Made by Pirajesh M R · MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

caliper_py-0.1.1.tar.gz (275.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

caliper_py-0.1.1-py3-none-any.whl (273.5 kB view details)

Uploaded Python 3

File details

Details for the file caliper_py-0.1.1.tar.gz.

File metadata

  • Download URL: caliper_py-0.1.1.tar.gz
  • Upload date:
  • Size: 275.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for caliper_py-0.1.1.tar.gz
Algorithm Hash digest
SHA256 5713df18e6d104a999f383e35f1a3bcaff7085213dc0ffe1226668c3fa9b8524
MD5 f3f3ad887f8da214141136d57e1c0b97
BLAKE2b-256 82cec5495825796a74e0dcd0c4395dff1d9c02a7c081a18e8e4bf18ace9e3d63

See more details on using hashes here.

File details

Details for the file caliper_py-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: caliper_py-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 273.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for caliper_py-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 414b29639161ff34cac9813ae6f5fa2a37c8e9bb855c07432e98560e2d3a7905
MD5 53c6bdb9d110c2b69bf8c53c37b7cd19
BLAKE2b-256 3b94315e0da6e23416d9b2f38d6ba43d3df79a30d54284b252dc4aec9e95a714

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page