🌳 JRun
Submit & track job-trees on SLURM with one command.
stateDiagram-v2
state "✅ 6867196<br/><code>python train.py --lr 0.001 --mo…</code>" as S6867196
state "✅ 6867197<br/><code>python train.py --lr 0.001 --mo…</code>" as S6867197
state "✅ 6867198<br/><code>python train.py --lr 0.01 --mod…</code>" as S6867198
state "✅ 6867199<br/><code>python train.py --lr 0.01 --mod…</code>" as S6867199
state "✅ 6867200<br/><code>python train.py --lr 0.1 --mode…</code>" as S6867200
state "✅ 6867201<br/><code>python train.py --lr 0.1 --mode…</code>" as S6867201
state "✅ 6867202<br/><code>python find_best.py --metric ev…</code>" as S6867202
state "⏸️ 6867203<br/><code>python test.py --model best_mod…</code>" as S6867203
state "⏸️ 6867204<br/><code>python create_report.py --resul…</code>" as S6867204
S6867196 --> S6867202
S6867197 --> S6867202
S6867198 --> S6867202
S6867199 --> S6867202
S6867200 --> S6867202
S6867201 --> S6867202
S6867196 --> S6867203
S6867197 --> S6867203
S6867198 --> S6867203
S6867199 --> S6867203
S6867200 --> S6867203
S6867201 --> S6867203
S6867202 --> S6867203
S6867196 --> S6867204
S6867197 --> S6867204
S6867198 --> S6867204
S6867199 --> S6867204
S6867200 --> S6867204
S6867201 --> S6867204
S6867202 --> S6867204
S6867203 --> S6867204
Installation
pip install -e . # editable install
Usage
# Submit a workflow from YAML file
jrun submit --file workflow.yaml
# Check job statuses
jrun status
# Submit a single job
jrun sbatch --cpus-per-task=4 --mem=16G --wrap="python train.py"
Quick start
Define a tree of jobs
# Define tree
group:
name: "test"
type: sequential
jobs:
- group:
type: parallel
jobs:
- job:
preamble: cpu
command: "echo 'python train.py'"
- job:
preamble: cpu
command: "echo 'python eval.py'"
- job:
preamble: cpu
command: "echo 'python make_report.py'"
# Define preambles
preambles:
cpu:
- "#!/bin/bash"
- "#SBATCH --cpus-per-task=4"
- "#SBATCH --mem=8G"
- "#SBATCH --output=slurm/slurm-%j.out"
- "#SBATCH --error=slurm/slurm-%j.err"
Submit tree and visuzlize
$ jrun submit --file path/to/job/tree.yaml
$ jrun viz # add `--mode mermaid` for mermaid diagram
Job Dependencies:
========================================
6866829 []: (COMPLETED): echo 'python train.py'
6866830 []: (COMPLETED): echo 'python eval.py'
6866831 []: (PENDING): echo 'python make_report.py' <- 6866829, 6866830
Workflow Types
Parameter Sweeps
group:
name: "sweep-example"
type: sweep
preamble: base
sweep:
lr: [0.001, 0.01, 0.1]
model: ["resnet", "vgg"]
sweep_template: "python train.py --lr {lr} --model {model}"
This creates 6 jobs (3 × 2 combinations) automatically.
Parallel Jobs
group:
name: "parallel-example"
type: parallel
jobs:
- job:
preamble: base
command: "python train_model_a.py"
- job:
preamble: base
command: "python train_model_b.py"
Link jobs with group ids
# Use `{group_id}` in commands to link jobs
group:
name: "main"
type: parallel
jobs:
- group:
type: sweep
preamble: gpu
sweep:
lr: [5e-4, 1e-4, 5e-5]
sweep_template: "python train.py lr {lr} --group_id {group_id}" # (e.g., aaa-bbb-ccc)
- job:
preamble: cpu
command: "python eval.py --group_id {group_id}" # (e.g., aaa-bbb)
🌳 JRun Features & Status
Current Features
- Submit job trees from YAML files (
jrun submit --file workflow.yaml) - Monitor job status with visualization (
jrun status,jrun viz) - Parameter sweeps and parallel job execution
- Job graph vizualization
- CLI filtering (
jrun status --filter status=COMPLETED) - Job retry (
jrun retry JOB_ID) - Job delete subgraph
- Web app
- Improve visual for loop group
- Improve dependency (make markovian)
- View job logs in browser
- Delete by node
- Add sweep_idx
Planned Features
- Bugfix: retry not auto updating old job id to new id in deps table
- Update afterany (allow some parent group failures)
- Update node color code (mixed with pending should be blue/active)
Requirements
- Python 3.6+
- SLURM environment
- PyYAML >= 6.0
- tabulate >= 0.9.0
Metadata
Release files for agora 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| agora-1.0.1.tar.gz | 17.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agora-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.4 kB
Release files / agora-1.0.1.tar.gz
| Download URL | agora-1.0.1.tar.gz |
|---|---|
| Size | 17.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fc186953a1a49703bf15e99424c3596417d17822eabe1f56c5c5e3f1643831f9
|
|
BLAKE2b-256 checksum How to use checksums |
4681433a1cd6b833d62b4458e493e32f8f5894b868dbaa0e0791f958b8fa3b32
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.6
|
Release files / agora-1.0.1-py3-none-any.whl
| Download URL | agora-1.0.1-py3-none-any.whl |
|---|---|
| Size | 19.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9e0d1e786e7f260f57ac1e2c9f87b58583e0ccbbcd8bfdeeb16d4a0f98871405
|
|
BLAKE2b-256 checksum How to use checksums |
93d536c059358ec0310c66f65f4bd4707150926cdced1828aec0b650f23ae83c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.6
|
Security for agora 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.