HPC · Cluster Efficiency

Why researchers over-request GPUs, and what to do about it.

Every HPC centre sends the same message asking people to request resources accurately. Nothing changes, and six months later they send it again. The message fails for a reason worth understanding — and the fixes that work change defaults and visibility, not policy.

By Ashutosh Dubey, Co-founder & CTO·July 21, 2026·7 min read
The short version
  • Over-requesting is rational, not careless. Under-request and the job dies, losing days of work. Over-request and nothing visible happens. Given that payoff, padding is the correct individual decision.
  • The queue pays the price. Inflated time limits degrade Slurm's backfill scheduling for everyone, invisibly.
  • Guidance doesn't change behaviour. Defaults and visibility do. Five interventions that actually shift how people request resources.

Every HPC centre has a version of the same conversation. Someone in operations notices that jobs are reserving far more than they use. They send a message asking people to be more accurate with their requests. Nothing changes. Six months later they send it again.

The message fails for a reason worth understanding, because it explains why most attempts at this go nowhere.

Over-requesting is not a knowledge problem. Most researchers know roughly what their jobs need. They pad anyway, and given how the incentives are arranged, they are right to.

The asymmetry that drives everything

Consider the two ways a resource request can be wrong.

Request too little, and the job dies. Out of memory nine hours into a twelve-hour run, or terminated at the time limit just before the final checkpoint writes. Days of work gone. The researcher resubmits, waits in the queue again, and explains the delay to a supervisor or a funder.

Request too much, and nothing happens. The job runs. The results arrive. Nobody sends a message. The cost lands on a shared resource that no individual is accountable for, spread thinly across everyone else as slightly longer queue times.

"Anyone who has lost three days to a memory failure will over-request for the rest of their career, and no amount of internal communication changes that, because the communication does not change the payoff."

Anyone who has looked at container resource requests in Kubernetes will recognise this exactly. Same mechanism, different vocabulary.

What it costs, beyond the obvious

Two effects. The second is worse than most people assume.

Hardware held and unused. A job holding eight accelerators while genuinely using two occupies six devices that could have run other work. Multiply that across a queue and the effective capacity of the cluster drops well below what was purchased.

Degraded scheduling for everyone else. This is the expensive one and it is almost never discussed.

Batch schedulers fill gaps by starting smaller jobs when they can finish before a larger reserved job is due to begin. That calculation depends on how long each job says it will run. Slurm’s own documentation states the point plainly: because the expected start time of pending jobs depends on when running jobs are expected to complete, reasonably accurate time limits are important for backfill scheduling to work well.

So a job that reserves twelve hours and finishes in four does not merely waste eight hours of hardware. It caused the scheduler to make eight hours of decisions based on information that was wrong, keeping other jobs out of gaps they would have fitted into. Time padding degrades throughput across the entire queue, and it does so invisibly.

Why nobody notices

The instrumentation most centres run answers a different question from the one that matters.

Schedulers record what was allocated. They know a job asked for eight accelerators and held them for twelve hours, and they report that as utilisation. What they cannot see is what the hardware did inside that window. A device reserved and idle looks identical to a device reserved and saturated.

Getting the real picture means combining scheduler records with hardware telemetry, which is a deliberate exercise most centres have never set up. Neither data source answers the question alone.

NVIDIA’s engineering teams did exactly this on their internal research clusters, defining a specific measure of GPU idle waste and tracking it rather than relying on general dashboards. They reported bringing GPU waste down from roughly 5.5% to about 1%.

That is one organisation’s internal result, not an industry benchmark. What travels is the approach. They measured a clear baseline, ranked workloads by how much waste each one caused, and worked directly with the teams responsible for the largest.

Five things that actually change behaviour

Since asking people to be more accurate does not work, the useful interventions change either what happens by default or what people can see without effort.

Show researchers their own numbers

Most users have never seen a comparison between what they requested and what they used. Not because they are uninterested, but because producing it takes effort and nobody has done it for them.

A monthly summary sent to each user, showing requested against actual consumption for their jobs, shifts behaviour more reliably than any policy document. People are not defending their padding. They have simply never been shown it.

Set defaults from observed data

If typical memory consumption on a partition sits well below the default allocation, lower the default. Researchers who genuinely need more will ask for it. The ones who were accepting whatever the default happened to be stop consuming capacity they never needed.

Defaults do more work than policies, because they require nobody to do anything.

Match hardware to workload

In a mixed cluster, a request that does not specify what kind of accelerator it needs can land a small inference task on your most capable hardware, while a large training job queues behind it.

Configuring the scheduler so jobs can request appropriate hardware, and steering light workloads away from premium devices by default, recovers meaningful capacity in any centre running more than one generation of hardware.

Separate short jobs from long ones

Short and long jobs interact badly in a shared queue. Separating them, with tighter time limits on the short queue, gives the scheduler far more room to fill gaps efficiently.

It also reduces the incentive to pad, because a job that fits the short queue gets scheduled sooner. That rewards accurate estimation rather than penalising inaccuracy, which is the right way round.

Partition devices where workloads are genuinely small

Modern accelerators can be divided into smaller isolated instances, each with a dedicated slice of memory and compute. For inference, development sessions, notebooks and data preparation, this turns one device serving one small job into several.

It suits clusters with a clear population of small jobs, and adds unhelpful complexity to clusters that mostly run large training. Look at the actual distribution of job sizes before deciding.

What good sizing looks like

Sizing well means working from observed behaviour rather than from peaks, averages, or the memory of one bad experience.

Memory should be set from the observed high-water mark across recent runs of the same workload, plus a deliberate margin. Not the largest value ever recorded, and not the mean.

Accelerator count should reflect what the job can actually keep busy. A four-device job where one is saturated and three sit idle usually means the workload is not parallelising the way its author assumed. That is worth knowing regardless of cost.

Time limits should come from observed runtime plus a margin, and are best handled through partition defaults rather than left to individual judgement. Padding here is cheap for one person and expensive for everyone.

The goal, stated honestly

The goal is not minimum allocation. A cluster pushed toward zero headroom fails jobs, and losing user trust costs far more than any efficiency gain is worth. The goal is removing padding that exists because nobody measured, while keeping the headroom workloads genuinely need.

Where this usually ends up

Centres that run this exercise tend to find the same shape of answer. A minority of workloads account for most of the over-requesting, and they are usually large recurring jobs whose resource specification was written once, years ago, and copied ever since.

That is good news. It means this is tractable without asking everybody to change how they work. Revisit the twenty largest recurring workloads and you will have recovered most of the available capacity.

And because the hardware is already bought and already drawing power, recovered capacity does not reduce a bill. It becomes additional research output on the same installed base.

About OptOps. OptOps is the optimization layer for enterprise infrastructure. The same engine works across Kubernetes in the cloud and HPC and GPU compute on premise, learning how each workload actually behaves and producing sized recommendations rather than applying static rules. Read-only by default.

References

Show every researcher their own numbers

OptOps produces the requested-against-consumed comparison automatically, per job and per user, from telemetry you already generate. Read-only by default. See what your twenty largest recurring workloads are actually holding.

Book a demo Get a free Cluster Efficiency Assessment

Frequently asked questions

Why do researchers over-request GPUs?

Because the consequences are asymmetric. A job that under-requests dies and destroys hours or days of work, while a job that over-requests simply runs with no visible penalty for the person who submitted it. The cost is absorbed by the shared queue rather than by the individual, so padding stays rational even when users understand its effect.

How do you reduce GPU over-allocation in a shared cluster?

By changing defaults and visibility rather than by issuing guidance. Showing researchers a regular comparison of what they requested against what they used, setting partition defaults from observed consumption, separating short jobs from long ones, and matching workloads to appropriate hardware all shift behaviour. Guidance alone does not, because it leaves the underlying incentives unchanged.

Does over-requesting time affect other users?

Yes, more than most people expect. Slurm’s documentation notes that backfill scheduling depends on reasonably accurate time limits, since the expected start time of pending jobs is calculated from when running jobs are expected to finish. Inflated time limits cause the scheduler to leave gaps unfilled, reducing throughput across the whole queue rather than only for the padded job.

Why do cluster utilisation reports look healthy when there is waste?

Because they usually measure allocation rather than consumption. A scheduler records that a job reserved eight devices for twelve hours and reports that as utilisation, with no visibility into what the hardware did during that window. A reserved idle device is indistinguishable from a reserved busy one without separate hardware telemetry.

What is the fastest way to find over-allocation?

Look at the largest recurring workloads first, ranked by total hardware hours rather than by percentage inefficiency. Waste concentrates in a small number of big jobs whose resource specifications were set once and never revisited. Fixing those recovers most of the available capacity without changing how anyone else works.

Does improving cluster efficiency reduce costs?

On owned hardware it usually does not reduce spending, because the equipment is already purchased and depreciating. The return appears as additional capacity on the same installed base: more jobs served, shorter queue waits, and procurement cycles that can be deferred.

Calculate ROI