Train PyTorch on every GPU you can reach.
One Trainer, from your laptop to many machines.
Install ·
Quickstart ·
Performance ·
AI agents ·
Architecture ·
Docs ·
Examples ·
Changelog
The GPUlayer Trainer runs the same PyTorch script in your process, on every GPU of a
machine, or across many machines: laptops, workstations, servers and cloud VMs. It picks
machines and GPUs that can train the model, starts every process, and brings back logs,
checkpoints and metrics.
NVIDIA CUDA, Apple Metal (MPS) and CPU are validated on hardware. AMD ROCm is implemented and not yet validated. Docs: gpulayer.dev/docs.
v0.7.1. Validated on a Tesla T4, 4× RTX 3070, 2× A100 (NVLink), an Apple M2 Pro, and distributed CPU training on up to 16 Google Cloud machines. NCCL across machines is implemented but not validated. See Status.
Install
pip install gpulayer
Check what this machine can train on:
gpulayer resources detect
To train with PyTorch, install it too: pip install "gpulayer[torch]".
Other ways to install
| Method | Command |
|---|---|
| As a standalone CLI with uv | uv tool install gpulayer |
| Install script (own virtual environment, no sudo) | curl -fsSL https://raw.githubusercontent.com/antonellof/gpulayer/main/install.sh | sh |
| Docker | docker pull ghcr.io/antonellof/gpulayer:0.7.1 (also :0.7.1-torch; see deploy/docker) |
| Kubernetes (Helm) | helm install gpulayer deploy/kubernetes/helm/gpulayer -n gpulayer --create-namespace (see Kubernetes) |
| From source, to run the examples | git clone https://github.com/antonellof/gpulayer && cd gpulayer && pip install -e ".[dev,examples]" |
More in Installation.
Quickstart
import gpulayer.pytorch as glt
trainer = glt.Trainer(max_epochs=5, accelerator="cuda", devices=4, num_nodes=2)
trainer.fit(model, train_loader) # 2 machines x 4 GPUs, DDP over NCCL
# The same file in this process, as 2-process DDP, or on 2 nodes: only the flags change
python examples/trainer_regression/train.py
python examples/trainer_regression/train.py --accelerator cpu --devices 2
python examples/trainer_regression/train.py --accelerator cpu --nodes 2 --devices 2
# More machines: run this on one, then paste the printed `gpulayer join` line on the others
gpulayer up
The full quickstart shows the output of each step.
Performance
Against PyTorch Lightning, with the same model, data and optimizer and each trainer's defaults, the GPUlayer Trainer was faster in 10 of 11 GPU cases and in every CPU case.
| Hardware | GPUlayer Trainer against Lightning |
|---|---|
| Tesla T4 | 1.14 to 1.39x per step |
| 1, 2 and 4 RTX 3070s (DDP over NCCL) | 1.11 to 1.76x in 5 cases; 1.14x slower on one GPU with a CNN |
| Apple M2 Pro, GPU and CPU | 1.05 to 1.75x |
| 8 CPU machines on Google Cloud (gloo) | 11.9% faster (Lightning under torchrun) |
Keeping a 4-machine run in one zone instead of two regions made it 1.38x faster (42.5 s vs
58.8 s). Method and logs:
Performance;
scripts in benchmarks/.
How it works
The Trainer submits a run that says what it needs (accelerator, number of GPUs and machines,
GPU memory). A control plane, inside your process or run as a server with gpulayer up,
picks machines that can train it: the best-connected GPUs of a machine, and machines in one
zone when it can. A worker on each machine starts the ranks, streams logs and uploads
checkpoints. Workers open every connection themselves, so machines can sit behind NAT. More
in the Architecture overview.
The same engine runs plain commands and Python functions as jobs, and gpulayer mcp lets
coding agents start runs and read their results
(AI agents).
With one GPU on the machine you are using, a plain training loop is simpler. Jobs are not sandboxed, so use GPUlayer among people who trust each other.
Development
uv pip install -e '.[dev,examples]'
.venv/bin/pytest && .venv/bin/ruff check src tests && .venv/bin/mypy src
See Contributing.
License
Apache License 2.0, see LICENSE.
Metadata
Release files for gpulayer 0.7.1
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 |
|---|---|---|---|---|
| gpulayer-0.7.1.tar.gz | 2.3 MB | With provenance | Details for gpulayer-0.7.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| gpulayer-0.7.1-py3-none-any.whl | Python 3 | none | any | Details for gpulayer-0.7.1-py3-none-any.whl |
Total release size: 2.5 MB
Release files / gpulayer-0.7.1.tar.gz
| Download URL | gpulayer-0.7.1.tar.gz |
|---|---|
| Size | 2.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b80c09ffd2f00df4157b42607ded3a42ac12a5ba0e5ded0093e1d2ceaa2b8be9
|
|
BLAKE2b-256 checksum How to use checksums |
7baf4e92bbf8971c12ff8966609bed337f0a67b0f9d07b22fbcf9cf230715f72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.
Transparency logRelease files / gpulayer-0.7.1-py3-none-any.whl
| Download URL | gpulayer-0.7.1-py3-none-any.whl |
|---|---|
| Size | 175.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c0dde12c7de2b39466590061edd6d890de83d20a4149320504951ca5b1b478eb
|
|
BLAKE2b-256 checksum How to use checksums |
7018a0a4df8ef6b641a6a6dc93c6eec70c2b1c4b2cf8fab888beeaa5a838115c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.
Transparency logSecurity for gpulayer 0.7.1
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for gpulayer-0.7.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.
Transparency logA 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.