Skip to main content

gpuemu

Catch silently-wrong GPU kernels from Python — before they reach production.

PyPI Python versions License Docs

gpuemu is the Python client for gpuemu, a GPU-less correctness oracle for deep-learning kernels. It plugs into PyTorch, JAX, and TensorFlow and validates your CUDA/Triton kernels against a high-precision fp64 reference with op-schema-aware, adversarial inputs — finding the silent numerical bugs that torch.allclose misses.


The problem

The industry-standard correctness check for a GPU kernel is one line:

torch.allclose(my_kernel(x), reference(x), atol=1e-5, rtol=1e-2)

One shape, one dtype, one seed. In a measured 26-op corpus that oracle accepts 9/9 LLM-style buggy kernels — tail-mask leaks, accumulator-scale bugs, missing normalisation, online-softmax rescale errors — as "correct". Those kernels then ship and run at scale: GPU-hours wasted on broken work, quality regressions that survive months of green CI.

gpuemu replaces that one-line check with an operator-aware regime that caught 100% of those bugs across 5 GPU classes with zero false positives on controls (P1).

Install

pip install gpuemu            # core client
pip install gpuemu[torch]     # + PyTorch adapter
pip install gpuemu[jax]       # + JAX adapter
pip install gpuemu[tensorflow]
pip install gpuemu[all]       # everything

The client talks to the gpuemu daemon over IPC and will start one on demand. To run the daemon yourself, install the CLI: cargo install gpuemu.

Quick start

from gpuemu import Client

client = Client()

# Fuzz with op-schema-aware inputs and an fp64 reference oracle.
results = client.fuzz_op_client_side(
    "flash_attention",
    run_op=lambda inputs: my_flash_attn(inputs["q"], inputs["k"], inputs["v"]),
    iterations=100,
    value_distribution="adversarial",   # the P3 default — 99% bug recall
)

print(f"Passed: {results.passed}/{results.total}")

A failure reports the seed, dtype, shape, and a base64 snapshot of the failing input — re-run it byte-for-byte from any machine, with or without a GPU. The client's SeededRng is bit-identical to the Rust daemon, so reproduction is exact across languages.

Execution modes

# 1. Client-side (recommended): your code runs the GPU op; gpuemu validates.
results = client.fuzz_op_client_side(
    "matmul",
    run_op=lambda i: torch.matmul(i["a"], i["b"]),
    iterations=100,
)

# 2. Daemon-orchestrated: fetch cases, run them yourself, submit outputs.
for case in client.get_test_batch("my_op", count=50):
    out = my_gpu_op(case["inputs"])
    client.submit_output("my_op", case["inputs"], out, case["seed"])

# 3. Reproduce / minimise a known failure from its seed.
repro = client.reproduce(seed)
small = client.minimize(seed)

What you get

Feature What it does
fp64 reference oracle Validates kernel output against a high-precision CPU reference per dtype
Op-schema-aware fuzzing Boundary + regular + adversarial input distributions, per op
Calibrated tolerances calibrate_tolerance() / get_recommended_tolerance() — p95-of-controls × 1.5 envelope (P2: 65% → 82% recall)
Deterministic RNG SeededRng reproduces failures byte-for-byte, identical to the Rust daemon
Framework adapters PyTorch, JAX, TensorFlow — from gpuemu.frameworks.pytorch import validate_pytorch
Static lint client.lint_kernel(...) surfaces PTX/SASS register pressure and spills

The research backing (P1–P4)

Each default is anchored to a measured study — fp64 oracle (P1: 9/9 bugs caught, 0 false positives), calibrated tolerances (P2: +23 pp recall), adversarial fuzzing (P3: 99% recall), and PTX lint (P4). See The Evidence.

Documentation

Development

pip install -e .[dev]
pytest -v          # 11 tests, +7 daemon-live tests

License

Dual-licensed under MIT or Apache 2.0 at your option.

Metadata

Release files for gpuemu 0.1.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 gpuemu 0.1.0
File Size Uploaded
gpuemu-0.1.0.tar.gz 44.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gpuemu 0.1.0
File Interpreter ABI Platform
gpuemu-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 85.4 kB

Release files / gpuemu-0.1.0.tar.gz

Download URL gpuemu-0.1.0.tar.gz
Size 44.3 kB
Tags Source
SHA-256 checksum
How to use checksums
7d2fcb9902e632eb1083a5b6a8840c46bf351cdfe53bb6130e00025165170fd0
BLAKE2b-256 checksum
How to use checksums
e193869d3eb3e1483c460a3a51db01e4789052c4cf6189aa0694a2c9a84fea70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.14 {"installer":{"name":"uv","version":"0.9.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / gpuemu-0.1.0-py3-none-any.whl

Download URL gpuemu-0.1.0-py3-none-any.whl
Size 41.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8a0a353b2b10d5e3849ecec1ce69ecf97a9a6dc69a1ed75e1d4f21ee82f80e9e
BLAKE2b-256 checksum
How to use checksums
395ee7f5b1e3e43ad949eb11992f14489e246a066817b5e883503317fe0d94c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.14 {"installer":{"name":"uv","version":"0.9.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.0 This release

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