Skip to main content

tokenwatt-check

Is the GPU you rented performing like it should?

GPU listings tell you the model — "H100 SXM, verified, 99.5% reliability" — not the card you get. When we benchmarked four rented H100s, two had their power limit lowered by the host and one ran at 787 MHz instead of ~1,900 under load: every token took 2.9× longer. Nothing on the listing showed it.

tokenwatt-check finds that in about two minutes:

pip install tokenwatt-check torch    # torch is usually already there on GPU images
tokenwatt-check
  OVERALL: ❌ FAIL

  ⚠️  power limit            GPU power limit is 500 W of a possible 700 W (71%).
  ❌ clocks under load      SM clock during the matmul averaged 560 MHz — 41% of a healthy H100 (1360 MHz).
                            → Far below normal. Possible causes: aggressive power cap, poor cooling or
                              power delivery, a degraded card. Ask for another machine.
  ❌ BF16 matmul            280 TFLOPS — 41% of the healthy H100 reference (680 TFLOPS).
  ❌ memory copy bandwidth  2.2 TB/s — 73% of the healthy H100 reference (3.0 TB/s).
  ✅ PCIe link              Gen5 x16.
  ✅ disk                   Sequential write 1,616 MB/s.
  ✅ download               2,100 Mbit/s from Hugging Face, one stream (~6.3 min per 100 GB of weights).

(Illustrative output modeled on a real under-performing node — see src/tokenwatt_check/demo.py. Try tokenwatt-check --demo throttled-h100, capped-h100 or healthy-h100 without a GPU.)

What it checks

Check How Why it matters
Power limit nvidia-smi power.limit vs power.max_limit Hosts lower it to save power; throughput drops under load
Clocks under load SM clock sampled every second during a 30 s BF16 matmul, compared with a healthy card of the same model in the same test The clearest sign of a capped, hot or degraded card
Throttle reasons nvidia-smi clock event reasons during load Hardware or thermal slowdown means the card is protecting itself
Compute Sustained BF16 GEMM (8192²) in TFLOPS Prompt processing and large batches scale with it
Memory bandwidth Device-to-device copy in TB/s LLM token generation follows it closely
PCIe link Generation and width under load vs the card's maximum Slow links slow model loading
Memory errors Uncorrected ECC errors, pending retired pages Unreliable memory
DCGM diagnostics dcgmi diag -r 1 when NVIDIA DCGM is installed (--dcgm 2 for the longer run) NVIDIA's own hardware checks
Disk 2 GB sequential write and read How long weights take to load from disk
Download 20 s from the Hugging Face CDN You pay for the minutes spent downloading weights

Results: PASS, WARN or FAIL per check with a reason and what to do, plus a JSON file with every reading (--json path) and an optional Markdown report (--md path). Exit code 2 on FAIL, for scripts.

Options

tokenwatt-check --gpu 1            # another GPU
tokenwatt-check --seconds 60       # longer load test
tokenwatt-check --no-load          # inventory, disk and network only (no PyTorch needed)
tokenwatt-check --no-net --no-disk
tokenwatt-check --share --provider runpod   # add an anonymized copy to the public node statistics

Reference values

Compute, bandwidth and clock-under-load are compared with a healthy card of the same model (src/tokenwatt_check/verdict.py):

GPU BF16 matmul Clock during matmul Copy bandwidth Source
H100 SXM 680 TFLOPS 1,360 MHz 3.0 TB/s measured, RunPod Secure Cloud, 700 W
H200 660 TFLOPS 1,460 MHz 4.3 TB/s measured, RunPod Secure Cloud, 700 W
others provisional (vendor specs, public measurements)

A dense matmul pulls a healthy card to its power limit, so its clock sits well below the maximum — a healthy H100 holds about 69% of max clock in this test. That's why the clock check compares against a healthy card rather than the maximum. If a healthy card scores low on your machine, please open an issue with your JSON so we can improve the references.

Privacy

Everything runs locally. Nothing is sent anywhere except the 20-second download test from huggingface.co — unless you add --share. Then one anonymized report goes to TokenWatt: GPU model, driver, limits and measurements, CPU count and RAM size, and the provider name if you give one. Hostnames, GPU UUIDs, paths and your IP address are not kept (privacy policy). Shared reports are published only as aggregate statistics per GPU model, which is how the healthy-card references get better for everyone.

Supported

NVIDIA GPUs with nvidia-smi (H100, H200, B200, A100, L40S, RTX 4090/5090 and others). AMD Instinct support is planned.

About

Built by TokenWatt, which publishes vendor-neutral measurements of LLM inference — SLO goodput, tokens per joule and cost per million tokens — on NVIDIA and AMD. MIT licensed.

Metadata

Release files for tokenwatt-check 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tokenwatt-check 0.2.0
File Size Uploaded
tokenwatt_check-0.2.0.tar.gz 15.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tokenwatt-check 0.2.0
File Interpreter ABI Platform
tokenwatt_check-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 34.7 kB

Release files / tokenwatt_check-0.2.0.tar.gz

Download URL tokenwatt_check-0.2.0.tar.gz
Size 15.9 kB
Tags Source
SHA-256 checksum
How to use checksums
103c812cc9fcb63624c9061f839c3569814406fd6d9663e8fd692f37e9a38f13
BLAKE2b-256 checksum
How to use checksums
a94beb1dbc6db4849f83922e2571678d68cad8d1d635f9c1b17507ee66a51135
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / tokenwatt_check-0.2.0-py3-none-any.whl

Download URL tokenwatt_check-0.2.0-py3-none-any.whl
Size 18.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
64a31b65452e480231c8cf019a7e9230446b82d84ca060d070cf87dc0b86ea5c
BLAKE2b-256 checksum
How to use checksums
dc7f483214d735c5af29bf9f1115a2c71532b49cfe56dbaf2d4dbf226e7df520
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page