Distributed compute orchestration for the SandX platform
Project description
sandx-compute
Distributed compute orchestration for the SandX platform.
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
SchedulerAPI is designed to accommodate a consensus protocol without breaking changes.
Related
sandx-er— entity resolutionsandx-embed— embedding infrastructuresandx-graph— graph intelligence- sandx.io — project home
License
Apache 2.0 — see LICENSE
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 sandx_compute-0.1.1.tar.gz.
File metadata
- Download URL: sandx_compute-0.1.1.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65116a61baca71097cc46c973ab527cb1ade41f419d49979c3ffd95f8cf64043
|
|
| MD5 |
a5e505c35174854de948f8f55676892d
|
|
| BLAKE2b-256 |
48d43ee6d7ef9372699f688fc0069dc81a20cb7d354aa2824f2cba2e8dae1822
|
File details
Details for the file sandx_compute-0.1.1-py3-none-any.whl.
File metadata
- Download URL: sandx_compute-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4bb686360c91f36ed405fe772907ae89cedcfe5f12935499570a71b83215bb7
|
|
| MD5 |
7e0c13b04d7f5eccf34196179c23cda0
|
|
| BLAKE2b-256 |
7dbc9b0eff08d0daf4634609189de745fda87c74c849948d9baf3c93eaf9598e
|