Minimal Slurm experiment runner with persistent SSH, YAML configs, and log streaming
Project description
slurmster
A minimal Python tool to run parameter-grid experiments on a Slurm cluster with persistent SSH, log streaming, and simple YAML configs.
Install
pip install slurmster
Features
- CLI with subcommands:
submit,monitor,status,fetch,cancel,gui - YAML config (explicitly provided via
--config) - Persistent SSH connection for low latency
- Per-run working directories on the remote side
- Automatic log redirection to
stdout.loginside each run directory - Live log streaming (and re-attach later)
- Local workspace to track runs and "fetched" state
- Cancel jobs from local machine
- Web-based GUI for easy management
CLI Usage
All commands follow this pattern:
slurmster --config <config.yaml> --user <username> --host <hostname> [options] <command>
Basic Commands
Submit experiments:
slurmster --config config.yaml --user myuser --host myhost submit
Monitor logs:
# Monitor by job ID:
slurmster --config config.yaml --user myuser --host myhost monitor --job 1234567
Check status:
slurmster --config config.yaml --user myuser --host myhost status
Fetch completed runs:
# Fetch all completed runs:
slurmster --config config.yaml --user myuser --host myhost fetch
# Or fetch a specific job:
slurmster --config config.yaml --user myuser --host myhost fetch --job 1234567
Cancel jobs:
# Cancel specific job:
slurmster --config config.yaml --user myuser --host myhost cancel --job 1234567
# or cancel all:
slurmster --config config.yaml --user myuser --host myhost cancel --all
Additional Options
--password-env ENV_VAR: Use password from environment variable--key /path/to/key: Use SSH key file instead of password--port 22: Specify SSH port (default: 22)
For submit:
--no-monitor: Don't automatically start monitoring after submission
For monitor:
--from-start: Stream from beginning instead of last 100 lines--lines N: Number of trailing lines when attaching (default: 100)
For status:
--all: Show all runs (default: only non-fetched)
For fetch:
--job <job_id>: Only fetch a specific job by ID
Configuration File
Create a YAML config file (see example/config.yaml):
remote:
base_dir: ~/experiments # remote working root
files:
push:
- example/train.py # any code/data files you need on remote
fetch:
- "model.pth" # optional; if omitted we fetch the entire run dir
- "log.txt"
slurm:
directives: | # SBATCH lines; placeholders allowed
#SBATCH --job-name={base_dir}
#SBATCH --partition=gpu
#SBATCH --time=00:10:00
#SBATCH --cpus-per-gpu=40
#SBATCH --nodes=1
#SBATCH --gres=gpu:1
#SBATCH --mem=32G
run:
command: | # your run command; placeholders allowed
source venv/bin/activate
python example/train.py --lr {lr} --epochs {epochs} --save_model "{run_dir}/model.pth" --log_file "{run_dir}/log.txt"
# ONE of the following:
grid:
lr: [0.1, 0.01, 0.001]
epochs: [1, 2, 5, 10]
# experiments:
# - { lr: 0.1, epochs: 1 }
# - { lr: 0.001, epochs: 10 }
Placeholders
{base_dir}: resolved remote base directory (e.g./home/you/experiments)- Any run parameter placeholder, e.g.
{lr},{epochs} {remote_dir}: the configuredremote.base_dir{run_dir}: the per-run directory (underremote.base_dir/runs/{exp_name})
Local workspace
Under the .slurmster directory next to your config.yaml (<config-dir>/.slurmster/<user>@<host>/<sanitized-remote-base>), we store:
runs.json— run registry (job id, exp name, fetched flag, etc.)results/<exp_name>_<job_id>/...— fetched run directories
GUI Usage
For a more user-friendly experience, you can use the web-based GUI:
slurmster --config config.yaml --user myuser --host myhost gui
Additional GUI options:
--gui-port 8000: Set the HTTP port (default: 8000)--gui-bind 0.0.0.0: Set the bind interface (default: 0.0.0.0)--no-browser: Don't automatically open browser
The GUI provides:
Configuration Management:
- View and edit your current configuration
- See resolved placeholders and SLURM directives
- Modify files to push/fetch and run commands
Job Submission:
- Submit single jobs with custom parameters
- Submit grid jobs with parameter combinations
- Real-time parameter validation
Job Monitoring:
- View all jobs with their current status
- Monitor and browse job outputs in real-time
- Access job logs directly in the browser
Bulk Operations:
- Fetch all completed jobs at once
- Cancel multiple jobs
- Track job progress and completion status
The GUI automatically opens in your browser at http://localhost:8000 (or your specified port) and provides an intuitive interface for all slurmster functionality.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file slurmster-0.2.13.tar.gz.
File metadata
- Download URL: slurmster-0.2.13.tar.gz
- Upload date:
- Size: 33.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
669604c66e01f1ea2c81e45232527612403cc3c553e37dce69f39b4229aa00d9
|
|
| MD5 |
224d6cecd2cd1d6c72b664970aa41925
|
|
| BLAKE2b-256 |
1952dbf105ecfe336a760d39234785a4995c92cb2ac2e847c53860a60fd21fad
|
Provenance
The following attestation bundles were made for slurmster-0.2.13.tar.gz:
Publisher:
python-publish.yml on dyigitpolat/slurmster
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slurmster-0.2.13.tar.gz -
Subject digest:
669604c66e01f1ea2c81e45232527612403cc3c553e37dce69f39b4229aa00d9 - Sigstore transparency entry: 352304264
- Sigstore integration time:
-
Permalink:
dyigitpolat/slurmster@c82b39e672bc00e00668fa276d8a5c6b9c808f3f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/dyigitpolat
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@c82b39e672bc00e00668fa276d8a5c6b9c808f3f -
Trigger Event:
push
-
Statement type:
File details
Details for the file slurmster-0.2.13-py3-none-any.whl.
File metadata
- Download URL: slurmster-0.2.13-py3-none-any.whl
- Upload date:
- Size: 38.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58f8c07d2a31088288635fb9951e54eee246d57592a829a79a2effe625320f90
|
|
| MD5 |
b92c9b5ee78c0af624a13328ce841617
|
|
| BLAKE2b-256 |
a96caaba771da7f1016079d7401ed244c235b2e6f9295b46d466878b012474f3
|
Provenance
The following attestation bundles were made for slurmster-0.2.13-py3-none-any.whl:
Publisher:
python-publish.yml on dyigitpolat/slurmster
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slurmster-0.2.13-py3-none-any.whl -
Subject digest:
58f8c07d2a31088288635fb9951e54eee246d57592a829a79a2effe625320f90 - Sigstore transparency entry: 352304297
- Sigstore integration time:
-
Permalink:
dyigitpolat/slurmster@c82b39e672bc00e00668fa276d8a5c6b9c808f3f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/dyigitpolat
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@c82b39e672bc00e00668fa276d8a5c6b9c808f3f -
Trigger Event:
push
-
Statement type: