WattGPU

Estimate the power draw and inter-token latency of serving an LLM, before you rent the GPU. Search any Hugging Face model, search the NVIDIA GPU database, and pick your operational scenario.

Every estimate is labelled by how far it sits from the 42 LLMs and 8 GPUs that were actually measured. Read the paper.

Model

Search any model on the Hugging Face Hub.

GPU

Measured GPUs are shown in the list. Type to search the rest of the NVIDIA database.

Operational scenario
? What do these mean?

These are three measured operating points, not ranges. Every server run behind WattGPU used one of exactly two request rates, and the offline runs kept the GPU permanently busy:

  • Low load — 0.017 requests/s. The GPU is idle most of the time.
  • Medium load — 0.33 requests/s. The GPU still keeps up comfortably.
  • Offline / batch — a batch job with work always queued. The GPU never goes idle.

Concurrent users are the people using the system at the same time — everyone with the chat open, reading a reply or typing the next message. That is not the same as concurrent requests: a user spends most of their session thinking and reading, and only occasionally sends something for the model to answer.

To convert:

concurrent users × messages per user per second = requests per second

At about one message per minute each, a user generates 1 ÷ 60 = 0.017 requests per second. So the two measured rates work out at roughly 1 and 20 concurrent users — ten people chatting sit between the two.

Using offline / batch for a busy server. A server that is fully saturated keeps its GPU continuously busy, just as a batch job does, so the mean power draw estimated for offline / batch is a reasonable figure for a saturated server too. The throughput carries over as the ceiling the pair can sustain. What does not carry over is per-user responsiveness: in a saturated batch each individual request waits far longer between tokens than the aggregate rate suggests.

Why it is not easy to determine when a server saturates. The point where load tips into saturation is a property of the whole deployment, not of the hardware alone. It moves with model size against memory bandwidth, prompt and response lengths, how the server batches concurrent requests, and how bursty the arrivals are. A small model on an H200 stays responsive with far more users than a 30B model on an L4. WattGPU takes the scenario as one of three measured categories, so it cannot interpolate to an arbitrary request rate or locate that tipping point — treat low, medium and offline as three reference points rather than a continuum.

Operational scenario

What the energy figures cover

The models predict the GPU board's power draw. The figures shown are scaled up from there to roughly what the wall socket sees:

facility watts = GPU watts ÷ 0.7 × 1.2

The GPU is taken as 70% of the host server's draw — the rest is CPU, memory, storage, NICs and fans — and a PUE of 1.2 is applied on top for cooling and power distribution. Both are typical values rather than measurements, so your own hardware and site will differ. The same scaling applies in every scenario, so the per-token and per-hour numbers describe the same system boundary.

Why per token offline, but per hour under server load

Offline the GPU is saturated: it is generating essentially all of the time, so every joule is attributable to a token and energy per token is a stable property of the model and the hardware.

Under server load it is not. The GPU spends much of its time waiting for the next request, so energy per token would mostly reflect how busy the server happens to be rather than anything about the model or the card. What an operator can act on there is the draw of keeping the deployment up, so the figures are reported per hour instead.

Grid carbon intensity

The demo reads model architectures from the Hugging Face Hub anonymously, which is enough almost all of the time. A token helps in two cases:

  • Licence-gated models. Most of the well-known gated models are already bundled, but for one that is not, a token from an account that has accepted the licence will read it.
  • Rate limiting. The Hub limits anonymous requests per IP address, and every visitor to this demo shares one. Your own token gives you your own allowance.

Create a read-only token at huggingface.co/settings/tokens. It is used for your request and then discarded — never stored, never logged, and never included in a shared link. Even so, prefer a fine-grained read-only token over one with write access.

Measured and bundled models need no token at all: they are answered without contacting the Hub.

Tier Meaning Validation protocol
🟢 High Both the LLM and the GPU are in the training data. 5-fold grouped CV
🟡 Moderate LLM not in training data, GPU is. Leave-one-LLM-out (LOLO)
🟠 Lower GPU not in training data, LLM is. Leave-one-GPU-out (LOGO)
🟠 Lower Neither is in the training data, under server load. Double holdout (both removed)
🔴 Low Neither is in the training data, offline / batch. Double holdout (both removed)

Generalising to hardware that was never measured is consistently harder than generalising to an unmeasured model architecture, which is why an unknown GPU ranks below an unknown LLM.

The first three protocols are the paper's. The double holdout is an extension added for this demo: for every measured pair, the model is retrained with that GPU and that LLM removed entirely, then asked to predict the pair. It is what lets the hardest case carry a measured error instead of an unvalidated guess.

That measurement is also why the hardest case appears in two different bands. Under server load, dropping the LLM as well as the GPU barely hurts — 15.1% against 13.1% for power, 8.6% against 8.5% for latency — so it sits in the same band as an unknown GPU alone. Offline it does hurt: latency goes from 24.9% to 36.2%, which is a genuinely weaker estimate and gets its own band. Whichever band is shown, the error quoted is always the one measured for the actual situation.

Some requests are refused outright rather than given a tier — mixture-of-experts and quantised models, embedding and reranking models, and pairs whose weights do not fit in GPU memory. Those are outside what the models were fitted on, so an estimate would be misleading rather than merely uncertain.

The typical error shown beside each number is the median absolute percentage error (MdAPE) of the model, measured during training and looked up when you ask — it is not computed from your particular query.

How it is measured

Every row of the dataset is predicted by a model that never saw it (out-of-fold prediction), then:

MdAPE = median( |actual − predicted| ÷ actual ) × 100

The median rather than the mean, following the paper: it is not distorted by the few pairs the model gets badly wrong — but that is also why it describes a typical case rather than a worst case.

Why it changes with the tier

The data is split in whatever way reproduces the situation the tier describes, so the error you are shown was measured under exactly that kind of generalisation:

Tier How the data was split What it simulates
🟢 High 5-fold, grouped on the (LLM, GPU) pair both already measured
🟡 Moderate leave-one-LLM-out an architecture never measured
🟠 Lower leave-one-GPU-out hardware never measured
🟠 / 🔴 that GPU and that LLM both removed neither ever measured

The band shown and the protocol behind it are not always the same. A pair where neither side was measured is backed by the double holdout in every scenario, but under server load that protocol performs closely enough to leave-one-GPU-out to share its band. The number beside the estimate always comes from the protocol, never from the band.

Grouping on the pair for the green tier keeps the repeated runs of one configuration from landing on both sides of the split, which would otherwise flatter the result.

The figures are also split between offline and server operation, because the two regimes differ a lot — especially for latency, where offline behaviour depends on batching that the features only partly capture.

What it does not tell you

  • It is a median across a whole tier, so half the held-out cases in that tier were worse. It is not a bound, and not a confidence interval for your pair.
  • There is no per-prediction uncertainty: two queries in the same tier and regime always show the same figure.
  • It measures the model against the paper's setup — vLLM, FP16, one GPU, 512-token prompts. It says nothing about how well that setup matches yours.

These are the numbers reported in WattGPU: Predicting Inference Power and Latency on Unseen GPUs and LLMs, reproduced by scripts/train_models.py in this repository. MdAPE is the median absolute percentage error. Pearson r measures how well predictions track the true values, and GPU τ / LLM τ are Kendall rank correlations — how reliably the model puts GPUs, and LLMs, in the right order. Ranking matters as much as absolute error when the question is "which of these should I deploy on?".

Mean power draw (Table 2)

Model Scenario Strategy MdAPE Pearson r GPU τ LLM τ
XGBoost Offline CV 1.6% 0.992 0.96 0.44
XGBoost Offline LOGO 3.4% 0.988 0.95 0.40
XGBoost Offline LOLO 2.0% 0.979 0.97 0.33
XGBoost Server CV 5.5% 0.981 0.86 0.68
XGBoost Server LOGO 13.5% 0.965 0.76 0.72
XGBoost Server LOLO 6.7% 0.955 0.85 0.54
TDP baseline Offline 4.4% 0.916 0.96
TDP baseline Server 190.1% 0.590 0.60
Least-squares TDP Offline 7.2% 0.916 0.96
Least-squares TDP Server 26.0% 0.779 0.60

Assuming a GPU simply draws its TDP is roughly adequate offline, where a saturated GPU really does sit near its power limit, and badly wrong under server load (190% error) where utilisation is far below peak. That is where the learned model earns its place.

Inter-token latency (Table 3)

Model Scenario Strategy MdAPE Pearson r GPU τ LLM τ
XGBoost Offline CV 12.8% 0.813 0.86 0.81
XGBoost Offline LOGO 24.9% 0.727 0.72 0.83
XGBoost Offline LOLO 15.6% 0.808 0.97 0.66
XGBoost Server CV 4.9% 0.991 0.94 0.89
XGBoost Server LOGO 8.5% 0.972 0.78 0.88
XGBoost Server LOLO 5.6% 0.990 0.97 0.88
Roofline baseline Offline 80.2% 0.545 0.82 0.61
Roofline baseline Server 29.6% 0.991 0.88 0.91

Latency is harder offline than under server load: offline throughput depends on how vLLM batches requests, which the features capture only partly. The roofline baseline — the time to stream the model's FP16 weights from memory once per token — tracks the ordering well (τ up to 0.91) but is off by 80% in magnitude offline, because it ignores batching entirely.

How to read this

  • CV rows are the green tier, LOLO the yellow, LOGO the orange.
  • Generalising to an unseen GPU (LOGO) is consistently harder than to an unseen LLM (LOLO). That is why an unprofiled GPU is ranked below an unprofiled LLM in the certainty tiers.
  • All errors are for the paper's setup: vLLM, FP16 weights, a single GPU, 512-token prompts. They are not warranties for other configurations.

If this demo or the models behind it are useful in your work, please cite the paper:

Fadel Argerich, M., Fürst, J., and Patiño-Martínez, M. (2026). WattGPU: Predicting Inference Power and Latency on Unseen GPUs and LLMs. 1st Workshop on Sustainability and Resource-Efficiency of AI @ IJCAI 2026. CEUR Workshop Proceedings, ISSN 1613-0073. arxiv.org/abs/2607.02391

@inproceedings{fadelargerich2026wattgpu,
  title     = {{WattGPU}: Predicting Inference Power and Latency on
               Unseen GPUs and LLMs},
  author    = {Fadel Argerich, Mauricio and F{\"u}rst, Jonathan and
               Pati{\~n}o-Mart{\'i}nez, Marta},
  booktitle = {Proceedings of the 1st Workshop on Sustainability and
               Resource-Efficiency of Artificial Intelligence (SuRE) @ IJCAI},
  series    = {CEUR Workshop Proceedings},
  publisher = {CEUR-WS.org},
  issn      = {1613-0073},
  year      = {2026},
  eprint    = {2607.02391},
  archivePrefix = {arXiv},
  url       = {https://arxiv.org/abs/2607.02391}
}

The code, the trained models and the measurement subset are available under Apache 2.0 at github.com/maufadel/wattgpu.

GPUs (8): A100 SXM4 40 GB, A30 PCIe, H100 NVL 94 GB, H200 NVL, L4, L40S, Tesla T4, Tesla V100 SXM2 32 GB

LLMs (42): 01-ai/Yi-1.5-6B-Chat, 01-ai/Yi-1.5-9B-Chat, EleutherAI/gpt-j-6b, EleutherAI/gpt-neox-20b, HuggingFaceTB/SmolLM2-1.7B-Instruct, Qwen/Qwen2.5-0.5B-Instruct, Qwen/Qwen2.5-1.5B-Instruct, Qwen/Qwen2.5-3B-Instruct, Qwen/Qwen2.5-7B-Instruct, Qwen/Qwen3-14B, allenai/OLMo-2-1124-13B-Instruct, allenai/OLMo-2-1124-7B-Instruct, berkeley-nest/Starling-LM-7B-alpha, deepseek-ai/deepseek-llm-7b-chat, google/gemma-2-2b-it, google/gemma-3-12b-it, google/gemma-3-27b-it, ibm-granite/granite-3.0-2b-instruct, ibm-granite/granite-3.0-8b-instruct, internlm/internlm2-7b, internlm/internlm2_5-20b-chat, meta-llama/Llama-2-13b-chat-hf, meta-llama/Llama-3.1-8B-Instruct, meta-llama/Llama-3.2-3B-Instruct, microsoft/Phi-3-medium-4k-instruct, microsoft/Phi-3-mini-4k-instruct, microsoft/phi-2, microsoft/phi-4, mistralai/Mistral-7B-Instruct-v0.3, mistralai/Mistral-Small-24B-Instruct-2501, mistralai/Mistral-Small-Instruct-2409, mlabonne/AlphaMonarch-7B, mlabonne/NeuralBeagle14-7B, nvidia/AceMath-1.5B-Instruct, nvidia/AceMath-7B-Instruct, nvidia/Llama-3.1-Minitron-4B-Width-Base, nvidia/Mistral-NeMo-Minitron-8B-Instruct, nvidia/Nemotron-Mini-4B-Instruct, openai-community/gpt2, tiiuae/Falcon3-3B-Instruct, upstage/SOLAR-10.7B-Instruct-v1.0, upstage/solar-pro-preview-instruct

All from the subset of Watt Counts used in the paper: vLLM, FP16 weights, one GPU, 512-token prompts. Quantised, multi-GPU or long-context deployments will differ.

Licence-gated models that were not measured (some Llama and Gemma variants) need an HF_TOKEN environment variable from an account that has accepted their licences.