ONNX Runtime integration for cross-platform ML inference.
This module provides an Elixir API for using ONNX Runtime, which can leverage platform-specific execution providers:
- iOS: CoreML EP (Apple Neural Engine)
- Android: NNAPI EP (Android Neural Networks API)
- Fallback: CPU EP (works everywhere)
Prerequisites
- ONNX model file (.onnx)
- ONNX Runtime library for your platform
Converting models to ONNX
You can convert models from other formats:
# From Axon (via Elixir)
{init_fn, predict_fn} = Axon.build(model)
params = init_fn.(Nx.template({1, 784}, :f32), %{})
# Export to ONNX (requires ortex or similar)
# Then use ONNX Runtime for inferenceUsage
# Create session from ONNX model
{:ok, session_id} = Dala.ML.ONNX.create_session(model_data)
# Run inference
{:ok, output_binary} = Dala.ML.ONNX.run(session_id, input_binary)
# Convert output to Nx tensor
output = Nx.from_binary(output_binary, {:f32, shape})
# Clean up when done
:ok = Dala.ML.ONNX.destroy_session(session_id)
Summary
Functions
Checks if ONNX Runtime is available on this platform.
Creates an ONNX session from model data.
Destroys an ONNX session and frees resources.
Convenience function: Load model from file and create session.
Runs inference on an ONNX session.
Functions
Checks if ONNX Runtime is available on this platform.
Creates an ONNX session from model data.
Parameters
model_data: Binary ONNX model data (from file or memory)
Returns
{:ok, session_id} on success
:not_supported on unsupported platforms
:error on failure
Destroys an ONNX session and frees resources.
Convenience function: Load model from file and create session.
Runs inference on an ONNX session.
Parameters
session_id: Session ID fromcreate_session/1input: Binary input data (Nx tensor serialized to binary)
Returns
{:ok, output_binary} on success
:not_supported on unsupported platforms
:error on failure