This release is a pre-release and may not be stable for production use.
DatasetRT
DatasetRT is a correctness-first dataset cache for ML training loops that need fast restarts, deterministic sampling, and metadata-aware control over what gets sampled.
It keeps payloads immutable on disk, keeps sampling state in Rust, and lets your Python training code steer the dataset through one Polars metadata table.
metadata = dataset.get_metadata()
dev_run = metadata.head(100)
dataset.update_metadata(dev_run)
for sample in dataset:
train(sample.data, sample.metadata)
Rows in the active metadata table are the rows DatasetRT samples from. Remove
rows for a fast development run, duplicate rows or update weight for class
balancing and OHEM, add extra columns for training annotations, and let Rust
validate that every row still maps to an immutable cache sample.
Why It Exists
Dataset bugs are expensive. A silent shuffle change, corrupt shard, mismatched metadata row, or weight vector applied to the wrong sample can waste training runs and make experiments impossible to reproduce.
DatasetRT is for the boring, high-stakes part of ML infrastructure:
- cache expensive preprocessing once and restart quickly
- keep payload bytes immutable while metadata stays editable at runtime
- filter or rebalance samples without rewriting cache files
- sample deterministically from the same cache contents, seed, epoch, and active metadata table
- validate metadata and weights against stable
(cache_id, sample_id)identities - keep reader and writer queues bounded in Rust
The design rule is simple:
If it affects correctness, Rust owns it.
Python remains the ergonomic edge: it describes sources, edits metadata with Polars, and decodes payload bytes into tensors, images, arrays, or domain objects.
The Core Idea
DatasetRT exposes the active dataset as a Polars table:
cache_id | sample_id | <stored metadata columns...> | weight | <extra columns...>
That table is the runtime control plane.
import polars as pl
metadata = dataset.get_metadata()
balanced = (
metadata.join(
metadata.group_by("label").agg(pl.len().alias("class_count")),
on="label",
)
.with_columns((1.0 / pl.col("class_count")).alias("weight"))
.drop("class_count")
)
dataset.update_metadata(balanced)
update_metadata() is runtime-only. It does not rewrite metadata.arrow,
index.bin, shards, or manifests. Future iterators use the updated active table;
already-created iterators keep their snapshot.
With drt.ReaderConfig(shuffle=True), DatasetRT performs deterministic weighted
multinomial sampling with replacement over the active table. With
shuffle=False, it emits active rows in cyclic table order, including
duplicates.
Use dataset.set_epoch_len(n) to make future iterators emit a finite window of
n samples. Ordered reads continue through the active table cyclically across
iterator boundaries, while shuffled reads continue a deterministic multinomial
draw stream. Updating metadata resets the stream and sets the epoch
length to the new table row count. Call set_epoch_len afterward to override it.
Installation
For GPU and distributed loader measurements, see the
portable benchmark commands:
python -m dataset_rt.run_benchmark --ranks 4 --num-workers 8 --device cuda.
DatasetRT supports Python 3.10 through 3.13.
uv add dataset-rt
Or with pip:
pip install dataset-rt
Quickstart
Wrap your existing data source as a Python iterable that yields payload bytes and primitive metadata.
from pathlib import Path
import dataset_rt as drt
class Images:
name = "train_images"
def __iter__(self):
for image_id, image_bytes, label in load_my_images():
yield drt.CacheInput(
data=image_bytes,
metadata={"image_id": image_id, "label": label},
)
runtime = drt.DatasetRuntime(num_workers=4)
result = runtime.from_cache_sources(
Images(),
Path("cache"),
reader_config=drt.ReaderConfig(seed=42, shuffle=True),
)
match result:
case drt.CacheSourcesDatasetSuccess(dataset, results):
pass
case error:
raise RuntimeError(error)
for sample in dataset:
image = decode_image(sample.data)
label = sample.metadata["label"]
train(image, label)
The Rust cache stores bytes. DatasetRT does not decode JPEGs, tensors, tokens, or framework objects in the core; your Python code owns domain decoding.
When To Use It
Use DatasetRT when you care about:
- restart speed after expensive preprocessing
- deterministic training-data order
- class balancing, OHEM, or metadata-driven sampling
- safe development subsets without separate cache copies
- cache integrity and bounded native prefetching
It is not trying to be a training framework, image decoder, tensor format, or model-specific data pipeline. It is the cache and sampling layer underneath those pieces.
Documentation
- Python API
- Runtime Model
- Determinism
- Storage Format
- Architecture
- Serialization Boundary
- Build Artifacts
- Development
Status
DatasetRT is early production infrastructure. The core cache lifecycle, immutable storage format, runtime metadata table, deterministic weighted sampling, and Rust-owned reader/writer prefetching are in place.
Citation
@software{stupakov_datasetrt_2026,
author = {Stupakov, Vadym},
title = {DatasetRT: A Correctness-First Dataset Cache Runtime},
year = {2026},
url = {https://github.com/Red-Eyed/DatasetRT}
}
Metadata
Release files for dataset-rt 0.4.0rc3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dataset_rt-0.4.0rc3.tar.gz | 301.2 kB | Without provenance | Details for dataset_rt-0.4.0rc3.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| dataset_rt-0.4.0rc3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ x86-64 | Details for dataset_rt-0.4.0rc3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
| dataset_rt-0.4.0rc3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ ARM64 | Details for dataset_rt-0.4.0rc3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
| dataset_rt-0.4.0rc3-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details for dataset_rt-0.4.0rc3-cp310-abi3-macosx_11_0_arm64.whl |
| dataset_rt-0.4.0rc3-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details for dataset_rt-0.4.0rc3-cp310-abi3-macosx_10_12_x86_64.whl |
Total release size: 4.9 MB
Release files / dataset_rt-0.4.0rc3.tar.gz
| Download URL | dataset_rt-0.4.0rc3.tar.gz |
|---|---|
| Size | 301.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c99296ddacf0bfebefef7b30d2c0c8270669418cdb21f7ca781c485b2b208c34
|
|
BLAKE2b-256 checksum How to use checksums |
afac988e541930022883f8e7d9ab2cae6ed03b0191a47e60672cfd7d5ef032cf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / dataset_rt-0.4.0rc3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | dataset_rt-0.4.0rc3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1bdb3457afa2088676729eb35b650526154236fd8450a99f856f7727505fc793
|
|
BLAKE2b-256 checksum How to use checksums |
8ff300fdf2a9a27071f3aff1e3cacca4b1b64365124a0777ee6cf48ec7c68508
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / dataset_rt-0.4.0rc3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | dataset_rt-0.4.0rc3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
0f34008d6e85956846a8e103bc3f0a33f1182708a21df0d6f4074426ba5ea1f3
|
|
BLAKE2b-256 checksum How to use checksums |
25ae9559a994ab91233cb7664cbc39192589cbfd56e5e22b030e3d715e84b94d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / dataset_rt-0.4.0rc3-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | dataset_rt-0.4.0rc3-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3263b514e06eb40e026b6caddf296c2aeeb844481abbabd32b623f61d6ec091a
|
|
BLAKE2b-256 checksum How to use checksums |
39591d57e26c78c7498c05245e0b23a52014f7dc1baca80394b9881c6d051582
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / dataset_rt-0.4.0rc3-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | dataset_rt-0.4.0rc3-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
693603b847838d2e54dd2ba09dda2c114cc7db384eaed5e46a47ebeb6dce473c
|
|
BLAKE2b-256 checksum How to use checksums |
3d03bf53b473bfda716c70c7d8cd191dcd6758dab5065ed41205e758bde85a68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for dataset-rt 0.4.0rc3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.