See what your GPUs are actually doing.

Are they busy? Are they healthy? Are they worth what you pay? Union shows GPU utilization, health and cost, from the whole fleet down to a single GPU in a single run.

The GPUs view, shown with sample data.

Allocated isn’t the same as working.

To your scheduler, these three GPUs look identical. One is throttling at 86 °C, one just threw Xid 79 and one is mostly idle. Each costs the same per hour.

Meta’s Llama 3 team logged 419 unexpected interruptions in 54 days of training on up to 16,000 GPUs. GPU issues caused more than half.

Source: The Llama 3 Herd of Models

What the scheduler sees
H100 80GBAllocated
gpu-h100-w3x7k, GPU 2$4.80 / hr
Projectllm-pretrain
What Union sees
Temperature86 °C
SM clock Thermal throttling1,410 MHz
Temperature, last hour
What the scheduler sees
H100 80GBAllocated
gpu-h100-r8m4t, GPU 6$4.80 / hr
Projectfine-tuning
What Union sees
Xid 79GPU fault
GPU fell off the bus
GPU utilization, last hour
What the scheduler sees
H100 80GBAllocated
gpu-h100-5n2qd, GPU 4$4.80 / hr
Projectresearch-sandbox
What Union sees
GPU utilization12%
GPU utilization, last hour

Busy or just allocated?

Union tracks utilization, tensor activity, clocks and temperature for each GPU in a run. On a multi-node job, every node shares the same charts. When one node throttles, the other three spend the rest of the run waiting on it, and the clocks show which one.

train.pyAPI reference ↗
import flyte
from flyte.clustered import ClusteredTaskEnvironment

env = ClusteredTaskEnvironment(
    name="llama3-pretrain",
    resources=flyte.Resources(gpu="H100:8"),
    replicas=4,
    nproc_per_node=8,
)
llama3-70b-pretrain/train4 pods, H100 80GB x 8 each

Clocks

Clock

Tensor Core Activity

Percent

Temperature

Temp

Click a pod to show only its GPUs in all three charts. Click it again to show all pods.

Per-pod GPU charts for a four-node run, shown with sample data.

Healthy or failing your runs?

A throttling node slows a run. A failing one ends it. When a GPU throws a hardware Xid, Union cordons its node and moves your run to a healthy GPU, without using up a retry. Nothing to change in your code.

Know which GPU
broke, and why.

A health agent on every GPU node reads NVIDIA Xid errors and separates hardware faults from errors in your code.

One bad GPU
stays one bad GPU.

Union cordons the node as soon as the fault shows up. Jobs on healthy GPUs finish, and your team decides when the node comes back. Quarantine pulls only a few nodes at a time, so a bad driver update can’t take down your cluster.

Hardware faults don’t
eat your retries.

The fault is recorded as a system error, so your retry budget stays intact, and the next attempt lands on a healthy GPU. It also covers distributed PyTorch jobs and Ray clusters started for a run.

Auto-repair fixes the node.
Union also saves the run.

Cloud node auto-repair

  • Replaces an unhealthy node
  • Your run still fails
  • The failure looks like your bug
  • Retries are spent

Union

  • Quarantines the node as soon as the fault shows up
  • Retries the run on a healthy GPU
  • Names the GPU and the fault
  • Hardware faults don’t count against retries

Worth it or wasted spend?

GPU-hours, utilization and unused spend for each project, run and task. The hours three nodes spent waiting on a hot one show up here as unused spend, and so does a sandbox that keeps its GPUs mostly idle.

All projects4 projects
Last 30 days
GPU cost by project over the last 30 days, sample data
ProjectCostUnusedGPU hoursGPU utilization
llm-pretrain$141,696$17,00429,52088%
fine-tuning$44,928$8,5369,36081%
evals$28,224$10,1615,88064%
research-sandbox$20,448$15,7454,26023%
Cost by project, shown with sample data.

Use a slice,
not the whole GPU.

Jobs in research-sandbox keep their GPUs about a quarter busy. Give them a MIG slice in one line, and the rest of each GPU goes back to the pool.

tasks.pyMIG docs ↗
import flyte

env = flyte.TaskEnvironment(
    "research-sandbox",
    resources=flyte.Resources(
        gpu=flyte.GPU("H100", 1, partition="1g.10gb"),
    ),
)
An H100 80GB split into seven 1g.10gb slices, three in use.

Get more from every GPU.

Start free. Your code stays the same.

Get Started

Try for free

Run metrics, multi-node charts and MIG requests work today. The GPUs view, cost by project and fault recovery are coming soon.