AI Infra Interviews logo

Ninety percent allocated and thirty percent used is the normal failure

A GPU is handed out whole, so a cluster runs out of placeable capacity long before it runs out of devices. Allocation and utilisation measure different things, the gap between them is fragmentation, and it is the largest recoverable cost most fleets have.

14 MIN

TL;DR: Allocation says a device has an owner. Utilisation says work is happening on it. The gap is fragmentation plus idle holders, and on a busy cluster it is routinely tens of percent of the fleet. Recovering it is usually cheaper than buying more hardware, and it is a scheduling problem rather than a hardware one.

Where you are. First lesson of the fleet course. It opens on the measurement that most often triggers the question you were hired to answer: we bought all this and it is not being used.

Two numbers that are both true

Allocation is the fraction of devices assigned to a workload. Your scheduler reports it, and it is what capacity planning tends to track.

Utilisation is the fraction actually doing work. Different source, different meaning.

A fleet at 90% allocated and 30% utilised is not a paradox and it is not a broken metric. It is four things happening at once, and they have different fixes.

CauseWhat it looks likeWho fixes it
FragmentationFree devices exist but not where a job needs themThe scheduler and the placement policy
Idle holdersAn allocation with nothing running: a notebook left open, a job waiting on dataPolicy: idle reclaim, quotas with teeth
Inefficient workA job holding devices and using them badlyThe job's owner, not you
Reserved headroomCapacity deliberately held for failures or burstsNobody: this is correct and should be labelled

Reporting one number invites the wrong fix. "Utilisation is 30%, buy fewer GPUs" and "allocation is 90%, buy more GPUs" are both derivable from the same fleet, and both are wrong.

Why indivisibility makes fragmentation dominant

Your orchestrator was built for resources it can slice. A container asking for a fraction of a core gets it, and a node with a little of everything left can host something small.

A device is handed out whole. A node with one free device out of eight cannot host a job wanting two. That single property turns capacity into a packing problem, and packing problems waste space.

32 nodes, 8 devices each = 256 devices

  jobs currently placed: a mix of 1, 2 and 4-device jobs
  free devices: 40           15.6% of the fleet is free
  but they sit as: 14 nodes with 1 free, 9 nodes with 2 free, 2 nodes with 4 free

  a job needing 8 devices on one node: PLACEABLE NOWHERE
  a job needing 4: two places
  a job needing 2: eleven places

  free capacity 15.6%, placeable capacity for the job you actually have: 0%

The fleet has plenty of room and none of it is the right shape. Free capacity and placeable capacity are different quantities, and only the second one matters to the job at the front of the queue.

This gets worse over time without intervention. Long jobs outlive short ones, so the holes left behind are increasingly scattered, and a cluster that started tidy becomes a cluster where only small jobs fit. That is the same shape as memory fragmentation and it has the same remedies.

What actually recovers it

Pack deliberately. Placing a job on the fullest node that fits leaves whole nodes free for large jobs. The opposite instinct, spreading for thermal or reliability reasons, produces exactly the scattered-hole pattern above. Both are defensible and you have to choose.

Reserve shapes. If large jobs matter, keep some nodes clear of small ones rather than hoping the packing works out. A pool that only accepts jobs above a size is crude and effective.

Reclaim idle holders. An allocation with no work on it for some period is capacity you already own. This is a policy question and the technical part is easy; the hard part is agreeing the period and what happens to somebody's session.

Drain and defragment. Move small jobs off partially-used nodes to consolidate free devices. Expensive, since it means killing or migrating work, and worth doing when the fleet has become unable to place its most important jobs.

Share the device, where isolation allows. Partitioning mechanisms let more than one workload occupy a device with varying guarantees, which changes the granularity of the packing problem. Not a default: it is a decision about isolation.

SAME FREE CAPACITY, DIFFERENT PLACEABLE CAPACITY scattered node A node B node C 4 free devices across three nodes. A job needing 4 on one node: nowhere. packed node A node B node C The same 4 free devices, adjacent. The job places immediately. Both clusters report identical free capacity. Only one can run the job at the front of the queue, which is why a single utilisation number cannot tell you whether you need more hardware. Fragmentation grows over time on its own: long jobs outlive short ones and leave scattered holes.

What to report instead of one number

Four numbers, because the four causes have four owners:

  • Allocated fraction, which is what the scheduler assigned
  • Utilised fraction, which is what the devices report doing
  • Placeable capacity for the queue, meaning how many of the waiting jobs could be placed right now, which is the number that predicts complaints
  • Reserved fraction, labelled, so nobody counts deliberate headroom as waste

The third is the one almost nobody has and the one that turns "we need more GPUs" into a checkable claim. If the largest waiting job cannot be placed while 15% of the fleet is free, the problem is shape, not size, and buying hardware is the expensive way to fix a packing policy.

Do this before moving on

For a cluster you can picture, work out the placeable capacity for three job sizes: one device, four devices, and a full node. Use a plausible scatter of free devices rather than assuming they are consolidated.

Then say which of the four causes dominates your gap between allocation and utilisation. Most people find they cannot say, because they have two of the four numbers, and finding that out is the useful outcome.

Go deeper

Key takeaways

  • Allocation and utilisation measure different things and the gap has four distinct causes with four different owners.
  • A device is indivisible, so capacity becomes a packing problem and packing wastes space.
  • Free capacity and placeable capacity are different quantities; only the second matters to the job at the front of the queue.
  • Fragmentation worsens on its own, because long jobs outlive short ones and leave scattered holes.
  • Report four numbers, and treat "we need more GPUs" as a claim to check against placeable capacity first.

Check yourself

Answer before you look. Recalling it is what makes it stick; recognising it does not.

  1. 1A fleet reports 90% allocated and 30% utilised. What is the correct first response?

  2. 2Why do free capacity and placeable capacity diverge, and which one predicts complaints?

  3. 3Why does fragmentation get worse over time even with no change in workload mix?

Sign in to track which lessons you have finished.