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_metrics() 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_metrics({"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_metrics({"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_metrics([("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:

To run the Python examples, ensure you have built the extension first with just dev-py.

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.2.9.tar.gz (70.2 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.2.9-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.2.9-cp39-abi3-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.9+Windows x86-64

expman_rs-0.2.9-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.2.9-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.2.9.tar.gz.

File metadata

  • Download URL: expman_rs-0.2.9.tar.gz
  • Upload date:
  • Size: 70.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","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.2.9.tar.gz
Algorithm Hash digest
SHA256 a5053d495745decbfabea56eea903aaa0b18762a293d15c261d64bdef90c68ec
MD5 6aebd8598ccf704c59fc09cef83e024e
BLAKE2b-256 0854c76769c6c121d13bc94070a4bfff443ad150e4770b005a133227ac120a95

See more details on using hashes here.

File details

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

File metadata

  • Download URL: expman_rs-0.2.9-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.7 {"installer":{"name":"uv","version":"0.10.7","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.2.9-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 636284fd4ce3d3fc99a60a2e17cbbc320c43d26a85da95e7cc85442d8b4a2cf6
MD5 260cc2a319ba0be855461fe840928129
BLAKE2b-256 00a73b4a0b871a6db28178a5a04b1d0733da621dca42839a82edb3de8ca7a2c9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: expman_rs-0.2.9-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.7 {"installer":{"name":"uv","version":"0.10.7","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.2.9-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e4a6d3faf94f3d47b3dad234fe72bdf039f174cd32bedae0270e3f8d947058be
MD5 145d0d5afedb00e938c5e40b804500b6
BLAKE2b-256 0df7ddd5557d067a5677b0bbe4e36250f3c784092fedf27b7a3499dea0f4278b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: expman_rs-0.2.9-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.7 {"installer":{"name":"uv","version":"0.10.7","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.2.9-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8f91d338452d1f3cc45a1b4db4db516938c50ac0423606bb5d83b8b6f982cbb
MD5 591d655f4f2d9b60e15c334246c2474b
BLAKE2b-256 6165fabd75727ff275a2f70295f92e4336a90cc8d5aef6191a5ed0ecbd01f540

See more details on using hashes here.

File details

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

File metadata

  • Download URL: expman_rs-0.2.9-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.7 {"installer":{"name":"uv","version":"0.10.7","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.2.9-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6996e8de5e4d8bb1bab2cdb526e3d68362b8bb2f04b6cd828a5541d821da4d00
MD5 31388e0e481c67e1a3601cc4cb2d1ce2
BLAKE2b-256 02405437e92485b98a20f6fc704b716e0d808a8dc46b43d93cba34210ef192b0

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