slurmpast
How your finished Slurm jobs actually ran — and what the next one should ask for.
Recorded against slurmpast --demo, which is why the header reads
synthetic demo data throughout. Regenerate with
pip install -e ".[assets]" && python tools/demo_gif.py.
pip install slurmpast
slurmpast # dashboard, last 7 days
slurmpast --sizing # what to request next time, per workload
slurmpast 51170455 # one job, every field Slurm recorded
slurmpast --demo # no Slurm to hand? synthetic cluster
slurmpast -u alice # someone else's history (`-u alice,bob` for several)
slurmpast --all-users # every account on the cluster
sp # short alias
enter open · q back · digits jump to a row · / search · f filter · s sort ·
n nodes · p patterns · y copy · ? help
Before the run, slurmate
builds the request. During it,
slurmwatch watches.
After it, slurmpast tells you what happened and what to change.
The same screens as stills
Regenerate with python tools/screenshots.py.
What to request next time
Over-requesting reserves capacity nobody else can use; under-requesting kills the run. Your own history settles both.
argonne35-pretrain test · 101 runs
--time raise to 10:00:00 (from 08:05:00)
longest of 90 completed runs took 07:58:23.
--mem already about right
--cpus-per-task already about right
#SBATCH --time=10:00:00
That workload was running on a seven-minute margin. With fewer than three usable runs it says not enough evidence instead of guessing.
The figure it measures you against — 08:05:00 above — is the limit your last
run asked for, not the largest in the window. Those differ the moment you tune a
request, and the window is deliberately built to span that tuning: grouping ignores
resource magnitudes, so that raising --mem does not fork the history you are
trying to learn from.
One job
Time, CPU and memory against the limits you asked for, then every field Slurm recorded, the log excerpts if the files are still on disk, and the findings.
Failure, across runs
seff describes one job and slurmwatch one live run. Neither can say "you
submitted this 115 times and it died 99 times." Runs group into workloads, so a
repeated failure — and the node it keeps landing on — is visible at a glance, with
a ready-to-paste --exclude.
That --exclude is offered only when a node is worse than the rest after
accounting for every other node the table tested. Without that correction a large
enough history always produces a culprit: given twenty nodes with one identical
true failure rate, testing each interval on its own named an innocent node more
than half the time.
Correct on any cluster
sacct misreports in ways that are easy to miss: the requested memory is often
blank, limits are recorded per allocation but enforced per node, and a job left in
RUNNING inflates every total. slurmpast handles those, adapts to how your
Slurm version spells things, and prints n/a rather than 0 for anything it
cannot read.
Every trap, and the 85 fields it extracts →
As a library
The analysis modules import no third-party package.
from slurmpast import History, Sacct
from slurmpast.sizing import recommend
history = History(Sacct().history(user="you", since="now-30days"))
for advice in recommend(history.groups[0].jobs):
print(advice.flag, advice.verdict, advice.suggestion)
--json emits everything — 99 values per job, plus 40 for every step.
Slurm 20.11.8 · Python 3.10–3.13 · Textual 0.86–8.2 · MIT
Release files for slurmpast 0.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| slurmpast-0.8.0.tar.gz | 1.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| slurmpast-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.7 MB
Release files / slurmpast-0.8.0.tar.gz
| Download URL | slurmpast-0.8.0.tar.gz |
|---|---|
| Size | 1.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
12991d3e05d4b2ca4267ca09712020c1e91f86a8604362364ec63ed6dcf93a3e
|
|
BLAKE2b-256 checksum How to use checksums |
964cf9ea746ebf364d4bbc2b749f686eafb9bc1cfba8f3553411c8447f150fc2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 24, 2026.
Transparency logRelease files / slurmpast-0.8.0-py3-none-any.whl
| Download URL | slurmpast-0.8.0-py3-none-any.whl |
|---|---|
| Size | 223.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d7c8bd8e3a1db6c12f79cd8725b8b4702c3255aed5d2991d233347ddd3eef1a5
|
|
BLAKE2b-256 checksum How to use checksums |
48bef43c9c4ff6051fd1478c4d3bd11564cbbd1efa02d19ff313c0c846630d8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 24, 2026.
Transparency log