This release is a pre-release and may not be stable for production use.
Python Slurm SDK
A developer-friendly SDK to define, submit, and manage Slurm jobs in Python with native array job support, fluent dependency APIs, and container packaging.
Quick Start
Simple Task with Dependencies
from slurm import Cluster, task
@task(time="00:01:00", mem="1G")
def preprocess(dataset: str) -> str:
return f"processed_{dataset}"
@task(time="00:05:00", mem="4G", cpus_per_task=4)
def train_model(data: str, lr: float) -> dict:
return {"model": f"trained_on_{data}", "lr": lr, "accuracy": 0.95}
@task(time="00:01:00", mem="1G")
def evaluate(model: dict) -> str:
return f"Model accuracy: {model['accuracy']}"
if __name__ == "__main__":
# Local backend for offline development
with Cluster(backend_type="local") as cluster:
# Fluent dependency API with .after()
prep_job = preprocess("dataset.csv")
train_job = train_model.after(prep_job)(data=prep_job, lr=0.001)
eval_job = evaluate.after(train_job)(model=train_job)
eval_job.wait()
print(eval_job.get_result())
Workflow Orchestration
Workflows run on the cluster and orchestrate multiple tasks, enabling complex pipelines that survive preemption and scheduling delays:
from slurm import Cluster, task, workflow
from slurm.workflow import WorkflowContext
@task(time="00:05:00", mem="2G")
def train_epoch(epoch: int, data_path: str) -> dict:
return {"epoch": epoch, "loss": 1.0 / (epoch + 1), "checkpoint": f"ckpt_{epoch}.pt"}
@task(time="00:02:00", mem="1G")
def evaluate(checkpoint: str) -> float:
return 0.85 + (int(checkpoint.split("_")[1].split(".")[0]) * 0.02)
@workflow(time="01:00:00", mem="512M")
def training_pipeline(epochs: int, data_path: str, ctx: WorkflowContext) -> dict:
"""Multi-epoch training with evaluation after each epoch."""
results = []
for epoch in range(epochs):
# Submit training job
train_job = train_epoch(epoch=epoch, data_path=data_path)
train_result = train_job.get_result()
# Submit eval after training completes
eval_job = evaluate.after(train_job)(checkpoint=train_result["checkpoint"])
accuracy = eval_job.get_result()
results.append({"epoch": epoch, "loss": train_result["loss"], "accuracy": accuracy})
return {"results": results, "best_accuracy": max(r["accuracy"] for r in results)}
if __name__ == "__main__":
cluster = Cluster(
backend_type="ssh",
hostname="login.hpc.example.com",
username="myuser",
)
with cluster:
# The workflow itself runs as a job on the cluster
job = training_pipeline(epochs=3, data_path="/data/train")
job.wait()
print(job.get_result())
Array Jobs for Parallel Processing
from slurm import Cluster, task
@task(time="00:02:00", mem="2G", cpus_per_task=2)
def process_chunk(chunk_id: int, start: int, end: int) -> dict:
return {"chunk": chunk_id, "sum": sum(range(start, end))}
@task(time="00:01:00", mem="1G")
def aggregate(results: list) -> int:
return sum(r["sum"] for r in results)
if __name__ == "__main__":
with Cluster(backend_type="local") as cluster:
# Map task over items to create native SLURM array job
chunks = [
{"chunk_id": i, "start": i * 1000, "end": (i + 1) * 1000}
for i in range(10)
]
array_job = process_chunk.map(chunks)
# Aggregate results from array job
final = aggregate.after(array_job)(results=array_job.get_results())
final.wait()
print(f"Total: {final.get_result()}")
SSH Backend with Container Packaging
from slurm import Cluster, task
@task(
time="00:10:00",
mem="8G",
packaging="container",
packaging_platform="linux/amd64",
packaging_push=True,
packaging_registry="myregistry.io/myproject/",
)
def compute_intensive_task(n: int) -> float:
import numpy as np
return np.mean(np.random.random(n))
if __name__ == "__main__":
cluster = Cluster(
backend_type="ssh",
hostname="login.hpc.example.com",
username="myuser",
)
with cluster:
job = compute_intensive_task(1_000_000)
job.wait()
print(job.get_result())
Documentation
- Contributing Guide - Development setup, testing, and contribution guidelines
- AGENTS.md - Guide for AI agents working with this codebase
- Changelog - Release history and changes
- examples/ - Complete working examples including parallelization patterns
Running on an ARM Mac (Apple Silicon)
You can build and publish x86_64 (``linux/amd64```) images from an ARM Mac by
enabling QEMU emulation inside your container runtime. The example below shows
the required one-time setup for Podman; Docker Desktop users can follow a
similar flow using docker buildx (no additional configuration usually needed).
-
Install QEMU locally. This provides the binary emulators that Podman will load into its virtual machine:
brew install qemu
-
Make sure the Podman machine is created and running. If you have not initialised it yet:
podman machine init --now
-
Register the QEMU static binaries inside the Podman machine so it can run amd64 containers. This step reboots the VM and only needs to be performed once (repeat if you recreate the machine):
podman machine ssh sudo rpm-ostree install qemu-user-static podman machine ssh sudo systemctl reboot
-
After the machine restarts, confirm cross-building works:
podman build --platform linux/amd64 -t test-amd64 . podman run --rm --platform linux/amd64 test-amd64 uname -m
The final command should print
x86_64even though you are on an ARM host.
With QEMU registered you can now build the example container in this project
using the provided Slurmfile (platform = "linux/amd64") and push it to your
registry before submitting jobs to an x86 cluster.
Metadata
Release files for slurm-sdk 0.4.6.dev202604080001
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 |
|---|---|---|---|---|
| slurm_sdk-0.4.6.dev202604080001.tar.gz | 485.3 kB | With provenance | Details for slurm_sdk-0.4.6.dev202604080001.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| slurm_sdk-0.4.6.dev202604080001-py3-none-any.whl | Python 3 | none | any | Details for slurm_sdk-0.4.6.dev202604080001-py3-none-any.whl |
Total release size: 804.1 kB
Release files / slurm_sdk-0.4.6.dev202604080001.tar.gz
| Download URL | slurm_sdk-0.4.6.dev202604080001.tar.gz |
|---|---|
| Size | 485.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d7746c5520cb4f804f5d3152b2a5102e6620d2de6b7b991cb8fb9fd4d6390a09
|
|
BLAKE2b-256 checksum How to use checksums |
ca1287a97aa81dbee53dc0cf471654186b24171267143ca66a4e1f34336c3473
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 8, 2026.
Transparency logRelease files / slurm_sdk-0.4.6.dev202604080001-py3-none-any.whl
| Download URL | slurm_sdk-0.4.6.dev202604080001-py3-none-any.whl |
|---|---|
| Size | 318.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6611b942fc21a5dd05c9ee08d808b92da7cdfe40e6ea9b90b18fa6d0fa714310
|
|
BLAKE2b-256 checksum How to use checksums |
290731e66e3c840b2dc8f8bca6322fe43bb5dd3d06d8a2f1b2b8148f19950a38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 8, 2026.
Transparency logSecurity for slurm-sdk 0.4.6.dev202604080001
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 slurm_sdk-0.4.6.dev202604080001.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 Apr 8, 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.