Machine learning bread and butter - a collection of basic deep learning tools
Project description
mlbnb
Machine learning bread and butter — a collection of tools for PyTorch-based machine learning experiments.
This library provides utilities to streamline common tasks such as experiment management, checkpointing, and data handling. It is organised as a uv workspace containing:
mlbnb— the core library (insrc/mlbnb)scaffolding— a ready-to-use ML experiment app that demonstratesmlbnbin action (inapps/scaffolding)
Installation
This project uses uv for dependency management.
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install all packages (including workspace apps)
uv sync --all-packages
Project Structure
mlbnb/
├── src/mlbnb/ # Core library
├── apps/
│ └── scaffolding/ # Example ML experiment app
│ ├── src/
│ │ ├── scaffolding/ # Training, evaluation, models
│ │ ├── config/ # Hydra configuration
│ │ └── scripts/ # Utility scripts
│ └── tests/
├── tests/ # Library tests
└── pyproject.toml # Workspace root
Core Components
ExperimentPath
The ExperimentPath class helps manage the directory structure for your experiments. It can generate unique run names and save your experiment configuration.
Example:
from pathlib import Path
from omegaconf import OmegaConf
from mlbnb.paths import ExperimentPath
# Define your experiment configuration
cfg = OmegaConf.create({
"learning_rate": 1e-3,
"model": {
"name": "resnet18",
"pretrained": True
},
"dataset": "cifar10"
})
# Create a new experiment path
# This will create a directory like: /tmp/experiments/2025-06-26_11-02_witty_zebra
exp_path = ExperimentPath.from_config(cfg, root=Path("/tmp/experiments"))
print(f"Experiment directory: {exp_path}")
# The configuration is saved automatically
saved_cfg = exp_path.get_config()
assert saved_cfg == cfg
# You can also create paths for files within the experiment directory
model_dir = exp_path / "models"
model_dir.mkdir()
print(f"Model directory: {model_dir}")
CheckpointManager
The CheckpointManager simplifies saving and loading the state of your training loop, including the model, optimizer, and random number generators. It integrates with ExperimentPath to store checkpoints within your experiment's directory.
Example:
import torch
from torch import nn, optim
from mlbnb.checkpoint import CheckpointManager
from mlbnb.paths import ExperimentPath
# Assume exp_path is an existing ExperimentPath instance
exp_path = ExperimentPath(root="/tmp/experiments", name="my-first-experiment")
# Initialize components
model = nn.Linear(10, 2)
optimizer = optim.Adam(model.parameters())
generator = torch.Generator()
# Create a CheckpointManager
checkpoint_manager = CheckpointManager(exp_path)
# Save a checkpoint
checkpoint_manager.save_checkpoint(
name="epoch_1",
model=model,
optimiser=optimizer,
generator=generator
)
print(f"Saved checkpoints: {checkpoint_manager.list_checkpoints()}")
# Later, you can restore the state
new_model = nn.Linear(10, 2)
new_optimizer = optim.Adam(new_model.parameters())
new_generator = torch.Generator()
checkpoint_manager.reproduce(
name="epoch_1",
model=new_model,
optimiser=new_optimizer,
generator=new_generator
)
print("Restored state from checkpoint.")
Other Utilities
mlbnb also includes several other helpful modules:
WandbLogger&WandbProfiler: For logging metrics and profiling code with Weights & Biases.StepIterator: An iterator that runs for a fixed number of steps, to turn training from "num epochs" to "num steps" cleanly.LabelledArray: A NumPy array wrapper that allows indexing by named coordinates, similar to xarray, supporting memmaps.checksum: A utility to compute a checksum for objects containing tensors to verify reproducibility.EarlyStopper: Stop training when a metric stops improving.CachedDataset: A PyTorchDatasetwrapper that caches items in memory.
Scaffolding App
The apps/scaffolding workspace member is a batteries-included ML experiment template that puts mlbnb to work. It uses Hydra for configuration and comes with:
- Training loop with mixed-precision, checkpointing, and automatic resume
- Hydra configs for composable experiment setups (model, data, execution mode)
- W&B integration for logging metrics and gradients
- Evaluation & plotting utilities
- Multi-GPU support via PyTorch DDP
To run the scaffolding app:
uv run python -m scaffolding.train data=<dataset> mode=<mode>
See apps/scaffolding/src/config/ for available configuration options.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mlbnb-0.1.12.tar.gz.
File metadata
- Download URL: mlbnb-0.1.12.tar.gz
- Upload date:
- Size: 167.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65a57fd8de4371287cc72a699d33dc3210655b98ee956636a4aeb45398f2e3f9
|
|
| MD5 |
33ab835960da645df0eab1b252916caf
|
|
| BLAKE2b-256 |
e6120c3c2ba27927239d2510ca1a73677ce5aa68235def444a12efcde6acabc1
|
Provenance
The following attestation bundles were made for mlbnb-0.1.12.tar.gz:
Publisher:
publish.yaml on jonas-scholz123/mlbnb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mlbnb-0.1.12.tar.gz -
Subject digest:
65a57fd8de4371287cc72a699d33dc3210655b98ee956636a4aeb45398f2e3f9 - Sigstore transparency entry: 953266598
- Sigstore integration time:
-
Permalink:
jonas-scholz123/mlbnb@1f76865f563d9d4d5a59d75135a7af18b5bbd2df -
Branch / Tag:
refs/heads/main - Owner: https://github.com/jonas-scholz123
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@1f76865f563d9d4d5a59d75135a7af18b5bbd2df -
Trigger Event:
push
-
Statement type:
File details
Details for the file mlbnb-0.1.12-py3-none-any.whl.
File metadata
- Download URL: mlbnb-0.1.12-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da228f0bc23c62e65bcac096614652e9d37cec34c92f8ddc0266447fb416a96c
|
|
| MD5 |
3f99c4aa6ab1c8f1d7153560ca6e7c61
|
|
| BLAKE2b-256 |
e0a7a817ad6bb58918c758f142815ad634c474dfbaec7576b5e4974e25f33626
|
Provenance
The following attestation bundles were made for mlbnb-0.1.12-py3-none-any.whl:
Publisher:
publish.yaml on jonas-scholz123/mlbnb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mlbnb-0.1.12-py3-none-any.whl -
Subject digest:
da228f0bc23c62e65bcac096614652e9d37cec34c92f8ddc0266447fb416a96c - Sigstore transparency entry: 953266601
- Sigstore integration time:
-
Permalink:
jonas-scholz123/mlbnb@1f76865f563d9d4d5a59d75135a7af18b5bbd2df -
Branch / Tag:
refs/heads/main - Owner: https://github.com/jonas-scholz123
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@1f76865f563d9d4d5a59d75135a7af18b5bbd2df -
Trigger Event:
push
-
Statement type: