Skip to content

UQ benchmarking - #49

Open
ktangsali wants to merge 14 commits into
NVIDIA:mainfrom
ktangsali:uq-benchmarking
Open

UQ benchmarking#49
ktangsali wants to merge 14 commits into
NVIDIA:mainfrom
ktangsali:uq-benchmarking

Conversation

@ktangsali

Copy link
Copy Markdown
Collaborator

PhysicsNeMo-CFD Pull Request

Description

Updates the model wrappers and the benchmarking workflow to support benchmarking on models with UQ. The PR:

  • Supports some standard metrics used in UQ studies
  • Supports sampling and analytical based UQ methods
  • Supports aggregating the UQ metrics across various geometries using Welford statistics
  • Adds sample wrappers for an Analytical, MCDropout based and a Model Ensemble based UQ approaches
  • Adds a dataset adaptor for DrivAerStar dataset
  • Updates the relevant skills

Checklist

  • I am familiar with the Contributing Guidelines.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.
  • The CHANGELOG.md is up to date with these changes.

Dependencies

@ktangsali
ktangsali requested a review from peterdsharpe July 23, 2026 00:06
@ktangsali

Copy link
Copy Markdown
Collaborator Author

/blossom-ci

@peterdsharpe

Copy link
Copy Markdown
Collaborator

Hi @ktangsali - I see some files use gpytorch. Can we add that as part of an optional dependency group in pyproject.toml?

physicsnemo renamed FieldGPHead to FieldVariationalGPHead and removed the
DUE-style spectral-normalised DKL extractor. The import alias kept this wrapper
importable but not constructible: it passed spectral_norm_coeff and dkl_residual
unconditionally, so every GP benchmark row died with a TypeError.

Rather than silently dropping those two kwargs, reject them with a clear error.
Leftover model kwargs are forwarded to the datapipe splitter, which would
swallow them, so a config still asking for a spectral-normalised extractor would
otherwise build a plain MLP whose parameter layout does not match its
checkpoint -- failing later and less obviously.

The head-checkpoint fallback now tries FieldVariationalGPHead.0.<epoch>.pt and
then the older FieldGPHead.0.<epoch>.pt, since save_checkpoint derives the file
stem from the class name and existing runs wrote the old one. Verified the three
GP checkpoints scored by the multiclass surface benchmark still load strict=True.

config_uq_surface.yaml's GP row loses its DUE settings and now mirrors the
settled training recipe (plain DKL MLP + heteroscedastic noise head). Its
comments also spell out that stats_path must be the DrivAerStar normalization:
those fields are in raw physical units, and the nondimensional stats that used
to sit at the shared path belong to the DrivAer AWS runs, so confusing the two
mis-scales pressure by ~1600x without failing.
The pre-rename FieldGPHead spelling is gone from physicsnemo, and every GP entry
in the benchmark configs names its head checkpoint explicitly, so the exact file
is read and the sibling search never runs for them. Accepting both stems only
made the fallback and its error harder to follow; the not-found message now
names the single path it looked for.
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.

2 participants