An in-memory IR that supports the full ONNX spec, designed for graph construction, analysis and transformation.
Via pip:
pip install onnx-ir
Or from source:
pip install git+https://github.com/onnx/ir-py.git
- Full ONNX spec support: all valid models representable by ONNX protobuf, and a subset of invalid models (so you can load and fix them).
- Low memory footprint: mmap'ed external tensors; unified interface for ONNX TensorProto, Numpy arrays and PyTorch Tensors etc. No tensor size limitation. Zero copies.
- Straightforward access patterns: Access value information and traverse the graph topology at ease.
- Robust mutation: Create as many iterators as you like on the graph while mutating it.
- Speed: Performant graph manipulation, serialization/deserialization to Protobuf.
- Pythonic and familiar APIs: Classes define Pythonic apis and still map to ONNX protobuf concepts in an intuitive way.
- No protobuf dependency: The IR does not require protobuf once the model is converted to the IR representation, decoupling from the serialization format.
- _protocols.py: Interfaces defined for all entities in the IR.
- _core.py: Implementation of the core entities in the IR, including- Model,- Graph,- Node,- Value, and others.
- _enums.py: Definition of the type enums that correspond to the- DataTypeand- AttributeTypein- onnx.proto.
- _name_authority.py: The authority for giving names to entities in the graph, used internally.
- _linked_list.py: The data structure as the node container in the graph that supports robust iteration and mutation. Internal.
- _metadata.py: Metadata store for all entities in the IR.
