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 (Nix)

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.3.tar.gz (103.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.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

expman_rs-0.3.3-cp39-abi3-win_amd64.whl (3.3 MB view details)

Uploaded CPython 3.9+Windows x86-64

expman_rs-0.3.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

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

expman_rs-0.3.3-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.3.tar.gz.

File metadata

  • Download URL: expman_rs-0.3.3.tar.gz
  • Upload date:
  • Size: 103.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.3.tar.gz
Algorithm Hash digest
SHA256 eaa88d2ba763085f6ca173a10966c7dc2d30d8ccb11ae9b2799f86d307b1b181
MD5 7eb5319409f6658c021dadc61c4b5877
BLAKE2b-256 8c3d5fff266346703b58a0bc83f497e4d160d3a7e82f7714cff00becce513bae

See more details on using hashes here.

File details

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

File metadata

  • Download URL: expman_rs-0.3.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 4.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.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d38443dd884384a5d5a251b2543f0fbe92efea61ed7c8f28fd454211833adb9
MD5 2d9eccdb87e5fbd383439a3845d56662
BLAKE2b-256 852c9d6c9b76b3f6b82d5a5cb8e3508da00f64b38b25404af11995d830d5c7ab

See more details on using hashes here.

File details

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

File metadata

  • Download URL: expman_rs-0.3.3-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.3 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.3-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 55b1da3982d33de19ec70e00b9eec9f8aa141cd3c0dce63dee5f394373e94b20
MD5 28d20d78f543d57283d3fa3e48e08475
BLAKE2b-256 fc74eec928a01756a787a2369c1b6f09c288a139e7e483d8977c91ec4e7a6b86

See more details on using hashes here.

File details

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

File metadata

  • Download URL: expman_rs-0.3.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 4.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.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3f3a981d7b822d60a15f35cf40cf9778d679488de49cb15f84740423952b54bd
MD5 a1525b85003fa11b7d502670b182996a
BLAKE2b-256 ae65e6e18ec9fb11013219fcb20c7e21188b7a4784aeb592a043a6234e640ea7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: expman_rs-0.3.3-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.3-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 191d00dbad33ad76853d196d18604f38d97cf649899764b831741c6bb18d48bb
MD5 86d0050bfea8c972bb6a95cdfb88bd22
BLAKE2b-256 9b988985b8b567c65df9b8aaa2328fd3b4337b9debbc8ce3d6b0c2717b81d978

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