Download era/averaged/model_config.json from SCS-Lab/FUSE-PED: direct link, hf CLI and curl.
- Browser
- Download file 18.3 kB
-
https://huggingface.co/SCS-Lab/FUSE-PED/resolve/main/era/averaged/model_config.json
- Command line
-
hf download hf://SCS-Lab/FUSE-PED/era/averaged/model_config.json
-
curl -L -o model_config.json https://huggingface.co/SCS-Lab/FUSE-PED/resolve/main/era/averaged/model_config.json
18.3 kB
| { | |
| "schema_version": 1, | |
| "model": "FUSE-EFIT", | |
| "protocol": "in era (random split of shots 125500-205774; DECISIONS D50, D55)", | |
| "form": "averaged", | |
| "form_meaning": "averaged: the eight in-era finals evaluated side by side; at every tick the mean of their raw outputs (regression z-scores and the H-mode logit) is de-normalised and passed through the sigmoid, as the eight-replicate ensemble was scored", | |
| "members": [ | |
| { | |
| "run": "runs/FULLextfinal_era_r0", | |
| "replicate": 0, | |
| "seed": 100, | |
| "checkpoint_sha256": "28390d5950ec18477394a85dc73498afa0f847502514251b7c96c97569632d96", | |
| "config_sha256": "ddec260834c0f5fdaa5303382140e9c0bca1e3028ccd478c2c2a65f62d6f2398", | |
| "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290" | |
| }, | |
| { | |
| "run": "runs/FULLextfinal_era_r1", | |
| "replicate": 1, | |
| "seed": 101, | |
| "checkpoint_sha256": "46053aa6a7e2b96c3236fba561dc74efb772ce5fb4c3e06c177e9b0b44a10fe2", | |
| "config_sha256": "7f69cc663cf2396df0564115e87e5e00c8eb6ec1382179aef0627f1706ef590e", | |
| "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290" | |
| }, | |
| { | |
| "run": "runs/FULLextfinal_era_r2", | |
| "replicate": 2, | |
| "seed": 102, | |
| "checkpoint_sha256": "1855ba2c6bb045a31fddbf542bef9d9c748a0c0f8630bc23b4f4574ec92e4e30", | |
| "config_sha256": "f7d78968cf29b2a319bad9ccfa851e78fc471fc979f77757732059f8f655d98e", | |
| "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290" | |
| }, | |
| { | |
| "run": "runs/FULLextfinal_era_r3", | |
| "replicate": 3, | |
| "seed": 103, | |
| "checkpoint_sha256": "f9ee89557c3fb5d7ecda0e21269cc17b75337d76f0db9e2480a49da981ddb3b0", | |
| "config_sha256": "3913dea303f6b892d31e82d6f0cad644105de0ed176ede4d604c94c94fcf7a7f", | |
| "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290" | |
| }, | |
| { | |
| "run": "runs/FULLextfinal_era_r4", | |
| "replicate": 4, | |
| "seed": 104, | |
| "checkpoint_sha256": "878583951001053e472a43428ae11e91737285f90fe6ba6d9dac98a618e60121", | |
| "config_sha256": "e0686f2bd559e0ea5bc99a45b5a55d9ec38d064c27ecfdc3a8728059403f36aa", | |
| "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290" | |
| }, | |
| { | |
| "run": "runs/FULLextfinal_era_r5", | |
| "replicate": 5, | |
| "seed": 105, | |
| "checkpoint_sha256": "cae99aaee1adf7a72b09ab4416f3fc7834652191f1d8e298a88900908508ac05", | |
| "config_sha256": "a29e4ad97b4731e4425eec601821d5a10f2a84f6a80794e9f108a96ae44cf7c8", | |
| "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290" | |
| }, | |
| { | |
| "run": "runs/FULLextfinal_era_r6", | |
| "replicate": 6, | |
| "seed": 106, | |
| "checkpoint_sha256": "be34620989ce330df4b1e311242d4b93499a67d5a04ee8b813d41faa3137459a", | |
| "config_sha256": "eda0c86a4cf575b62576a155569fb2ef032af4e8e38f9873c7bc05d7ef8a0720", | |
| "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290" | |
| }, | |
| { | |
| "run": "runs/FULLextfinal_era_r7", | |
| "replicate": 7, | |
| "seed": 107, | |
| "checkpoint_sha256": "bf42ec8fc7b0c6dee2011ded621a04c85e453a3ce3e896cf6e6eb0a095e64bd5", | |
| "config_sha256": "bbd3216e2e47688797ddc2659001cb7172c0717fc01d83316b11f47481dad49c", | |
| "trained_code_sha256": "1095cd5859ce819840f3e35ead3243d28aae832dbd3f54b04b90d98330493290" | |
| } | |
| ], | |
| "cadence": { | |
| "period_ms": 50.0, | |
| "hz": 20, | |
| "rule": "one step-graph call per 50 ms of simulated time; each tick describes the trailing interval (t - 50 ms, t]; reset the state to zeros at the start of every shot" | |
| }, | |
| "inputs": { | |
| "inputs": { | |
| "shape": [ | |
| "batch", | |
| 25 | |
| ], | |
| "dtype": "float32", | |
| "names": [ | |
| "pinj", | |
| "tinj", | |
| "ech_mw", | |
| "gasa_cal", | |
| "gasb_cal", | |
| "gasc_cal", | |
| "gasd_cal", | |
| "gase_cal", | |
| "bt", | |
| "ip", | |
| "aminor", | |
| "rsurf", | |
| "zsurf", | |
| "kappa", | |
| "tritop", | |
| "tribot", | |
| "drsep", | |
| "rvsout", | |
| "gapin", | |
| "rvsou", | |
| "rvsiu", | |
| "shafranov", | |
| "zeta_ou", | |
| "zeta_ol", | |
| "vloop" | |
| ], | |
| "units": { | |
| "pinj": "MW", | |
| "tinj": "N m", | |
| "ech_mw": "MW", | |
| "gasa_cal": "Torr L/s", | |
| "gasb_cal": "Torr L/s", | |
| "gasc_cal": "Torr L/s", | |
| "gasd_cal": "Torr L/s", | |
| "gase_cal": "Torr L/s", | |
| "bt": "T", | |
| "ip": "MA", | |
| "aminor": "m", | |
| "rsurf": "m", | |
| "zsurf": "m", | |
| "kappa": "dimensionless", | |
| "tritop": "dimensionless", | |
| "tribot": "dimensionless", | |
| "drsep": "m", | |
| "rvsout": "m", | |
| "gapin": "m", | |
| "rvsou": "m", | |
| "rvsiu": "m", | |
| "shafranov": "m", | |
| "zeta_ou": "dimensionless", | |
| "zeta_ol": "dimensionless", | |
| "vloop": "V" | |
| }, | |
| "sources": { | |
| "pinj": "PtData bmspinj: neutral-beam injected power, all sources", | |
| "tinj": "PtData bmstinj: neutral-beam injected torque", | |
| "ech_mw": "MDSplus \\RF::ECHPWRC: calibrated total ECH power injected", | |
| "gasa_cal": "MDSplus NEUTRALS GASFLOW.GASA:FLOW: calibrated gas flow, valve A", | |
| "gasb_cal": "MDSplus NEUTRALS GASFLOW.GASB:FLOW: calibrated gas flow, valve B", | |
| "gasc_cal": "MDSplus NEUTRALS GASFLOW.GASC:FLOW: calibrated gas flow, valve C", | |
| "gasd_cal": "MDSplus NEUTRALS GASFLOW.GASD:FLOW: calibrated gas flow, valve D", | |
| "gase_cal": "MDSplus NEUTRALS GASFLOW.GASE:FLOW: calibrated gas flow, valve E", | |
| "bt": "PtData bt: vacuum toroidal field, signed", | |
| "ip": "PtData ip: measured plasma current (amperes / 1e6)", | |
| "aminor": "EFIT01 AMINOR: minor radius", | |
| "rsurf": "EFIT01 RSURF: major radius of the boundary's geometric centre", | |
| "zsurf": "EFIT01 ZSURF: height of the boundary's geometric centre", | |
| "kappa": "EFIT01 KAPPA: elongation", | |
| "tritop": "EFIT01 TRITOP: upper triangularity", | |
| "tribot": "EFIT01 TRIBOT: lower triangularity", | |
| "drsep": "EFIT01 DRSEP: separatrix separation at the outer midplane, clipped to +-0.1 m per slice", | |
| "rvsout": "EFIT01 RVSOUT: major radius of the outer (lower) strike point", | |
| "gapin": "EFIT01 GAPIN: inner gap", | |
| "rvsou": "EFIT01 RVSOU: major radius of the upper outer strike point", | |
| "rvsiu": "EFIT01 RVSIU: major radius of the upper inner strike point", | |
| "shafranov": "EFIT01 R0 - RSURF: Shafranov shift", | |
| "zeta_ou": "Luce squareness, outer-upper quadrant, from the EFIT01 boundary vertices", | |
| "zeta_ol": "Luce squareness, outer-lower quadrant, from the EFIT01 boundary vertices", | |
| "vloop": "PtData VLOOP: loop voltage" | |
| }, | |
| "grid_rule": { | |
| "pinj": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "tinj": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "ech_mw": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "gasa_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "gasb_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "gasc_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "gasd_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "gase_cal": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "bt": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "ip": "plain mean of the three newest 20 ms samples at or before the tick, after a causal low-pass and hold onto 20 ms (INPUT_CONTRACT 3.1)", | |
| "aminor": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "rsurf": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "zsurf": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "kappa": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "tritop": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "tribot": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "drsep": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "rvsout": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "gapin": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "rvsou": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "rvsiu": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "shafranov": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "zeta_ou": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "zeta_ol": "mean of the per-slice values of the EFIT01 slices in (t - 50 ms, t] (INPUT_CONTRACT 3.2)", | |
| "vloop": "mean of the native samples in (t - 50 ms, t] (INPUT_CONTRACT 3.3)" | |
| }, | |
| "zeroed_when_indicator_is_0": { | |
| "pinj": [], | |
| "tinj": [], | |
| "ech_mw": [], | |
| "gasa_cal": [], | |
| "gasb_cal": [], | |
| "gasc_cal": [], | |
| "gasd_cal": [], | |
| "gase_cal": [], | |
| "bt": [], | |
| "ip": [], | |
| "aminor": [ | |
| "efit_valid" | |
| ], | |
| "rsurf": [ | |
| "efit_valid" | |
| ], | |
| "zsurf": [ | |
| "efit_valid" | |
| ], | |
| "kappa": [ | |
| "efit_valid" | |
| ], | |
| "tritop": [ | |
| "efit_valid" | |
| ], | |
| "tribot": [ | |
| "efit_valid" | |
| ], | |
| "drsep": [ | |
| "efit_valid" | |
| ], | |
| "rvsout": [ | |
| "efit_valid", | |
| "rvsout_present" | |
| ], | |
| "gapin": [ | |
| "efit_valid" | |
| ], | |
| "rvsou": [ | |
| "efit_valid", | |
| "rvsou_present" | |
| ], | |
| "rvsiu": [ | |
| "efit_valid", | |
| "rvsiu_present" | |
| ], | |
| "shafranov": [ | |
| "efit_valid" | |
| ], | |
| "zeta_ou": [ | |
| "efit_valid" | |
| ], | |
| "zeta_ol": [ | |
| "efit_valid" | |
| ], | |
| "vloop": [ | |
| "vloop_valid" | |
| ] | |
| }, | |
| "note": "Physical units, contract order (docs/INPUT_CONTRACT.md \u00a72). Where a governing indicator is 0 the value is ignored (any number, or NaN). NaN anywhere is read as the training mean, so never pass NaN for a value you have." | |
| }, | |
| "indicators": { | |
| "shape": [ | |
| "batch", | |
| 5 | |
| ], | |
| "dtype": "float32", | |
| "values": "0 or 1, per tick", | |
| "names": [ | |
| "efit_valid", | |
| "vloop_valid", | |
| "rvsout_present", | |
| "rvsou_present", | |
| "rvsiu_present" | |
| ], | |
| "meaning": { | |
| "efit_valid": "1 when at least one usable EFIT slice lies in (t - 50 ms, t]; 0 otherwise", | |
| "vloop_valid": "1 when at least one loop-voltage sample lies in (t - 50 ms, t]; 0 otherwise", | |
| "rvsout_present": "1 when at least one slice in the window has a real outer strike point; 0 otherwise", | |
| "rvsou_present": "1 when at least one slice in the window has a real upper outer strike point; 0 otherwise", | |
| "rvsiu_present": "1 when at least one slice in the window has a real upper inner strike point; 0 otherwise" | |
| } | |
| }, | |
| "available": { | |
| "shape": [ | |
| "batch", | |
| 25 | |
| ], | |
| "dtype": "float32", | |
| "values": "0 or 1, per shot", | |
| "names": [ | |
| "pinj", | |
| "tinj", | |
| "ech_mw", | |
| "gasa_cal", | |
| "gasb_cal", | |
| "gasc_cal", | |
| "gasd_cal", | |
| "gase_cal", | |
| "bt", | |
| "ip", | |
| "aminor", | |
| "rsurf", | |
| "zsurf", | |
| "kappa", | |
| "tritop", | |
| "tribot", | |
| "drsep", | |
| "rvsout", | |
| "gapin", | |
| "rvsou", | |
| "rvsiu", | |
| "shafranov", | |
| "zeta_ou", | |
| "zeta_ol", | |
| "vloop" | |
| ], | |
| "default": 1, | |
| "note": "1 = a usable record of this channel exists for the shot (the normal case). 0 = no record for the whole shot: the value is ignored and the model receives the flag, as it did in training for missing records. Keep it constant within a shot." | |
| } | |
| }, | |
| "outputs": { | |
| "predictions": { | |
| "shape": [ | |
| "batch", | |
| 9 | |
| ], | |
| "dtype": "float32", | |
| "names": [ | |
| "ne", | |
| "te_ped", | |
| "ti_ped", | |
| "t_rot_ped", | |
| "ne_knee", | |
| "te_knee", | |
| "rho_sym", | |
| "ne_top_loc", | |
| "hmode" | |
| ], | |
| "units": { | |
| "ne": "1e19 m^-3", | |
| "te_ped": "keV", | |
| "ti_ped": "keV", | |
| "t_rot_ped": "krad/s", | |
| "ne_knee": "1e19 m^-3", | |
| "te_knee": "keV", | |
| "rho_sym": "rho (normalised radius)", | |
| "ne_top_loc": "rho (normalised radius)", | |
| "hmode": "probability in [0, 1]" | |
| }, | |
| "meaning": { | |
| "ne": "electron density at rho = 0.85", | |
| "te_ped": "electron temperature at rho = 0.85", | |
| "ti_ped": "ion temperature at rho = 0.85", | |
| "t_rot_ped": "toroidal rotation at rho = 0.85", | |
| "ne_knee": "electron density on the pedestal fit at its knee (H-mode only)", | |
| "te_knee": "electron temperature on its pedestal fit at its knee (H-mode only)", | |
| "rho_sym": "symmetry point of the density pedestal fit (H-mode only)", | |
| "ne_top_loc": "knee (pedestal top) of the density pedestal fit (H-mode only)", | |
| "hmode": "the plasma is in H-mode (sigmoid of the averaged or single logit)" | |
| } | |
| }, | |
| "hmode_gated_heads": [ | |
| "ne_knee", | |
| "te_knee", | |
| "rho_sym", | |
| "ne_top_loc" | |
| ], | |
| "hmode_gated_note": "Trained on H-mode ticks only and undefined in L-mode; the graph emits a number anyway. Report them only where predictions[hmode] >= threshold; otherwise treat them as undefined, never as 0.", | |
| "hmode_thresholds": { | |
| "frozen": { | |
| "balanced": 0.53, | |
| "conservative": 0.47 | |
| }, | |
| "definitions": { | |
| "balanced": "maximum Youden's J on validation (the best trade between missed H-mode and admitted L-mode ticks)", | |
| "conservative": "the lowest threshold keeping L-mode ticks at or below 5 % of admitted validation ticks" | |
| }, | |
| "set_on": "the mean of the eight finals' hmode logits, in-era validation split", | |
| "source": "receipts/G7_export_inputs/hmode_thresholds_both_forms.json (DECISIONS D64)", | |
| "source_sha256": "b9c027ec369a251dcb48bbc7c444bc39628d9e9ad24b35bc1ce1845705b6a3d1", | |
| "note": "Gate the four H-mode-only heads on predictions[hmode] >= threshold; MODEL_CARD.md \u00a76." | |
| } | |
| }, | |
| "graphs": { | |
| "step": { | |
| "file": "fuse_efit_averaged_step.onnx", | |
| "purpose": "one 50 ms tick per call; unbounded shot length", | |
| "inputs": { | |
| "inputs": [ | |
| "batch", | |
| 25 | |
| ], | |
| "indicators": [ | |
| "batch", | |
| 5 | |
| ], | |
| "available": [ | |
| "batch", | |
| 25 | |
| ], | |
| "conv_state": [ | |
| 48, | |
| "batch", | |
| 1792, | |
| 3 | |
| ], | |
| "ssm_state": [ | |
| 48, | |
| "batch", | |
| 12, | |
| 128, | |
| 64 | |
| ] | |
| }, | |
| "outputs": { | |
| "predictions": [ | |
| "batch", | |
| 9 | |
| ], | |
| "conv_state_out": [ | |
| 48, | |
| "batch", | |
| 1792, | |
| 3 | |
| ], | |
| "ssm_state_out": [ | |
| 48, | |
| "batch", | |
| 12, | |
| 128, | |
| 64 | |
| ] | |
| } | |
| }, | |
| "sequence": { | |
| "file": "fuse_efit_averaged_sequence.onnx", | |
| "seq_len": 256, | |
| "purpose": "a whole window of exactly seq_len ticks; right-pad a shorter shot (any finite values, indicators 1) and keep the first K outputs, which is exact because the model is causal; use the step graph for longer shots", | |
| "inputs": { | |
| "inputs": [ | |
| "batch", | |
| 256, | |
| 25 | |
| ], | |
| "indicators": [ | |
| "batch", | |
| 256, | |
| 5 | |
| ], | |
| "available": [ | |
| "batch", | |
| 25 | |
| ] | |
| }, | |
| "outputs": { | |
| "predictions": [ | |
| "batch", | |
| 256, | |
| 9 | |
| ] | |
| } | |
| } | |
| }, | |
| "state": { | |
| "conv_state": [ | |
| "n_members x n_layers", | |
| "batch", | |
| 1792, | |
| 3 | |
| ], | |
| "ssm_state": [ | |
| "n_members x n_layers", | |
| "batch", | |
| 12, | |
| 128, | |
| 64 | |
| ], | |
| "leading_axis": 48, | |
| "n_members": 8, | |
| "n_layers": 6, | |
| "initial": "all zeros at the start of every shot", | |
| "bytes_per_shot": 19906560, | |
| "note": "Opaque: store what the step graph returns and pass it back on the next call. The two forms differ only in the leading axis of these two tensors." | |
| }, | |
| "architecture": { | |
| "family": "Mamba-2 state-space sequence model", | |
| "d_model": 768, | |
| "n_layers": 6, | |
| "d_state": 64, | |
| "d_conv": 4, | |
| "expand": 2, | |
| "headdim": 128, | |
| "nheads": 12, | |
| "ngroups": 2, | |
| "d_inner": 1536, | |
| "conv_dim": 1792, | |
| "chunk_size": 100, | |
| "n_inputs_trunk": 30, | |
| "n_params_per_member": 22882785, | |
| "n_members": 8 | |
| }, | |
| "input_transform": { | |
| "clip_sigma": 20.0, | |
| "std_floor": 1e-06, | |
| "file": "norms.json", | |
| "applied": "inside the graphs" | |
| }, | |
| "dtype": "float32", | |
| "onnx_opset": 17, | |
| "documentation": "docs/EXPORT.md, docs/INPUT_CONTRACT.md, MODEL_CARD.md" | |
| } | |