Skip to main content

Skáld

📟 a simple and efficient experiment logger for Python 🐍

PyPI - Version Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public. 🐍 Python package

Python Poetry

Ruff

Skáld - An Old Norse word for a poet, usually applied to a Norwegian or Icelandic court poet or bard of the period from the 9th century to the 13th. Skaldic verse is marked by its elaborate patterns of metre, rhyme, and alliteration, and by its use of kennings.


📃 Table of Contents


💡 Motivation

During my PhD, I tried different Experiment/Metrics loggers including:

While those are quite mature logging solutions, which often offer beautiful dashboards, I was looking for something light-weight, local and file-based as DVCLive, but with a more ergonomic and tidy 1 structure of the logs for simpler consumption and analysis.

The latest of my workflows before Skáld involved using a mixture of DVCLive and a custom logger from FACIL 2 in combination with log crawling CLI scripts and analysis and visualizations performed in jupyter notebooks 🤨

Another problem I faced with those solutions is that all of them offered a single "step" identifier for each logged metric, which is not sufficient for deep learning use-cases outside the conventional epoch-based training loops.

Because I like building python packages and I felt the need to tidy my experiment logs, I created skald as a small side project. I hope that some people find some enjoyment in using the package too ❤️

👀 Concepts

Skáld is an experiment logger, that offers a standardized logging structure and interface to log different aspects of an experiment including:

  • parameters|arguments - meta information and variables, that don't change during the experiment
  • metrics|scalars - single-valued, numeric variables that change during the experiment
  • artifacts - additional result files like images or plots

Each metric has a unique name and a user-defined set of id variables, that identify the value of the metric at a certain step.

While a stateful version of Skáld is planned, that updates an id/step variables through some manual call (often in a Callback). The first version is very explicit and requires every id to be logged in each call.

📂 Logging Structure

Logs of metrics will be represented by tidy dataframes that are stored as readable metrics.csv or more space efficient metrics.parquet files.

To save space, parameters will not be included in these dataframes, but in a separate file (params.yaml) by default.

Artifacts will be stored in a separate sub-directory (artifacts/ by default).

Skáld has its own loguru logger instance and exposes the logging functions. The logs will stored in a console.log file. If you use the logger as a context manager, stdout (~ print statements) will also be saved in console.log.

📦 Installation

The package can be installed with:

pip install skald

🧑‍💻 to install a development environment (which you need if you want to work on the package, instead of just using the package), cd into the project's root directory and call:

poetry install --sync --compile

🚀 Usage

The API of Skáld is very similar to DVCLive and other loggers. It also exposes loguru's logging api, so you can also use a Skáld logger as your terminal logger.

A basic example:

from skald import Logger

# get experiment parameters from CLI arguments, parameter files ...
params: dict = {...}

# instanciate a logger with a certain run name
with Logger("test-run-1") as logger:
    logger.log_params(params)
    # experiment logic
    metric: float = evaluate(model)
    logger.log_metric("accuracy", metric)
    logger.success("finished experiment!")

To launch the experiment viewer TUI after the run is completed, use tui=True in the constructor of the Logger.

You can also launch the experiment viewer manually to inspect your logs:

$skald view <experiment_run_dir>

🖼️ ©️ Banner Artwork Attribution

Creative Commons License
The art in the banner of this README is licensed under a Creative Commons Attribution-NonCommercial-No Derivatives Works 3.0 License. It was made by th3dutchzombi3. Check out his beautiful artwork ❤️


📄 References

  1. H. Wickham, “Tidy Data,” Journal of Statistical Software, vol. 59, pp. 1–23, Sep. 2014, doi: 10.18637/jss.v059.i10. ↩

  2. M. Masana, X. Liu, B. Twardowski, M. Menta, A. D. Bagdanov, and J. van de Weijer, “Class-incremental learning: survey and performance evaluation on image classification.” arXiv, Oct. 11, 2022. doi: 10.48550/arXiv.2010.15277. ↩

Metadata

Release files for skald 0.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skald 0.8.0
File Size Uploaded
skald-0.8.0.tar.gz 16.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for skald 0.8.0
File Interpreter ABI Platform
skald-0.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 32.5 kB

Release files / skald-0.8.0.tar.gz

Download URL skald-0.8.0.tar.gz
Size 16.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2c79a01b6b5e6547c3bb6db1665307cd1e9d9b277600524f8193a700f1259d3b
BLAKE2b-256 checksum
How to use checksums
3016bbb518846161b8d3de40a41c4a5b43657c219b019c8a44eb1b766ddec9bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.0.0 CPython/3.11.2 Windows/10

Release files / skald-0.8.0-py3-none-any.whl

Download URL skald-0.8.0-py3-none-any.whl
Size 15.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
999071d8d315d6b4cbd37c4862559396cfbdeccaa602fc90e7770f7181d3c8aa
BLAKE2b-256 checksum
How to use checksums
918a7f35bc8c23f74ce0021add06e282477304cc13316bc8600a063c0f08119b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.0.0 CPython/3.11.2 Windows/10

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 release files

0.7.0

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page