WattOps
For teams that run GPU servers and clusters

Stop paying for GPUs that do nothing.

WattOps shows, live, what every GPU, job and team draws and costs, finds the GPUs that are on but idle and what they cost you, and writes the energy and carbon reports your finance, sustainability and grant offices ask for. Measured from the hardware, not guessed.

Book a demo
  • Slurm, Kubernetes, NVIDIA, AMD
  • Running in minutes, no Grafana stack
  • Your code never leaves your servers
  • 4–6 week pilot on your own cluster
Fleet power now—Simulated fleet

What brings you here?

Three things it pays for

Idle GPUs · Max

See every idle GPU, and what it burns

Every GPU that is switched on or held by a job but doing nothing, live: how many, for how long, and the power and money it burns at your own price per kWh.

“6 GPUs idle now · 1,020 idle GPU-hours this month” How Live works →
Cost per job · Pro and Max

Charge every job, lab and team its share

Energy, cost and CO₂ for each Slurm job, Kubernetes pod and user, so shared clusters can show back or charge back what each group used.

“chem-lab: 1,240 GPU-hours · 496 kWh” See an example →
Reports · Pro and Max

Reports the auditors accept

PDF energy and carbon reports per project, with the method, the inputs and a report ID anyone can reproduce: for CSRD, Scope 2, the EU AI Act and grant offices.

“Q3 energy report · ID 7F2A-…” What is in a report →
Max

Your whole fleet, second by second

Run joules agent on each GPU server or Slurm node, and the Live page shows what the fleet draws right now, what it costs by the hour, and which GPUs burn power doing nothing. A stock ticker, for electricity.

Each machine reports every 5 seconds. Heartbeats never count against your API calls.

  • Power and cost right nowthe whole fleet and every machine, every 5 seconds, priced at your own rate
  • Idle GPUs, in dollarswhich GPUs are on but doing nothing, and what that costs by the hour
  • Every running jobSlurm jobs, Kubernetes pods, containers and users, each with its share of the power
  • Honest gapsa machine that sleeps or goes offline shows as a gap, never as a made-up line
Cost per job

Fair energy and cost for every job, user and lab

On a shared cluster, everyone pays for the power and nobody knows who used it. joules agent runs on each node and splits each GPU’s and CPU’s measured energy between the jobs on it: Slurm jobs, Kubernetes pods, containers or users.

Group it by account, project or user, see it on the Tracking page, export it, and send each group its share every month. No Prometheus or Grafana stack to run.

Universities and public research: 50% off.

Cluster · SeptemberExample
AccountGPU-hoursEnergyCostCO₂
chem-lab1,240496 kWh$59.5263 kg
nlp-group860352 kWh$42.2445 kg
bio-imaging410151 kWh$18.1219 kg
held but idle1,020173 kWh$20.7622 kg

Illustrative numbers, measured the way joules agent does on each node · electricity at $0.12 per kWh · 127 g CO₂ per kWh

Built for the people who pay for the power

Research computing

Universities and HPC centres

Charge each lab its measured share of the cluster’s power, find the idle GPUs, and hand the sustainability office and grant applications a report, without running your own Prometheus and Grafana stack.

50% off for universities and public research
GPU clouds and AI hosts

Operators of shared GPU fleets

See the whole fleet live, find the GPUs that are on but idle and what they cost, and give each project its measured energy, cost and carbon.

Start with a 4–6 week pilot on your own cluster
ML and platform teams

Teams that train and serve models

Know what each training run and each model really costs to run, get an alert when a change makes it use more, and report the energy to your customers and your sustainability team.

Free to start, Pro at $19 a month
Reports

Energy and carbon reports that hold up to an audit

Finance, sustainability and grant offices, and more and more regulators, ask how much energy your computing used. Pro and Max turn the measurements into a PDF per project or per month, with the method written out. For example, providers of general-purpose AI models must keep technical documentation that includes the model’s known or estimated energy consumption (AI Act, Article 53 and Annex XI). Where the energy is not known, Annex XI allows it to be estimated from the computational resources used. That is exactly what WattOps computes, with the method written out.

Pro reports are PDFs with the inputs, the derivation, the assumptions and a report ID. Anyone can check the ID by running the same inputs again. The same figures support Scope 2 carbon reporting (CSRD, GHG Protocol) and customer sustainability questionnaires.

WattOps is a calculation tool, not legal advice. Check your obligations with your own counsel.

  • Training compute6 × parameters × tokens, from your run’s numbers
  • Energyaccelerators, servers and facility (PUE), measured or estimated
  • Carbon and costyour grid’s intensity and your price per kWh
  • Audit traila report ID that the same inputs always reproduce

Running on your cluster this afternoon

1 · Install

One agent per node

Install joules and start joules agent on each GPU server or Slurm node, by hand, with your config tool, or as a Kubernetes DaemonSet. It reads the power meters about once a second, next to your jobs, not inside them.

sudo joules agent --track fleet
2 · See

Live fleet and cost per job

Within seconds the Live page shows every machine’s power and cost, the idle GPUs, and the jobs running now. Finished jobs land on Tracking with their energy, cost and CO₂.

#/live · #/track
3 · Act

Reports, alerts and savings

Turn idle GPUs off or reschedule them, send each lab its share, get an alert when a job uses far more than usual, and download the monthly report as a PDF.

Slack · Discord · webhook · PDF
Security and privacy

Your numbers, not your code

joules sends energy readings and the names of the jobs that used them. It never sends your code, prompts, command arguments or files, and nothing at all unless you ask it to.

Read the Privacy Policy and the Data Processing Agreement, or ask us anything.

  • Keys kept as fingerprintsan API key is shown once; we store only its SHA-256 fingerprint
  • Locked-down databasereachable only through server functions that check every caller; row-level security on every table
  • Encrypted in transitHTTPS everywhere; data stored in the United States (us-east-1)
  • Privacy law, in writingPIPEDA, BC PIPA and GDPR; a published DPA and sub-processor list

Pricing

Free
$0 forever
  • Training and inference calculator
  • joules CLI and the public leaderboard
  • Saved runs and side-by-side comparison
  • 100 API calls a month
Pro
$19 per month · cancel any time
  • Measured energy reports per project, as PDFs to support AI Act and carbon reporting
  • Energy alerts to Slack, Discord or any webhook
  • Team workspace for up to 10 people
  • 20,000 API calls a month, 120 a minute, 10 keys
Max · for GPU fleets
$8 per GPU a month · billed yearly
  • Everything in Pro
  • $500 a month minimum; $10 per GPU if billed monthly
  • Live: every machine's power, idle GPUs and running jobs, every 5 seconds
  • 1,000,000 API calls a month, 50 keys; heartbeats never count
  • Universities and public research: 50% off
  • Start with a 4–6 week pilot on your own cluster for $2,000, credited to your first year
Book a demo
Free for everyone

Free tools, on the house

The paid plans are for fleets. These are for anyone who trains or runs a model, free for good: a calculator, the joules command, an open leaderboard and an energy check for pull requests.

Calculator

Know the bill before you start

Enter the model size, the amount of data and your hardware, and see the electricity, cost and CO₂ of a training run before you pay for it.

6 × params × tokens → kWh → g CO₂
joules

Measure any command

Put joules in front of anything you run, like time, and get its real energy, cost and CO₂ from the hardware’s power meters.

joules -- python3 -c "sum(range(10**8))"
Checks

Catch energy creep in review

A GitHub Action measures your benchmark on every pull request and says when a change makes it use more energy than before.

joules ci --budget 10 -- python3 -c "sum(range(10**7))"

One command. A real measurement.

Put joules in front of anything you run, like time. It reads the power meters of the GPU and CPU while the command runs and prints the energy, the cost and the CO₂. This is real output from a MacBook Air.

  • Measuredfrom the hardware’s power meters, not a spec sheet
  • Every machineMac, Linux and GPU servers measured; on Windows the GPU is measured and the CPU estimated
  • Openthe joules tool is open source; every formula is shown
real output · MacBook Air, every core busy
$ joules -- sh -c 'for i in $(seq $(getconf _NPROCESSORS_ONLN)); do python3 -c "x=0
for i in range(100000000): x+=i" & done; wait'
joules · 15.45 s · exit 0
  Apple SoC (CPU + GPU + ANE)   71.5 J   4.6 W avg
  total  71.5 J = 19.9 mWh
  cost <0.0001 · CO₂ 0.00735 g at 370 g/kWh

An open leaderboard of real joules per token

Spec sheets say watts, and measured per-token figures for the card on your desk are hard to find. Run one command and your measurement joins the board: the median of everyone’s runs for each model and machine, with no names attached.

Which is cheaper per token: a 4090 at home or an H100 in the cloud? An 8B or a 70B quantised? Now you can look it up instead of guessing.

ModelHardwareJ / token

Loading the live board…

The physics underneath: the Landauer gap

2.87 × 10−21 J

The least energy physics allows for erasing one bit at room temperature: the Landauer limit, kBT ln 2.

Landauer, 1961 · at 300 K
13 billion×

How far above that limit a 3-billion-parameter model ran, per operation, on a MacBook Air. Measured with joules.

llama3.2 3B · M3 MacBook Air · 0.241 J per token
0.4%

The largest difference between our calculator and the published energy of GPT-3, BLOOM and Llama 3 70B.

Patterson et al. 2021 · Luccioni et al. 2022 · Meta

What’s new

Name

Landauer Gap is now WattOps

A name that is easy to say and says what it does: operations for the watts your GPUs burn. Your account, keys, runs and the joules command all stay the same.

joules 0.5.12

Live shows its gaps honestly

When a machine sleeps or goes offline, the Live graph now shades the gap and says why, and joules agent --keep-awake keeps a Mac awake while it measures.

Grids

46 data-centre locations

Carbon presets for every Google Cloud region’s grid, from N. Virginia to Singapore, plus Canada’s provinces, in the calculator, the API and joules.

Questions people ask

How accurate are the numbers?

joules reads the power meters built into the hardware: NVIDIA and AMD GPU sensors, Intel and AMD CPU energy counters (RAPL) and Apple silicon’s own power reporting. The calculator is within 0.4% of the published energy of GPT-3, BLOOM and Llama 3 70B. What is and is not included is written out on the Method page under “Accuracy and limits”.

Will it slow my jobs down?

No work runs inside your jobs. The agent reads the power counters about once a second, next to your workload, and the command wrapper only watches the command it starts.

What data leaves my machine?

Only what you ask for: energy, power, cost and carbon, the machine’s name, and the names and users of the jobs that used the power. Never code, prompts, command arguments, inline scripts or files.

Which hardware and schedulers does it support?

NVIDIA, AMD and Intel GPUs, Intel and AMD CPUs, and Apple silicon Macs. On Windows the GPU is measured and the CPU estimated. The agent knows Slurm jobs, Kubernetes pods, containers and users, and serves Prometheus metrics too.

Can I try it before paying?

Yes. The Free plan has the calculator, joules and the leaderboard for good. Pro is $19 a month and can be cancelled any time. For a fleet, Max starts with a 4–6 week pilot on your own cluster.

Who is behind WattOps?

PHENEX TECHNOLOGIES INC., a British Columbia corporation in Vancouver, Canada. WattOps was called Landauer Gap until October 2026; the Landauer gap, how far computing sits above the least energy physics allows, is still the science inside it. The method comes from the D3 research series, published with a DOI, and every formula is shown on the Method page.

Start measuring in two minutes

  1. Create a free accountemail, GitHub or Google
  2. Install joulescurl -LsSf https://wattops.dev/install.sh | sh
  3. Measure anythingjoules --track my-project -- python train.py

Running a fleet? Book a demo and we will set up a pilot with you.

Free account. By continuing you agree to the Terms and Privacy policy.

WattOps
/workspace/calculator
1Start from a published run or your own accelerator
2Describe the workload: model size and tokens
3Read the gap, then the cheapest fixes
Tap ? beside any field for help · ⌘K for every command

Config

every field is live
Published runs
Hardware
W
TFLOPS
Training run
B
B
%
Serving
B
M
%
Location
g/kWh
$/kWh
Facility and physics
% W
×
×
K
Landauer gap
—
energy per operation ÷ physical minimum

An estimate from the inputs above, not a measurement. To measure a real run, use joules. How it is worked out →

Gap scope

LIVE—
joules per operation · log scale

Derivation

recomputed on every keystroke

Close the gap

same work, one change at a time · ranked by CO₂ saved
ChangeEnergyCO₂CostSaved

Energy breakdown

facility total
PartEnergyShareCO₂

D3 lens

Landauer → E = mc² → rs
Physical minimum for this work—
Mass equivalent of the energy—m = E / c²
Schwarzschild radius of that mass—
Δr_s per bit = 2 G k_B T ln 2 / c⁴

Reproduce

Sign in

Save runs, track your hardware and use the API.

Your new API key

Copy it now and keep it secret, like a password. It is shown only once; we store only a fingerprint of it.

To use it with the joules CLI, run this once in your terminal. It saves the key on your computer, so every terminal can use it.

This is part of Pro

Save this run

Contact us

We read every message and reply by email.

›
↑↓ move↵ runesc close