Skip to main content

High-performance experiment manager with Rust backend

Project description

Experiment Manager built using Rust

Crates.io PyPI GitHub Repo License: MIT Documentation

High-performance experiment manager written in Rust, with a Python wrapper for non-blocking logging, a live web dashboard, and a friendly CLI.

Features

  • Non-blocking Python logging: log_vector() is a ~100ns channel send — never blocks your training loop
  • Live dashboard: SSE-powered real-time metric streaming, run comparison charts, artifact browser
  • Scalar metric filtering: Toggle which metric columns appear in the runs table with one click
  • Single binary: CLI + web server in one exp binary — no Python runtime needed for the server
  • Efficient storage: Batched Arrow/Parquet writes, not per-step read-concat-write
  • Nix dev environment: Reproducible with nix develop

Screenshots

Installation

From Cargo

cargo install expman-cli

From PYPI

pip install expman-rs

Alternatively: Download or Install from GitHub

  • Direct Download: Download the pre-built exp binary or Python wheels from GitHub Releases.

  • Python (pip):

    pip install git+https://github.com/lokeshmohanty/expman-rs.git
    
  • Rust (cargo):

    cargo install --git https://github.com/lokeshmohanty/expman-rs.git expman-cli
    

Quick Start

Python

Option A: Global Singleton (Easiest)

import expman as exp

exp.init("resnet_cifar10")
exp.log_params({"lr": 0.001})
exp.log_vector({"loss": 0.5}, step=0)
# Auto-closes on script exit

Option B: Context Manager (Recommended for scope control)

from expman import Experiment

with Experiment("resnet_cifar10") as exp:
    exp.log_vector({"loss": 0.5}, step=0)

For Rust

Basic usage:

use expman::{ExperimentConfig, LoggingEngine, RunStatus};

fn main() -> anyhow::Result<()> {
   let config = ExperimentConfig::new("my_rust_exp", "./experiments");
   let engine = LoggingEngine::new(config)?;

   engine.log_vector([("loss".to_string(), 0.5.into())].into(), Some(0));

   engine.close(RunStatus::Finished);
   Ok(())
}

Dashboard

exp serve ./experiments
# Open http://localhost:8000

CLI

exp list ./experiments              # list all experiments
exp list ./experiments -e resnet    # list runs for an experiment
exp inspect ./experiments/resnet/runs/20240101_120000
exp clean resnet --keep 5 --force   # delete old runs
exp export ./experiments/resnet/runs/20240101_120000 --format csv

Development

Please see CONTRIBUTING.md for detailed instructions on setting up your local environment, building the Python bindings, and important git configuration notes.

nix develop                    # enter dev shell
just test                      # run all tests
just dev-py                    # build Python extension (uv pip install -e .)
just serve ./experiments       # start dashboard
just watch                     # watch mode for tests
just build-docs                # build and open documentation

Documentation

For detailed usage, refer to the standalone documentation files for each component:

  • expman-cli - Command-line interface definitions and references.
  • expman - Core high-performance async Rust logging engine.
  • expman-py - Python extension for non-blocking logging.
  • expman-server - Axum web server and SSE live streaming API.

Dashboard Features

  • Live Metrics: Real-time SSE streaming of experiment metrics and logs.
  • Live Jupyter Notebooks: Instantly spawn a live Jupyter instance natively bound to any run's execution environment directly from the UI, with auto-generated analytics boilerplate (Polars).
  • Scalar Filter: Toggle individual metric columns in the Runs table via chip buttons — no page reload.
  • Deep Inspection: View detailed run configurations, metadata, and artifacts.
  • Artifact Browser: Preview parquet, csv, and other files directly in the browser.
  • Comparison View: Overlay multiple runs on a shared timeline for analysis.
  • Server-side filtering: Pass ?metrics=loss,acc to /api/experiments/:exp/runs to limit which scalars are returned.

Examples

Practical code samples are provided in the examples/ directory. The Python example demonstrates logging metrics, alongside generating and storing rich media artifacts (audio, video, plots) directly natively.

To run the Python examples, ensure you have built the extension first with just dev-py and installed the dev dependencies (uv pip install -e ".[dev]").

To run the Rust example, use:

cargo run --example logging -p expman

Experiments Layout

experiments/
  my_experiment/
    experiment.yaml          # display name, description
    20240101_120000/         # run directory
      metrics.parquet      # all logged metrics (Arrow/Parquet)
      config.yaml          # logged params/hyperparameters
      run.yaml             # run metadata (status, duration, timestamps)
      run.log              # text log
      artifacts/           # user-saved files

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

expman_rs-0.3.6.tar.gz (54.4 kB view details)

Uploaded Source

Built Distributions

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

expman_rs-0.3.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.0 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

expman_rs-0.3.6-cp39-abi3-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.9+Windows x86-64

expman_rs-0.3.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.0 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

expman_rs-0.3.6-cp39-abi3-macosx_11_0_arm64.whl (3.5 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file expman_rs-0.3.6.tar.gz.

File metadata

  • Download URL: expman_rs-0.3.6.tar.gz
  • Upload date:
  • Size: 54.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for expman_rs-0.3.6.tar.gz
Algorithm Hash digest
SHA256 0e6fd93205135f012b7c48c6291bbe5f493e3638dc243116b9a34a05a83bfabb
MD5 d20f08b90a04ba8ed72fad7b6c9f627d
BLAKE2b-256 9a50a2c298a5c14b6af371dc354d5a504f89b100d369eb2431795a9c74804adf

See more details on using hashes here.

File details

Details for the file expman_rs-0.3.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: expman_rs-0.3.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 9.0 MB
  • Tags: PyPy, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for expman_rs-0.3.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1c522b798cbd3389bcc54faca4f99c241e0f8227622b715ecbcc7e4b926e3a47
MD5 aa759accfa8aac8d5c014e76d9353c02
BLAKE2b-256 0f1ff1682a309825d6d4612a04c38c16208c446d963d51c71f1cb3537f3d11ca

See more details on using hashes here.

File details

Details for the file expman_rs-0.3.6-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: expman_rs-0.3.6-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for expman_rs-0.3.6-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 dd2eeccc9386df69e7b82d6202155ef608be0aa8c5e348e11abdb0a4d89a5858
MD5 53846fc5e9fa4e743f9e0fcfb8c7c5ad
BLAKE2b-256 448b15f1b37566ee2cb4c9e63b1fd3c801748e6199be344fbdaaabc9f03b9266

See more details on using hashes here.

File details

Details for the file expman_rs-0.3.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: expman_rs-0.3.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 9.0 MB
  • Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for expman_rs-0.3.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 23e1703d801d6d0268ab61fb966106b4a254717e2267f117366f4e14fec6a0b0
MD5 ff2ef2e827556f4a5879813512e3e6fd
BLAKE2b-256 89b1508ff0ceaf9c12ed26ac99dbe2db0ff871070267c3094f02d376a0c08eb4

See more details on using hashes here.

File details

Details for the file expman_rs-0.3.6-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: expman_rs-0.3.6-cp39-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 3.5 MB
  • Tags: CPython 3.9+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for expman_rs-0.3.6-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3caf9642c59076061fa96f505260e559a52655916f3bb6777d6af14683669798
MD5 cd1e980f500e7f560243eadeb655dd84
BLAKE2b-256 046734f5763914001bee1024a95b975cb4796b08f0c9418db609cb6365fb648c

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