Forge Pump Surrogate — Multi-runtime

A 1,478-parameter, clean-room pump surrogate exported from one PyTorch MLP to four deployable formats:

Runtime Artifact
ONNX Runtime / ONNX Runtime Web onnx/model.onnx
PyTorch pytorch/model.ts, pytorch/model_state.pt
TensorFlow tensorflow/model.keras
LiteRT / TensorFlow Lite tensorflow/model.tflite

The architecture is a 6 → 32 → 32 → 6 ReLU MLP with input/output normalization embedded in the exported graph. It was trained only on forge-pump-digital-twin-synthetic.

Inputs and outputs

Input order:

speed_fraction, static_head_m, system_k, voltage_fraction,
ambient_temp_c, inlet_pressure_bar

Output order:

flow_m3h, total_head_m, input_power_kw, winding_temp_c,
npsh_margin_m, efficiency_fraction

Test-set metrics

These scores measure approximation of a deterministic synthetic generator—not field accuracy.

Target MAE RMSE R²
Flow (m³/h) 0.08441 0.11749 0.99903
Total head (m) 0.59088 0.83321 0.99914
Input power (kW) 0.03165 0.05005 0.99814
Winding temperature (°C) 0.26721 0.40810 0.99917
NPSH margin (m) 0.07605 0.10571 0.99977
Efficiency fraction 0.00361 0.00701 0.99751

Cross-runtime gate

Thirty-two frozen test vectors passed an absolute tolerance of 1e-3:

Comparison against PyTorch Maximum absolute difference
ONNX Runtime 1.5259e-5
TensorFlow 1.5259e-5
LiteRT/TFLite 1.5259e-5

Exact receipts are in conformance_receipt.json, test_vectors.json, and metrics.json.

ONNX CPU example

import numpy as np
import onnxruntime as ort

session = ort.InferenceSession("onnx/model.onnx", providers=["CPUExecutionProvider"])
x = np.array([[0.80, 35.0, 0.25, 1.0, 25.0, 1.2]], dtype=np.float32)
y = session.run(None, {"features": x})[0]
print(y)

edge/inference_onnx.py adds named inputs/outputs. edge/tag_map.yml shows generic, read-only examples for OPC UA, Modbus input registers, and Siemens S7 symbolic tags. Siemens is a trademark of Siemens AG; this project is independent and is not endorsed by Siemens.

Measured runtime scope

One CPU-only container measurement produced ONNX batch-1 median 0.0061 ms and p95 0.0067 ms; PyTorch batch-1 median was 0.0335 ms. These are smoke-test receipts, not device latency SLOs. See latency_receipt.json for the environment and repetitions.

CUDA was not available in the validation environment, so this release makes no CUDA performance or kernel claim.

Safety boundary

This repository is read-only advisory software. It contains no network client and no PLC, OPC UA, S7, or Modbus write call. It must not bypass or replace PLC/SIS/ESD logic, permissives, interlocks, hardwired protection, or operator authority. The example thresholds are demonstration values, not equipment setpoints.

Provenance

All data and equations were created clean-room for this public release. No customer telemetry, vendor curves, CAD, BOM, nameplate, plant identifier, private model weight, or proprietary source is included.

Rebuild and verify

The generator, training/export script, runtime adapters, manifests, hashes, history, and tests are included. The published build was verified with PyTorch 2.13.0, ONNX Runtime 1.28.0, TensorFlow 2.21.0, and a CPU-only execution provider.

Interactive browser demo: forge-pump-edge-twin-lab

Measured evaluation review — 2026-10-07

All eight vectors supplied in the public test_vectors.json pass PyTorch/ONNX/saved-output comparison at the original 1e-3 bound. The older conformance receipt reports 32 vectors; this review does not replay the other 24 from a saved public vector file.

Report and retained failures · Whole-profile evaluation scope. No external rank-one position or industrial deployment qualification is established. Original scientific objects and model weights are preserved.

Downloads last month
44
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train sankalpsthakur/forge-pump-surrogate-multiruntime

Space using sankalpsthakur/forge-pump-surrogate-multiruntime 1