Blogs

Where GPU waste hides on Kubernetes

GPUs are the most expensive resource most teams run, and the hardest to account for. On Kubernetes, where pods share GPUs, standard tooling can tell you a GPU is busy but not which workload is making it busy. That gap is where GPU waste on Kubernetes hides.

In the FinOps Foundation’s 2026 survey of 1,192 practitioners managing $83B+ in cloud spend, 98% of teams said they now manage AI spend—up from 31% two years earlier. Granular monitoring of that spend, including GPU utilization, was the number one capability practitioners said their tooling doesn’t have.  

For environments where multiple pods are sharing a GPU, the tooling required is essentially non existent. Today’s tools give each pod the same number, so if you have three pods sharing a GPU, all three look like they are using the whole GPU. Add it up and the GPU reads as 300% utilized, which tells you nothing about what any single workload is actually using.  

Why device-level GPU tooling can’t see it 

NVIDIA’s DCGM reports utilization and memory per physical device, not per workload. On a GPU dedicated to a single pod, that’s fine, but the moment it’s shared, every pod on it inherits the same device-level number. With many pods on one device you can’t see what any one of them is using. 

StormForge GPU Device Activity panel showing an NVIDIA H100 at 28 percent GPU utilization and 14 percent tensor core utilization, with a note that metrics reflect total activity across the entire device.
Device-level GPU metrics for one workload. The panel reports total activity for the whole H100, not this workload’s share of it.

Getting a true per-workload number means going a level deeper: reading GPU state per process, mapping those processes back to pods, and reconciling that against what Kubernetes allocated. Existing tooling stops at a device-level dashboard. It never answers the question you actually have: what each workload is using, and where capacity is going to waste. 

What teams do today, and why it doesn’t hold 

Most teams have at least basic visibility into GPU usage, but it’s rarely enough to feel confident about reducing waste. They usually settle on three simple practices: 

  • nvidia-smi spot checks. Useful for one node in the moment, but gone the second you close the terminal. There is no attribution across a fleet and no history. 
  • Per-node or per-device dashboards. They show that a GPU is busy, not which of the ten pods on it made it busy. 
  • Namespace tagging and spreadsheets. Where most teams end up: hand-mapping pods to owners and estimating shares. It breaks the moment workloads move or scale, which on Kubernetes is constant. 

The pattern underneath all three is the same. They infer per-workload use from device-level data, and inference is not measurement. In a small-scale environment you can eyeball it. But in a real environment, with dozens of pods sharing a GPU, the guessing stops working, and that’s when the GPU bill is largest. 

What per-workload GPU visibility takes 

StormForge runs a lightweight agent on GPU nodes. It reads GPU use and memory per workload, even on time-sliced GPUs where the standard exporter can’t, and maps it back to the pods actually running. You get an accurate per-workload view of GPU use and you can see where it sits idle or underused. 

It’s an extension of the StormForge agent and requires no DCGM setup to stand up. Just enable the new Node Agent and per-workload GPU use shows up in StormForge within minutes, alongside the rest of your Kubernetes infrastructure. 

Want to see it on your own cluster? Request early access.

What you can do once you can see it 

Seeing the waste is only useful if it leads to a decision. Say you find a training job holding a full eight-GPU node at a fraction of its capacity while smaller jobs queue for hardware. StormForge surfaces that, then recommends a better-fit node type, for example moving that workload onto a four-GPU node.  

You can also see GPU cost broken down by cluster, namespace, and workload, so you can tell which teams are driving the most waste.  

Early Access

See per-workload GPU use on your own cluster

Enable the StormForge Node Agent and per-workload GPU use shows up within minutes.

Request early access

grid pattern
Sign up for our newsletter

Exclusive insights and strategies for cloud pros. Delivered straight to your inbox.


AUTHOR
Yasmin Rajabi
Yasmin Rajabi is the Chief Operating Officer at CloudBolt Software. She is a recognized leader in the FinOps and Kubernetes communities, and her background as an engineer, product leader, and operator gives her a...
  Learn more

Related Blogs

 
thumbnail
The Technical Guide to Kubernetes Rightsizing from LearnKube

The Technical Guide to Kubernetes Rightsizing from LearnKube is a comprehensive, hands-on guide to safely optimizing CPU and memory across…

 
thumbnail
Kubernetes GPU optimization demo

See how StormForge brings GPU optimization to Kubernetes with workload-level visibility. In this video demo, you’ll see how StormForge helps…

 
thumbnail
VMware Aria alternative for VCF 9: Aria vs CMP – Part 2

Part 2 of 3. Read Part 1: why companies are making the move | Read Part 3: testing VMware alternatives…