Skip to main content

Cluster Tools

Build Status Code Style

This package provides python Executor classes for distributing tasks on a Slurm cluster, Kubernetes, Dask or via multi processing.

Example

import cluster_tools

def square(n):
  return n * n

if __name__ == '__main__':
  strategy = "slurm"  # other valid values are "multiprocessing" and "sequential"
  with cluster_tools.get_executor(strategy) as executor:
    result = list(executor.map(square, [2, 3, 4]))
    assert result == [4, 9, 16]

Installation

The cluster_tools package requires at least Python 3.9.

You can install it from pypi, e.g. via pip:

pip install cluster_tools

By default only the dependencies for running jobs on Slurm and via multiprocessing are installed. For Kubernetes and Dask run:

pip install cluster_tools[kubernetes]
pip install cluster_tools[dask]

Deprecation notice: The Dask, Kubernetes and PBS executors are deprecated and will be removed in the next major release of cluster_tools.

Configuration

Slurm

The cluster_tools automatically determine the slurm limit for maximum array job size and split up larger job batches into multiple smaller batches. Also, the slurm limit for the maximum number of jobs which are allowed to be submitted by a user at the same time is honored by looking up the number of currently submitted jobs and only submitting new batches if they fit within the limit.

If you would like to configure these limits independently, you can do so by setting the SLURM_MAX_ARRAY_SIZE and SLURM_MAX_SUBMIT_JOBS environment variables. You can also limit the maximum number of simultaneously running tasks within the slurm array job(s) by using the SLURM_MAX_RUNNING_SIZE environment variable.

Kubernetes

Resource configuration

Key Description Example
namespace Kubernetes namespace for the resources to be created. Will be created if not existent. cluster-tools
node_selector Which nodes to utilize for the processing. Needs to be a Kubernetes nodeSelector object. {"kubernetes.io/hostname": "node001"}
image The docker image for the containerized jobs to run in. The image needs to have the same version of cluster_tools and the code to run installed and in the PYTHONPATH. scalableminds/voxelytics:latest
mounts Additional mounts for the containerized jobs. The current working directory and the .cfut directory are automatically mounted. ["/srv", "/data"]
cpu CPU requirements for this job. 4
memory Memory requirements for this job. Not required, but highly recommended to avoid congestion. Without resource requirements, all jobs will be run in parallel and RAM will run out soon. 16G
python_executable The python executable may differ in the docker image from the one in the current environment. For images based of FROM python, it should be python. Defaults to python. python3.8
umask umask for the jobs. 0002

Notes

  • The jobs are run with the current uid:gid.
  • The jobs are removed 7 days after completion (successful or not).
  • The logs are stored in the .cfut directory. This is actually redundant, because Kubernetes also stores them.
  • Pods are not restarted upon error.
  • Requires Kubernetes ≥ 1.23.
  • Kubernetes cluster configuration is expected to be the same as for kubectl, i.e. in ~/.kube/config or similar.

Dev Setup

# See ./dockered-slurm/README.md for troubleshooting
cd dockered-slurm
docker compose up -d
docker exec -it slurmctld bash
docker exec -it c1 bash

Make sure to install all extra dependencies, such as Kubernetes, with uv sync --all-extras.

Tests can be executed with cd tests && uv run pytest -s tests.py after entering the container. Linting can be run with ./lint.sh. Code formatting (black) can be run with ./format.sh.

Credits

Thanks to sampsyo/clusterfutures for providing the slurm core abstraction and giovtorres/slurm-docker-cluster for providing the slurm docker environment which we use for CI based testing.

Metadata

Release files for cluster_tools 4.2.3

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

Source distribution (sdist)

Source distribution for cluster_tools 4.2.3
File Size Uploaded
cluster_tools-4.2.3.tar.gz 51.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cluster_tools 4.2.3
File Interpreter ABI Platform
cluster_tools-4.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 102.5 kB

Release files / cluster_tools-4.2.3.tar.gz

Download URL cluster_tools-4.2.3.tar.gz
Size 51.5 kB
Tags Source
SHA-256 checksum
How to use checksums
440362ef45720a2238cb78451d9e2125b8107f68c49b48a8bd828384dec92545
BLAKE2b-256 checksum
How to use checksums
7728ad8c438d545f481274ae382a741d4f82de0763ed6ce1f4afb6196d869af8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / cluster_tools-4.2.3-py3-none-any.whl

Download URL cluster_tools-4.2.3-py3-none-any.whl
Size 50.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e0a0ce81f994781b3146a51a8f021a489a83fed817e04dc8f463a89e17dd1422
BLAKE2b-256 checksum
How to use checksums
dd1a498929dde2ea8d1dc690eed5ea356856a9e4bd42c2d8b987fca1a89268e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

4.2.4

2 release files

This release

4.2.3 This release

2 release files

4.2.2

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.1

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.7.0

2 release files

3.6.0

2 release files

3.5.6

2 release files

3.5.5

2 release files

3.5.4

2 release files

3.5.3

2 release files

3.5.2

2 release files

3.5.1

2 release files

3.5.0

2 release files

3.4.3

2 release files

3.4.2

2 release files

3.4.1

2 release files

3.4.0

2 release files

3.3.0

2 release files

3.2.4

2 release files

3.2.3

2 release files

3.2.2

2 release files

3.2.1

2 release files

3.2.0

2 release files

3.1.5

2 release files

3.1.4

2 release files

3.1.3

2 release files

3.1.2

2 release files

3.1.0

2 release files

3.0.4

2 release files

3.0.3

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.5.0

2 release files

2.4.12

2 release files

2.4.10

2 release files

2.4.9

2 release files

2.4.8

2 release files

2.4.7

2 release files

2.4.6

2 release files

2.4.5

2 release files

2.4.4

2 release files

2.4.3

2 release files

2.4.2

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.11

2 release files

2.3.10

2 release files

2.3.9

2 release files

2.3.8

2 release files

2.3.7

2 release files

2.3.6

2 release files

2.3.5

2 release files

2.3.4

2 release files

2.3.3

2 release files

2.3.2

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.7

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

0.16.9

2 release files

0.16.5

2 release files

0.16.4

2 release files

0.16.3

2 release files

0.16.2

2 release files

0.16.0

2 release files

0.15.9

2 release files

0.15.8

2 release files

0.15.7

2 release files

0.15.6

2 release files

0.15.5

2 release files

0.15.4

2 release files

0.15.3

2 release files

0.15.1

2 release files

0.15.0

2 release files

0.14.9

2 release files

0.14.8

2 release files

0.14.7

2 release files

0.14.6

2 release files

0.14.3

2 release files

0.14.2

2 release files

0.14.1

2 release files

0.14.0

2 release files

0.13.6

2 release files

0.13.5

2 release files

0.13.4

2 release files

0.13.2

2 release files

0.13.1

2 release files

0.13.0

2 release files

0.12.4

2 release files

0.12.3

2 release files

0.12.2

2 release files

0.12.1

2 release files

0.12.0

2 release files

0.11.2

2 release files

0.10.9

2 release files

0.10.8

2 release files

0.10.7

2 release files

0.10.6

2 release files

0.10.5

2 release files

0.10.2

2 release files

0.10.1

2 release files

0.9.21

2 release files

0.9.20

2 release files

0.9.19

2 release files

0.9.16

2 release files

0.9.15

2 release files

0.9.14

2 release files

0.9.13

2 release files

0.9.12

2 release files

0.9.11

2 release files

0.9.10

2 release files

0.9.9

2 release files

0.9.8

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.30

2 release files

0.8.29

2 release files

0.1

1 release file

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