Skip to main content

A Prefect 3 TaskRunner that submits tasks to SLURM clusters via submitit

Project description

prefect-submitit

A Prefect 3 TaskRunner that submits tasks to SLURM clusters via submitit.

Features

  • Single task submission -- submit individual Prefect tasks as SLURM jobs
  • Job arrays -- submit task.map() calls as SLURM job arrays with automatic chunking when the array exceeds cluster limits
  • Batched execution -- group multiple items per SLURM job with units_per_worker to reduce scheduling overhead
  • Local mode -- swap to local execution for testing without changing your flow code (execution_mode="local" or SLURM_TASKRUNNER_BACKEND=local)
  • Prefect UI integration -- task run names include SLURM job IDs for easy cross-referencing with squeue/sacct

Installation

pip install prefect-submitit

Or with conda (after the first conda-forge release):

conda install -c conda-forge prefect-submitit

Quick Start

from prefect import flow, task
from prefect_submitit import SlurmTaskRunner

@task
def add(x: int, y: int) -> int:
    return x + y

@flow(task_runner=SlurmTaskRunner(partition="cpu", time_limit="00:10:00"))
def my_flow():
    # Single task
    future = add.submit(1, 2)
    print(future.result())  # 3

    # Map over inputs (submitted as a SLURM job array)
    futures = add.map([1, 2, 3], [4, 5, 6])
    print([f.result() for f in futures])  # [5, 7, 9]

if __name__ == "__main__":
    my_flow()

Configuration

SlurmTaskRunner(
    partition="gpu",          # SLURM partition
    time_limit="04:00:00",    # Wall time (HH:MM:SS)
    mem_gb=16,                # Memory per job
    gpus_per_node=1,          # GPUs per job
    units_per_worker=10,      # Items per SLURM job (batched mode)
    execution_mode="slurm",   # "slurm" or "local"
    slurm_array_parallelism=100,  # Max concurrent array tasks
    log_folder="slurm_logs",  # Where submitit writes logs
    fail_on_error=True,       # Raise on SLURM job failure
)

Any additional keyword arguments are passed through to submitit (e.g. slurm_gres="gpu:a100:1").

Local Testing

Set the environment variable to skip SLURM entirely:

export SLURM_TASKRUNNER_BACKEND=local

Or pass it directly:

SlurmTaskRunner(execution_mode="local")

Development

Requires Pixi:

pixi install
pixi run -e dev test
pixi run -e dev fmt

License

BSD 3-Clause. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prefect_submitit-0.1.1.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prefect_submitit-0.1.1-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file prefect_submitit-0.1.1.tar.gz.

File metadata

  • Download URL: prefect_submitit-0.1.1.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for prefect_submitit-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d92da491a7ef5c85742e2bd941255b12bbdb8bee022de3052546b1b14d9d04b2
MD5 e4bca1148cc55fbad5feb8662a2553e9
BLAKE2b-256 34056a72129b9e8637f4cd1919dfa43e4a6044297b3fdacfbc23497a793beee0

See more details on using hashes here.

File details

Details for the file prefect_submitit-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for prefect_submitit-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 18d164a1f051b1398d39966bb792ed8155750182084cc57baba42a23b05d339d
MD5 83c86682c012af95a21146c9f2338161
BLAKE2b-256 0193e9b57de15511cf843b55174d71a86f4c4588833fa0f953891cb61e77089e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page