Skip to main content

Local experiment tracking with model versioning - self-hosted W&B alternative with Artifacts

Project description

Runicorn

English | 简体中文

PyPI version Python 3.10+ License: MIT

Runicorn logo

Local-first experiment tracking for teams and individuals who keep ML runs on their own machines or GPU servers.

Runicorn combines a Python SDK, Web UI, Remote Viewer, and optional Windows desktop build into one workflow. It is designed for people who want experiment tracking without pushing runs into a SaaS platform, mirroring remote run folders back to a laptop, or rewriting an existing training stack from scratch.

If your experiments run on remote Linux boxes, Runicorn can start a lightweight Viewer on the remote machine and tunnel it over SSH, so you inspect runs directly where they live.

Documentation Site

Runicorn experiments view


Why Runicorn

  • Data stays under your control: runs, logs, assets, and settings remain on storage you control
  • Remote Viewer without file sync: inspect remote GPU-server experiments over SSH instead of copying run folders back first
  • Low-friction adoption: start with rn.init(...) and run.log(...), while keeping compatibility with print(), Python logging, torchvision MetricLogger, ImageNet meters, TensorBoard, and tensorboardX
  • Real experiment context: store config metadata, dataset references, pretrained references, code snapshots, and archived outputs alongside scalar metrics
  • Rich local UI: path tree, compare mode, assets repository, recycle bin, import/export, GPU telemetry, and remote session management

Who It's For

Good fit

  • You train locally or on your own servers and want experiment tracking without SaaS lock-in
  • You often switch between a local workstation and remote GPU machines
  • You want metrics, logs, code context, and experiment assets tied to the same run
  • You already have training code and want an incremental adoption path instead of a large rewrite

Not a good fit

  • You need a hosted collaboration platform, cloud dashboards, or team permissions out of the box
  • You only want a minimal CSV logger and do not care about browsing runs later
  • Your workflow depends on a managed online ecosystem rather than local or self-controlled infrastructure

Quick Start

Install Runicorn:

pip install -U runicorn

Log your first run:

import runicorn as rn

run = rn.init(
    path="cv/resnet50/baseline",
    alias="trial-01",
    capture_console=True,
)

for epoch in range(1, 11):
    train_loss = 1.0 / epoch
    val_acc = 0.70 + epoch * 0.02
    run.log({"train_loss": train_loss, "val_acc": val_acc})

run.summary({"notes": "first stable run"})
run.finish()

Open the viewer:

runicorn viewer

Then visit http://127.0.0.1:23300.


What Makes It Different

Workflow Common friction Runicorn
Manual local folders + scripts Metrics, logs, configs, and outputs drift apart Keeps run history, summary, logs, and assets tied to one run
Remote SSH + tail + ad-hoc plotting Slow to inspect, hard to compare, easy to lose context Remote Viewer gives a structured UI over SSH without a sync-first loop
Hosted experiment tracker Requires internet/service trust and external storage Keeps experiment data local and under your storage boundary

Remote Viewer

Runicorn is strongest when training happens on remote GPU servers.

With Remote Viewer, you can connect over SSH, choose the remote Python environment, start a remote Viewer session, and inspect remote runs through your local browser or desktop app.

No local mirror. No manual sync step. No waiting for large run folders to copy.

runicorn viewer
# Open the Remote page -> connect over SSH -> choose environment -> start session
Old sync-heavy workflow Remote Viewer
Wait time Minutes to hours Seconds
Local storage copy Required Not required
Experiment inspection Delayed Direct over SSH

Logging Compatibility

Runicorn is built to fit into training code that already exists.

If your loop already uses torchvision-style metric logging, you can often start by replacing one import:

from runicorn.log_compat.torchvision import MetricLogger as MetricLogger

Runicorn also provides compatibility helpers for:

  • runicorn.log_compat.imagenet
  • runicorn.log_compat.tensorboard
  • runicorn.log_compat.tensorboardX

You can also capture print() output and Python logging, but the main value here is structured metric compatibility that turns existing training signals into real experiment curves.


Assets and Run Context

Runicorn does not stop at scalar metrics. You can also record the surrounding context that makes runs understandable later:

  • config metadata
  • dataset references
  • pretrained model references
  • code snapshots
  • archived output files
  • cross-run asset browsing and preview

Use run.log_config(...), run.log_dataset(...), and run.log_pretrained(...) inside a run to attach reusable training context directly to the experiment record.


Documentation


License

MIT. See 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

runicorn-0.7.2.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

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

runicorn-0.7.2-py3-none-any.whl (1.7 MB view details)

Uploaded Python 3

File details

Details for the file runicorn-0.7.2.tar.gz.

File metadata

  • Download URL: runicorn-0.7.2.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for runicorn-0.7.2.tar.gz
Algorithm Hash digest
SHA256 05dda38c536f730d83a54b89f64427c4780a0529696dd4bae25aea4556202635
MD5 1a90502e8755752db257e96fa872e70c
BLAKE2b-256 e244928b4655aa0f87b7406acd48bbb3060bf437ed612a165fe5e0761bb0872a

See more details on using hashes here.

File details

Details for the file runicorn-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: runicorn-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for runicorn-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3d962d1359ce2de2659bfaa507ec4675d6592ff7a18e0f7a77da58a3537155b9
MD5 1386492f7e2732cd97fbfd979000263f
BLAKE2b-256 9aaa072d276804dc3478ff5c3ad630842c8f8060a676f4f6be4d58d39f4f68bc

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