"""What precision the benchmarks actually ran at, recorded rather than assumed. CUDA does not run float32 by default. `torch.backends.cudnn.allow_tf32` ships as True, so cuDNN convolutions and RNNs execute in TF32 — 10 mantissa bits against float32's 23. `matmul.allow_tf32` ships as False, which is why the attention, Mamba and S4 models were never affected and the convolutional and recurrent ones were. The device comparison was therefore measuring MPS float32 against CUDA TF32 and attributing the difference to the hardware. With TF32 off, `cnn_2d_sparse` moves from 1.96e-04 to 2.34e-07 and `tcn_2d_sparse` from 1.16e-04 to 1.13e-07. These tests run on any machine, including one with no GPU, because the thing worth pinning is not the GPU behaviour — it is that the setting is applied, reported honestly when it could not be applied, and never silently assumed. """ from __future__ import annotations import argparse import importlib.util import sys from pathlib import Path import torch ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(ROOT / "benchmarks")) spec = importlib.util.spec_from_file_location("_td_precision", ROOT / "benchmarks" / "precision.py") precision = importlib.util.module_from_spec(spec) sys.modules["_td_precision"] = precision spec.loader.exec_module(precision) def parse(argv, *, tf32_default="off"): ap = argparse.ArgumentParser() precision.add_arguments(ap, tf32_default=tf32_default) return ap.parse_args(argv) def test_the_numerical_benchmark_defaults_to_real_float32(): """`agreement.py` asks for TF32 off, because comparing one device's float32 against another's TF32 measures a precision setting and calls it hardware.""" assert parse([], tf32_default="off").tf32 == "off" def test_the_training_benchmark_defaults_to_what_users_get(): """`pretrain.py` keeps torch's own default, since its speed numbers should describe the configuration people actually run.""" assert parse([], tf32_default="on").tf32 == "on" def test_cudnn_stays_on_unless_asked(): """Turning cuDNN off changes *which implementation runs*, not its precision. It answers a diagnostic question — the RNN residual is the fused kernel, not float32 — and must not be the default, because the fused kernel is what a user's model uses.""" assert parse([]).cudnn == "on" assert parse(["--cudnn", "off"]).cudnn == "off" def test_the_settings_are_reported_as_observed_not_as_requested(): """On a machine with no CUDA these knobs do nothing. A manifest that recorded "tf32: off" there would claim a control that was never applied, and the whole point of the record is that a number's precision travels with it.""" settings = precision.apply(parse(["--tf32", "off"])) assert settings["tf32_requested"] == "off" if torch.cuda.is_available(): assert settings["cudnn_tf32"] is False assert settings["matmul_tf32"] is False else: assert settings["cudnn_tf32"] is None assert settings["matmul_tf32"] is None assert "no CUDA" in settings["note"] def test_describe_never_claims_a_control_it_did_not_apply(): without = {"tf32_requested": "off", "cudnn_tf32": None} assert "n/a" in precision.describe(without) with_cuda = { "tf32_requested": "off", "cudnn_tf32": False, "matmul_tf32": False, "cudnn_enabled": True, } text = precision.describe(with_cuda) assert "cudnn=False" in text and "matmul=False" in text def test_applying_the_setting_does_not_disturb_a_cpu_run(): """The knobs are CUDA-only; asking for them on CPU must not raise or leave torch in a state the rest of the suite then inherits.""" before = torch.backends.cudnn.enabled precision.apply(parse(["--tf32", "off"])) precision.apply(parse(["--tf32", "on"])) if not torch.cuda.is_available(): assert torch.backends.cudnn.enabled == before def test_both_benchmarks_record_precision_in_their_manifest(): """The record is the deliverable: two runs are only comparable if each says what precision it ran at, and neither script may quietly drop it.""" for name in ("agreement.py", "pretrain.py"): source = (ROOT / "benchmarks" / name).read_text() assert "precision.apply(args)" in source, f"{name} never applies the setting" assert '"precision": prec' in source, f"{name} never records the setting"