Skip to main content

sandx-compute

Distributed compute orchestration for the SandX platform.

CI Python 3.10+ License: Apache 2.0

Part of the SandX Lab computational infrastructure ecosystem.


What It Does

sandx-compute is the resource orchestration layer for the SandX platform. It tracks available compute nodes, matches workloads to nodes by capability, and manages the full job lifecycle.

Submit job  →  Scheduler  →  ResourceRegistry  →  Allocated node
                                                     ↓
                                          complete / fail / cancel
                                                     ↓
                                              Node released

Status

v0.1 — Working

Component Status
ResourceRegistry — node registration and capability tracking Working
Scheduler — requirement-aware first-fit allocation Working
Job lifecycle — submit, complete, fail, cancel Working
Distributed consensus locking Planned (Phase 3)
PyPI package Working

Installation

pip install sandx-compute

Or from source:

git clone https://github.com/sandxlab/sandx-compute
cd sandx-compute
pip install -e ".[dev]"

Demo

pip install sandx-compute
python -m examples.schedule_jobs

Registers a 5-node compute cluster (CPU + GPU nodes), submits 6 jobs with mixed requirements, shows allocation decisions, and walks through the full job lifecycle — no external data required.

Quick Start

from sandx_compute import ResourceRegistry, Scheduler

# Register compute nodes
registry = ResourceRegistry()
registry.register("cpu-1", cpu_cores=8, ram_gb=32)
registry.register("gpu-1", cpu_cores=16, ram_gb=64, gpu="A100", vram_gb=80)
registry.register("gpu-2", cpu_cores=8, ram_gb=32, gpu="T4", vram_gb=16)

# Create a scheduler
scheduler = Scheduler(registry)

# Submit a GPU job
job = scheduler.submit("train", requirements={"gpu": True, "min_vram_gb": 40})
print(job)
# Job(id=3f2a1b8c, task='train', status='running', node='gpu-1')

# Complete the job — releases the node
scheduler.complete(job)
print(registry.get("gpu-1").status)  # "available"

# Submit with no suitable node → stays pending
big_job = scheduler.submit("train", requirements={"gpu": True, "min_vram_gb": 200})
print(big_job.status)  # "pending"

Job Requirements

Key Type Description
gpu bool Requires a GPU node
min_vram_gb float Minimum VRAM in GB
min_cpu_cores int Minimum CPU core count
min_ram_gb float Minimum RAM in GB

Node Status Transitions

available  →  busy       (job scheduled)
busy       →  available  (job completed / failed / cancelled)
available  →  offline    (manual / health check)
available  →  reserved   (manual hold)

Design Notes

  • Single-process v0.1 — correct for local use; no distributed coordination.
  • First-fit allocation — jobs are assigned to the first node that satisfies all requirements.
  • Distributed locking is Phase 3 scope — the Scheduler API is designed to accommodate a consensus protocol without breaking changes.

Related

License

Apache 2.0 — see LICENSE

Release files for sandx-compute 0.1.1

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

Source distribution (sdist)

Source distribution for sandx-compute 0.1.1
File Size Uploaded
sandx_compute-0.1.1.tar.gz 10.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sandx-compute 0.1.1
File Interpreter ABI Platform
sandx_compute-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 19.2 kB

Release files / sandx_compute-0.1.1.tar.gz

Download URL sandx_compute-0.1.1.tar.gz
Size 10.5 kB
Tags Source
SHA-256 checksum
How to use checksums
65116a61baca71097cc46c973ab527cb1ade41f419d49979c3ffd95f8cf64043
BLAKE2b-256 checksum
How to use checksums
48d43ee6d7ef9372699f688fc0069dc81a20cb7d354aa2824f2cba2e8dae1822
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / sandx_compute-0.1.1-py3-none-any.whl

Download URL sandx_compute-0.1.1-py3-none-any.whl
Size 8.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b4bb686360c91f36ed405fe772907ae89cedcfe5f12935499570a71b83215bb7
BLAKE2b-256 checksum
How to use checksums
7dbc9b0eff08d0daf4634609189de745fda87c74c849948d9baf3c93eaf9598e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.1.1 This release

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