Skip to content

Rebuild the benchmark with reproducible PA and DPD results - #19

Merged
gaochangw merged 3 commits into
mainfrom
benchmark-fix
Jul 26, 2026
Merged

Rebuild the benchmark with reproducible PA and DPD results#19
gaochangw merged 3 commits into
mainfrom
benchmark-fix

Conversation

@gaochangw

Copy link
Copy Markdown
Member

Summary

  • replace the legacy benchmark scripts and intermediate experiment artifacts with one provenance-checked PA/DPD benchmark workflow
  • publish the latest APA_200MHz and DPA_160MHz report, figures, and machine-readable evidence
  • stabilize GMP PA identification with column-scaled truncated SVD and explicit solver/rank provenance
  • align CLI and Python API training defaults with the validated OpenDPDv2 recipe
  • add TRes-GRU plus the optimized TRes-DeltaGRU execution paths and their regression coverage
  • propagate PA delta thresholds, use the dataset sample rate for EVM, and warn before architecture-only model IDs overwrite prior artifacts

Why

The previous report contained an unreproducible -43.52 dB APA GRU PA result and used an undertrained PA recipe. APA GMP was also numerically unstable because CUDA gels assumes a full-rank design matrix, while the 1,350-column GMP basis is ill-conditioned/rank-deficient.

The new workflow archives exact checkpoints/logs, records commands and source hashes, validates all evidence before rendering, and keeps only user-facing benchmark artifacts in the repository.

Latest benchmark highlights

  • APA_200MHz GMP PA: -38.7020 / -38.6606 dB validation/test NMSE, rank 650/1350
  • DPA_160MHz GMP PA: -38.9088 / -39.4014 dB, rank 918/1350
  • APA_200MHz GRU-H28 PA: -38.8504 / -38.9367 dB
  • reproduction run 20260726T161245Z: 24/24 jobs successful, 22 published results
  • 62/62 source-snapshot members and 42 archived training artifacts hash-verified

User/developer impact

Users can reproduce the complete report with:

bash benchmark/reproduce_benchmark_report.sh --device 0

The generated checkpoint, history, commands, job ledger, raw polynomial outputs, source snapshot, report, and figures remain bound to the timestamped run. Current defaults now use batch size 64, 300 epochs, initial learning rate 5e-3, scheduler patience 5, and minimum learning rate 5e-5.

Addresses #15.

Validation

  • .venv/bin/pytest -q: 216 passed, 1 PyTorch CUDA-context warning
  • .venv/bin/pytest -q tests/test_benchmark_regressions.py: 26 passed
  • bash -n benchmark/reproduce_benchmark_report.sh
  • git diff --check
  • full fresh benchmark reproduction and artifact/hash audit

gaochangw and others added 3 commits July 11, 2026 19:11
Full experimental re-run of benchmark/benchmark_report.md. Eight of the ten
reported DPD numbers reproduce (QR rows to <=0.05 dB, SGD rows to <=0.5 dB),
but the verification exposed three defects:

- benchmark_volterra_qr.py never branched on --model, so --model gmp silently
  ran the Memory Polynomial basis. Present since the script was first added;
  the report's GMP rows cannot have come from it as committed. Fixed here, and
  with the fix both GMP rows reproduce.
- The APA_200MHz PA NMSE of -43.52 dB in section 4 is unattainable. Re-running
  the report's own command gives -31.48 dB (converged), a closed-form GMP with
  3520 real parameters reaches only -38.83 dB, and the fit residual is
  near-white with drive-independent power, placing the measurement noise floor
  at about -38.6 dB.
- The APA half of the benchmark therefore rests on a surrogate that is ~7 dB
  short of that floor. Re-running the QR benchmarks against a converged
  surrogate moves MP's EVM from -32.70 to -47.41 dB and flips the MP/GMP
  ranking, which invalidates section 8's "10.6 dB EVM" conclusion. The
  DPA_160MHz half is unaffected; its surrogate was already at its floor.

The dataset itself is clean: CSVs unchanged since 2025-07-09, no clipping or
NaN, splits consistent, already time-aligned, and the closed-form ceiling is
the same as DPA_160MHz. The -31.5 dB plateau comes from the training recipe --
the same GRU gains 7.4 dB from the OpenDPDv2 hyperparameters alone.

Also adds backbones/tres_gru.py (TRes-DeltaGRU with the DeltaGRU cell replaced
by a dense nn.GRU), verified numerically equivalent to tres_deltagru at
thx=thh=0, and a runner for the fixed-parameter-budget PA backbone sweep.

BENCHMARK_FIX_PLAN.md records the evidence and the remaining re-benchmark work.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@gaochangw gaochangw left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Self-review completed against the final net diff. I reviewed the benchmark runner and provenance validation, MP/GMP solver changes, PA/DPD model paths (including TRes-GRU and TRes-DeltaGRU), CUDA/Triton fast-path fallbacks, public API/default hyperparameters, benchmark-folder cleanup, and the new regression tests. I found no blocking issues. All six required CI checks pass across lint, package build, and Python 3.10-3.13. Squash merge is appropriate because the branch contains iterative benchmark commits whose intermediate artifacts intentionally net out of the final PR.

@gaochangw
gaochangw merged commit 7426bbf into main Jul 26, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant