Skip to main content

slurm-workflows: HPC workflow helpers for Slurm clusters

slurm-workflows lets you run Python functions on a Slurm cluster without sbatch scripts written by hand. It provides an interface inspired by concurrent.futures. The interface launches long-lived workers inside pilot jobs. It then dispatches tasks to those workers. You pay Slurm's scheduling latency once per pilot job, not once per task.

Futuristic banner image.

Use it in three cases:

  • You have many Python tasks to run on one cluster allocation.
  • An exploration or a search has to spread across a pool of workers.
  • Per-worker state is expensive, and you want it to stay warm between tasks.

Installation

A run needs:

  • Python >= 3.12
  • Access to a Slurm cluster (sbatch, squeue, scancel on PATH)
  • The ds-service binary on PATH
pip install -U slurm-workflows
# For OptimizeSpaceBotorch:
pip install -U "slurm-workflows[botorch]"

To set up on UVA's Rivanna cluster, read How to install slurm-workflows on Rivanna.

Usage

Replace the Slurm account (-A), the partition (-p) and the setup script with the ones for your cluster. The driver must run on a node with the ib0 interface. For another interface, read How to run the ds-service server.

from ds_service_client import DsServiceServer
from slurm_workflows import SlurmPilotExecutor


def square(x):
    return x * x


SETUP_SCRIPT = """
module load gcc/14.2.0
conda activate my-env
"""

with DsServiceServer(interface="ib0") as ds_service:
    ds_service.wait_until_ready()

    with SlurmPilotExecutor("my-run", ds_service.address) as executor:
        # 1. Describe a job group. This submits nothing.
        executor.define_job_group(
            name="cpu",
            sbatch_args=["-A my_alloc", "-p standard", "-t 01:00:00"],
            setup_script=SETUP_SCRIPT,
        )

        # 2. Launch 4 pilot jobs of that job group.
        executor.scale_jobs("cpu", 4)

        # 3. Submit tasks to a named queue. That job group's workers claim them.
        tasks = [executor.submit("cpu", square, i) for i in range(100)]

        # 4. Block until every result is in.
        executor.wait(tasks, desc="squaring")

# The executor canceled every pilot job at the end of the block.
print(sum(task.output for task in tasks))
work directory: '/home/<user>/.cache/slurm-workflows/my-run/<timestamp>'
328350

You can submit tasks before the workers exist. They wait on the queue until a worker starts and claims them.

Documentation

Document What it covers
Computing pi on a Slurm cluster The main features of slurm-workflows, by creating a pool of workers to compute $\pi$.
Computing pi with a Sobol' QMC exploration Using ExploreSpaceSobolQMC to create a space filling design and evaluate it.
Optimizing Himmelblau's function Using OptimizeSpaceBotorch to run a batch Bayesian search.
How to install slurm-workflows on Rivanna Installing the package and the ds-service binary on Rivanna.
How to run the ds-service server Starting a ds-service server from the driver and binding it where workers can reach it.
How to keep per-worker state with actors Loading an expensive model or connection once per worker instead of once per task.
How to fold results across workers Using mapreduce to run one function over a whole collection and bring back a single value.
How to watch a run with swtop Following a live run from another shell, and keeping a record of one.
How to embed swtop in a Textual app Putting the swtop tabs, summary line, progress bar and error line in your own Textual app.
How to troubleshoot a failing run Finding the right log, and what each RuntimeError means.
How to resume a search Carrying a search on across a Slurm time limit.
SlurmPilotExecutor The executor, Task, RaiseOnError, the job group options, and the worker entry point.
mapreduce Mapping an iterable across the pool, the fold contract, and what the call creates on the server.
What a run publishes The environment a task sees, the keys and series a run writes, and the logs.
ExploreSpaceSobolQMC The Sobol' exploration, its study fields, and the results file.
OptimizeSpaceBotorch The batch Bayesian search, its study fields, and its stopping rule.
Search spaces IntRange, FloatRange and CategoricalRange.
The objective The contract an objective function meets, and what a failed evaluation does to a run.
swtop The CLI, the keys, the blocks on screen, what the host and job readings measure, and the widgets an app can embed.
The pilot-job model Why pilot jobs, the three processes, where the driver runs, and which class to reach for.
Batch Bayesian optimization Why a search has rounds, where the fit runs, and when it is worth the overhead.
The trail a run leaves Why a run is observable from outside itself, and the limits of that.

For contributors

Document What it covers
Developer notes The layout of the code, where each kind of documentation goes, and the conventions a change is held to.
Terminology The word this project uses for each concept, in prose and in identifiers, and where each word comes from.
How to run the tests Running the suite, what it mocks, and what it runs for real.

License

MIT. See LICENSE.

Release files for slurm-workflows 4.3.0

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

Source distribution (sdist)

Source distribution for slurm-workflows 4.3.0
File Size Uploaded
slurm_workflows-4.3.0.tar.gz 55.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for slurm-workflows 4.3.0
File Interpreter ABI Platform
slurm_workflows-4.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 119.0 kB

Release files / slurm_workflows-4.3.0.tar.gz

Download URL slurm_workflows-4.3.0.tar.gz
Size 55.4 kB
Tags Source
SHA-256 checksum
How to use checksums
80c3526f70eeff83efb51ea7355fa9665c99bdbf68ae6a94a3351f4847cc9195
BLAKE2b-256 checksum
How to use checksums
a6e4475cae9bb6677c2ddb13f1f4f0c99de5106bcf6c4c59c10470b0ba28c568
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Release files / slurm_workflows-4.3.0-py3-none-any.whl

Download URL slurm_workflows-4.3.0-py3-none-any.whl
Size 63.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f8ee03d69fbb357c54fc9682e3c8745758abba67c92d2f83b18c49c8831b87be
BLAKE2b-256 checksum
How to use checksums
7d388f0914ffccb22e946c873765a6a2ee52f008685a2047171918fb3532de1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Release history Release notifications | RSS feed

This release

4.3.0 This release

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.0.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.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