Turn the laptops in the room into one pool of ML compute. Ad-hoc, zero-config LAN clusters for training and inference on whatever hardware you have.
Project description
onepool
Turn the laptops in the room into one pool of ML compute.
onepool makes any group of computers on the same local network — Windows, Linux, or macOS; NVIDIA, AMD, integrated graphics, or plain CPUs — into a single ad-hoc cluster for machine learning. Not just inference: real distributed training over ordinary WiFi is the headline feature.
pip install onepool # every machine, any OS
onepool doctor # tells you the exact PyTorch install for your GPU
pip install "onepool[train]" # training stack (transformers, peft, datasets)
# machine A — whoever has the job
onepool train run.yaml --pool --nodes 2 # hosts a pool, prints a session code
# machines B, C — anyone in the room
onepool join amber-fox-42 # zero config, auto-discovered, starts working
# Ctrl-C → clean teardown. Nothing persists. No accounts. No daemons.
A live dashboard (session code, nodes, loss curve) serves at http://localhost:7070 while the pool runs. No pool handy? onepool train run.yaml alone trains on just your machine.
Why
- Existing tools don't do this. exo (archived) was inference-only and Apple-first. hivemind targets internet-scale volunteer computing. Ray and Horovod need DevOps expertise and homogeneous clusters. Nothing lets a study group pool three mismatched laptops for an evening of fine-tuning.
- Heterogeneous is the default, not the edge case. A 6GB RTX 3050 and a 4GB GTX 1650 in the same pool, each doing work proportional to what it can actually handle — measured, not assumed.
- WiFi is enough. Training uses a DiLoCo-style low-communication algorithm (many local steps, rare synchronization of small pseudo-gradients) plus LoRA adapters and int8-quantized sync, so a sync round is single-digit megabytes, not gigabytes.
- Session-based by design. A pool exists while its processes run and vanishes when they stop. Disposable clusters, not infrastructure.
Status
Pre-alpha, built in the open. Roadmap:
| Milestone | Scope | Status |
|---|---|---|
| M0 | CLI skeleton, hardware probe, onepool doctor |
✅ done |
| M1 | Zero-config discovery, join/leave, live dashboard | ✅ done |
| M2 | Single-node LoRA fine-tuning path | ✅ done |
| M3 | Distributed training (DiLoCo) across mixed hardware over WiFi | ✅ done |
| M4 | Sync compression, speed-proportional rounds | ✅ done |
| v0.2 | Distributed inference | planned |
Want to try it on your machines right now? Follow TESTING.md —
a 15-minute walkthrough from pip install to a two-laptop distributed training run.
Try it now
git clone https://github.com/one-pool/onepool && cd onepool
uv sync
uv run onepool doctor # what can this machine contribute to a pool?
onepool doctor detects your GPU(s) and tells you the exact PyTorch install command for your hardware — the one genuinely fiddly step on heterogeneous machines.
Design in one paragraph
Every node runs the same process. mDNS (plus a UDP-broadcast fallback) advertises presence; a human-readable session code carries a shared secret so only invited machines join. The node that submits a job coordinates it: it benchmarks each worker on the actual model, shards data proportional to measured throughput, and runs DiLoCo — each worker takes ~100 local AdamW steps, then the pool all-reduces int8-quantized pseudo-gradients (for LoRA runs, single-digit megabytes) into an outer Nesterov-SGD step. Workers that vanish mid-round are dropped and their shard redistributed; workers that appear are folded in at the next sync. The dashboard is a local web page served by the coordinator.
License
AGPL-3.0-or-later. Use it, fork it, learn from it — but derivatives stay open, including network services built on it. The onepool name and logo are project trademarks; see TRADEMARK.md.
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
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 onepool-0.6.0.tar.gz.
File metadata
- Download URL: onepool-0.6.0.tar.gz
- Upload date:
- Size: 304.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e78e1ef477b616514d526ba2834ef06d9d85c90a126d26f75fa639690d32cd47
|
|
| MD5 |
89a8e0a1837ca7f4ec15e2875716a547
|
|
| BLAKE2b-256 |
ef360a891aa58dac4bb5b9175a47d395cc643d67ae2edb7722b8fe1f115b1700
|
Provenance
The following attestation bundles were made for onepool-0.6.0.tar.gz:
Publisher:
release.yml on one-pool/onepool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
onepool-0.6.0.tar.gz -
Subject digest:
e78e1ef477b616514d526ba2834ef06d9d85c90a126d26f75fa639690d32cd47 - Sigstore transparency entry: 2143218173
- Sigstore integration time:
-
Permalink:
one-pool/onepool@c30edcd0888a86783252bc22c1c36b6e5ef128d9 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/one-pool
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c30edcd0888a86783252bc22c1c36b6e5ef128d9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file onepool-0.6.0-py3-none-any.whl.
File metadata
- Download URL: onepool-0.6.0-py3-none-any.whl
- Upload date:
- Size: 56.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ec33b74b34fa4bb9b40046ca1a6857edf406a3af438dd66c6c65eb903d4aed1
|
|
| MD5 |
7474ba230baee7758a2ac8cf883ccf22
|
|
| BLAKE2b-256 |
640e29f02902f261dd27526a88a43bab3cc355125a17fe9b8325c071dc2bf689
|
Provenance
The following attestation bundles were made for onepool-0.6.0-py3-none-any.whl:
Publisher:
release.yml on one-pool/onepool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
onepool-0.6.0-py3-none-any.whl -
Subject digest:
2ec33b74b34fa4bb9b40046ca1a6857edf406a3af438dd66c6c65eb903d4aed1 - Sigstore transparency entry: 2143218340
- Sigstore integration time:
-
Permalink:
one-pool/onepool@c30edcd0888a86783252bc22c1c36b6e5ef128d9 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/one-pool
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c30edcd0888a86783252bc22c1c36b6e5ef128d9 -
Trigger Event:
push
-
Statement type: