SCS-Lab's picture
Sync model card with consumer repo (correct predict_one API)
4effa31 verified
---
license: apache-2.0
tags:
- fusion
- tokamak
- diii-d
- pedestal
- onnx
library_name: onnx
---
# PedestalPredictor ONNX bundles
Five ONNX encapsulations of the same shared `PedestalModel`
architecture (MSE + FPE encoders) trained on DIII-D shot data.
Each subdirectory is a fully self-contained bundle: ONNX graphs
plus normalization, target, and provenance sidecars.
## Quick start (recommended: `PedestalEnsemble` wrapper)
```python
from inference.ensemble import PedestalEnsemble
ens = PedestalEnsemble.from_huggingface(
"SCS-Lab/pedestal-predictor-onnx"
)
out = ens.predict_one(
history_stats=..., # (50, 458) float32; v1 bundles slice to 446
history_masks=..., # (50,)
aux_features=..., # (3,)
sequences_raw=..., # (T, 32) — raw physical units
signal_masks=..., # (32,)
)
print(out.te_ped, out.ti_ped, out.t_rot_ped,
out.edens_ped, out.is_h_mode, out.h_mode_prob)
```
The wrapper ships in the
[PedestalPredictor GitHub repo](https://github.com/SCS-Lab/PedestalPredictor).
It loads all five bundles via `manifest.json` at this repo's root,
applies per-bundle FPE normalization from the raw physical-unit
inputs, runs the appropriate MSE-history width (446 vs 458) per
bundle, and returns a typed dataclass with all five predictions.
## Quick start (advanced: raw per-bundle ONNX)
```python
from huggingface_hub import snapshot_download
import onnxruntime as ort, json
local = snapshot_download(repo_id="SCS-Lab/pedestal-predictor-onnx",
allow_patterns=["te_ped_89/*"])
mse = ort.InferenceSession(f"{local}/te_ped_89/mse_encoder.onnx")
fpe = ort.InferenceSession(f"{local}/te_ped_89/fpe_encoder.onnx")
cfg = json.load(open(f"{local}/te_ped_89/model_config.json"))
# ... feed MSE history + FPE sequences; see te_ped_89/README.md
```
## Bundles
| Bundle | Task | Target | MSE history | FPE dim | Notes |
|---|---|---|---|---|---|
| [`hmode_89`](hmode_89/) | classification | `hmode` | 446 | 32 | threshold=0.5 |
| [`te_ped_89`](te_ped_89/) | regression | `te_ped (keV)` | 458 | 32 | μ=0.516, σ=0.410 |
| [`ti_ped_89`](ti_ped_89/) | regression | `ti_ped (keV)` | 458 | 32 | μ=0.902, σ=0.654 |
| [`t_rot_ped_89`](t_rot_ped_89/) | regression | `t_rot_ped (krad/s)` | 458 | 32 | μ=17.190, σ=14.376 |
| [`edensfit89`](edensfit89/) | regression | `edens_ped` | 446 | 32 | μ=2.580, σ=1.606 |
## `manifest.json`
The root-level `manifest.json` lists every bundle's
`dataset_version`, `task`, `target`, default threshold, and
sidecar file list. The `PedestalEnsemble` wrapper reads this
manifest as its bootstrap contract; direct consumers of the
ONNX graphs can use it to auto-discover new bundles.
## Provenance
Each bundle's `provenance.json` records:
- `bundle_name`, `task_type`, `target_name`, `dataset_version`
- `source_trial_dir` and `checkpoint` path on the training cluster
- `torch_version`, `onnx_version`, `opset_version`
- `git_sha` of the export-time commit in the GitHub repo
- `fpe_normalization_source` (+ sha256), `target_norm_source` (+ sha256)
## Breaking path change
Pre-monorepo publishes put `mse_encoder.onnx` and `fpe_encoder.onnx`
at the repo root. They now live under `edensfit89/`. Update any
direct `hf_hub_download` calls accordingly; see the bottom of
[`edensfit89/README.md`](edensfit89/README.md) for the migration
snippet.
## License
All bundles: APACHE 2.0.