Skip to main content

slurmpast

How your finished Slurm jobs actually ran — and what the next one should ask for.

PyPI CI Python 3.10+ 1842 tests MIT License

The slurmpast dashboard driven end to end: finished jobs rolled into workloads ranked by resource use, filtered to the ones that went wrong, into a workload that timed out 14 times at an unchanged --time, into one run's post-mortem showing 101% of the wall clock against 0% CPU and the finding that says it hung rather than ran out of time, then the cross-run patterns and the node reliability table naming the node that ate them.

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

Overview: finished jobs rolled into workloads, ranked by resource use, each with an outcome ribbon, failure count and last run.

One workload: every run of it, with the repeat-failure warning and the sizing advice above the table.

Cross-run patterns: a workload that failed repeatedly at an unchanged time limit, and a memory request being hand-searched.

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

One finished job: time, CPU and memory against their limits, then every field Slurm recorded.

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

Per-node failure rates with a ready-to-paste --exclude.

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.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for slurmpast 0.8.2
File Size Uploaded
slurmpast-0.8.2.tar.gz 1.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for slurmpast 0.8.2
File Interpreter ABI Platform
slurmpast-0.8.2-py3-none-any.whl Python 3 none any Details

Total release size: 1.8 MB

Release files / slurmpast-0.8.2.tar.gz

Download URL slurmpast-0.8.2.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
481e1cd11450889595b95e2798396e32362d73d66b21d32032a02f90e58f2caa
BLAKE2b-256 checksum
How to use checksums
c65350031dd891f220e142023f1ca07a9a2f7f8127038196b7319189576805d1
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 25, 2026.

Transparency log

Release files / slurmpast-0.8.2-py3-none-any.whl

Download URL slurmpast-0.8.2-py3-none-any.whl
Size 232.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d69b1543360adaa96b9a1deab81475ddf9a998cc70eb74ea30674c058748e14f
BLAKE2b-256 checksum
How to use checksums
3ead19fa6bd73a49fb40538e60b11d862ed70f90c075dcf6665725b9a12388e6
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 25, 2026.

Transparency log

Release history Release notifications | RSS feed

0.9.0

2 release files

0.8.3

2 release files

This release

0.8.2 This release

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page