models
ONNX inference backend for Bitfount models.
This module provides an inference-only ONNXModel
that integrates with Bitfount
infrastructure (datastructure, databunch, dataloaders) and executes ONNX graphs via
onnxruntime on CPU, CUDA GPUs, or Apple Silicon (CoreML provider when available).
Classes
ONNXModel
class ONNXModel( *, datastructure: DataStructure, schema: BitfountSchema, batch_size: int = 32, session_config: Optional[ONNXSessionConfig] = None, **kwargs: Any,):
ONNX inference model using onnxruntime.
This implementation is inference-only. It creates a Bitfount BitfountDataBunch
and test dataloader for the provided datasource, converts any backend tensors to
numpy arrays, and feeds them to an ONNX Runtime session.
The entrypoint for execution is predict
, which returns a PredictReturnType
.
Training and evaluation are not supported for this backend.
Initialise an ONNXModel.
Arguments
onnx_path
: Path to the.onnx
model file.batch_size
: Batch size to use for test dataloader. Defaults to 32.session_config
: Optional onnxruntime session configuration.input_names
: Optional explicit ONNX input name ordering.output_names
: Optional explicit ONNX output name ordering.input_build_fn
: Optional callable to map a dataloader batch into a{input_name: np.ndarray}
: feed dictionary for onnxruntime. If omitted, a default heuristic is used.datastructure
: BitfountDataStructure
describing inputs/targets.schema
: BitfountBitfountSchema
associated with the datasource.**kwargs
: Forwarded to\_BaseModel
base class.
Variables
initialised : bool
- Return True if the model has been initialised.
Methods
deserialize
def deserialize(self, content: Union[str, os.PathLike, bytes], **_: Any) ‑> None:
Deserialise ONNX model from a path or bytes content.
Arguments
content
: Path to the ONNX file or a bytes object containing the model.
initialise_model
def initialise_model( self, data: Optional[BaseSource] = None, data_splitter: Optional[DatasetSplitter] = None, context: Optional[TaskContext] = None,) ‑> None:
Initialise ORT session and prepare dataloaders for inference.
Arguments
data
: Optional datasource for inference. If provided, a test dataloader is created using an inference-only splitter.data_splitter
: Optional splitter to use instead of_InferenceSplitter
.context
: Optional execution context (unused).
predict
def predict( self, data: Optional[BaseSource] = None, **_: Any,) ‑> PredictReturnType:
Run inference and return predictions.
Arguments
data
: Optional datasource to run inference on. If provided, the model may be (re-)initialised to use this datasource.
Returns PredictReturnType containing predictions and optional data keys. Data keys must be present if the datasource is file-based.
Raises
ValueError
: If no test dataloader is available.
ONNXSessionConfig
class ONNXSessionConfig( providers: Optional[list[str]] = None, intra_op_num_threads: Optional[int] = None, inter_op_num_threads: Optional[int] = None, graph_optimization_level: ort.GraphOptimizationLevel = <GraphOptimizationLevel.ORT_ENABLE_ALL: 99>,):
Configuration for ONNX Runtime sessions.
Arguments
providers
: Preferred execution providers in order of priority. If not provided, a set of sensible defaults is auto-selected based onavailability
: CUDA, then CoreML (Apple Silicon), then CPU.intra_op_num_threads
: Threads within a single operator. Defaults to onnxruntime's internal default when None.inter_op_num_threads
: Threads across independent operators. Defaults to onnxruntime's internal default when None.graph_optimization_level
: onnxruntime graph optimisations; defaults to ORT_ENABLE_ALL.
Variables
- static
graph_optimization_level : onnxruntime.capi.onnxruntime_pybind11_state.GraphOptimizationLevel
- static
inter_op_num_threads : Optional[int]
- static
intra_op_num_threads : Optional[int]
- static
providers : Optional[list]