Skip to main content

Interactive TUI wizard for generating and submitting Slurm sbatch scripts

Project description

███████╗██╗     ██╗   ██╗██████╗ ███╗   ███╗ █████╗ ████████╗███████╗
██╔════╝██║     ██║   ██║██╔══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝
███████╗██║     ██║   ██║██████╔╝██╔████╔██║███████║   ██║   █████╗  
╚════██║██║     ██║   ██║██╔══██╗██║╚██╔╝██║██╔══██║   ██║   ██╔══╝  
███████║███████╗╚██████╔╝██║  ██║██║ ╚═╝ ██║██║  ██║   ██║   ███████╗
╚══════╝╚══════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝     ╚═╝╚═╝  ╚═╝   ╚═╝   ╚══════╝

⚡ Stop hand-writing sbatch scripts. Let the wizard do it.

A fast, friendly TUI wizard + CLI that builds and submits Slurm batch jobs — on any cluster, as long as sbatch is on your PATH.

CI PyPI Python License: MIT Status: experimental Linter: ruff


✨ Why Slurmate?

Writing #SBATCH headers by hand is fiddly and error-prone: which partition has H100s? what's the memory limit? did I get the --gres syntax right for this cluster? Slurmate turns that into a guided conversation — it reads your cluster live, validates as you go, and hands you a clean, ready-to-submit script.

slurmate

That's it. Answer a few prompts, watch the script build itself in a live preview, and submit — or save it for later.


🚀 Quick start

# Recommended: isolated install
pipx install slurmate

# or plain pip
pip install slurmate
Install from source / for development
git clone https://github.com/PursuitOfDataScience/slurmate.git
cd slurmate
pip install -e ".[dev]"     # editable + dev tools (pytest, ruff, mypy)

Interactive mode (the TUI)

slurmate

A full-screen wizard walks you through name → resources → environment → command. The generated script grows live in a preview pane as you answer. A final Review & Submit screen shows your full configuration and the generated script side by side, then a single menu lets you submit, go back to edit your answers, open the script in $EDITOR, save it, or quit.

💡 You can leave any step blank and come back to it — anything still missing is flagged before you submit. Esc / Shift+Tab go back at any step (including from the action menu, to re-edit your answers); navigation is fully keyboard-driven.

Batch mode (scriptable, no TUI)

slurmate \
  --job-name train_job \
  --partition gpu \
  --cpus 8 --memory 32G --time 04:00:00 \
  --gpus 1 --gpu-type h100 \
  --command "python train.py"

Submit immediately, no prompts:

slurmate --partition gpu --command "python train.py" --yes

Just want the script? Print it (great for piping or CI):

slurmate --partition gpu --command "python train.py" --print > job.sbatch

Run slurmate --help for the full flag list.


🎯 Features

🧠 Live cluster awareness Pulls real partitions, GPU types, QoS, accounts, conda envs, and modules from sinfo / scontrol / sacctmgr / conda.
👀 Live preview The #SBATCH script builds incrementally as you answer — what you see is exactly what gets submitted.
🛡️ Partition-aware validation Inline warnings when CPU / memory / time / GPU requests exceed the selected partition's limits.
📁 Path autocomplete Tab-complete file paths while typing your command, virtualenv path, or output files — no more retyping long project paths.
↩️ Skip & come back Leave steps blank, navigate freely with Esc, and get reminded of anything missing before submit.
📋 Copy-friendly Mouse capture is off so you can select/copy the preview natively; navigation is fully keyboard-driven.
🧩 Cluster-agnostic GPU syntax Choose --gres=gpu:type:N, --gres + --constraint, or --gpus to match your site.
🐍 Env activation Conda, Mamba, virtualenv, or none — generated automatically.
🗂️ Smart output paths Set a custom log name/pattern (%j = job ID); error path is derived and log dirs are auto-created.
♻️ Reproducible Every submission is saved locally as <job>-<job-id>.sh; you can also save manually or edit in $EDITOR before submitting.
🧪 Safe to explore No Slurm? It falls back to realistic mock data so you can try the whole flow anywhere.

⚙️ Configuration file

Stop retyping the same account and partition every run. Slurmate reads defaults from a TOML file (first match wins):

  1. .slurmate.toml in the current directory
  2. ~/.config/slurmate/config.toml

These prefill the wizard and act as fallbacks in batch mode. Explicit CLI flags always win.

# .slurmate.toml — keys may be top-level or under a [defaults] table
account     = "my_lab"
partition   = "gpu-shared"
cpus        = 8
memory      = "32G"
time_limit  = "04:00:00"
gpu_format  = "gres_type"            # gres_type | constraint | gpus
env_type    = "conda"                # conda | mamba | venv | none
modules     = ["cuda/12.1", "gcc/9.3.0"]
output_dir  = "logs"

Recognized keys: job_name, account, partition, qos, cpus, memory, time_limit, nodes, ntasks_per_node, gpus, gpu_type, gpu_format, array_spec, modules, env_type, env_name, output_dir, output_file, command, custom_sbatch.

Real TOML is used when available (tomllib on 3.11+, tomli otherwise); without either, a minimal flat key = value reader is used as a fallback.


🔧 Environment variables

Variable Effect
SLURMATE_MOCK=1 Force mock mode even when Slurm is installed (great for demos/tests).
SLURMATE_GPU_FORMAT Default GPU syntax: gres_type (default) · constraint · gpus.
SLURMATE_LOG_DIR=… Save a copy of every submitted script there for reproducibility.
SLURMATE_NO_BANNER=1 Hide the startup banner.
SLURMATE_BANNER_ANIMATE=1 Force the animated banner even when not a TTY.
SLURMATE_DEBUG=1 Verbose debug logging.

NO_COLOR and non-TTY output are respected automatically.


🛠️ How it works

  1. Gather — query the cluster (or fall back to mock data) for partitions, limits, GPU types, environments, and modules.
  2. Guide — a keyboard-first wizard collects name, resources, dependencies, and the command, validating against the chosen partition as you go.
  3. Generate & submit — produce a clean #SBATCH script, optionally edit it in $EDITOR, then pipe it straight to sbatch (or save / print it).

🧪 Status

Slurmate is experimental and pre-1.0 — the CLI, config keys, and defaults may change between releases. It's already useful day-to-day; pin a version if you script around it. Bug reports and cluster-specific quirks are very welcome.


🤝 Contributing

Issues and PRs are welcome! For local development:

pip install -e ".[dev]"
ruff check src/        # lint
mypy src/              # types (strict)
pytest                 # tests

CI runs the same three checks on Python 3.10–3.12 for every push and PR.


📄 License

Released under the MIT License.

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

slurmate-0.2.1.tar.gz (50.9 kB view details)

Uploaded Source

Built Distribution

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

slurmate-0.2.1-py3-none-any.whl (38.7 kB view details)

Uploaded Python 3

File details

Details for the file slurmate-0.2.1.tar.gz.

File metadata

  • Download URL: slurmate-0.2.1.tar.gz
  • Upload date:
  • Size: 50.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for slurmate-0.2.1.tar.gz
Algorithm Hash digest
SHA256 7373f6ffeb5e2d118413ae4fa812982e393a547a083f923d9eea5a7bf9dfa0d6
MD5 81af3da6bab069458a91597536ecbae9
BLAKE2b-256 39b541eabf6d2b871e2c1d94f811269b14aaf7cacbaceb9b9403208f5f1934b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for slurmate-0.2.1.tar.gz:

Publisher: release.yml on PursuitOfDataScience/slurmate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slurmate-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: slurmate-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 38.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for slurmate-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f20bdbc89e82342f1c8c146c9a658b3bf0d97e77f129fb5f483a2ca8c8205a1a
MD5 5df5ca6c8d7e90ceaeaddb529ae839ff
BLAKE2b-256 c849b80236ddc463c8fcd0cfaeac27a3aa887c4dc3da24671cf65f945ab1226e

See more details on using hashes here.

Provenance

The following attestation bundles were made for slurmate-0.2.1-py3-none-any.whl:

Publisher: release.yml on PursuitOfDataScience/slurmate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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