reference

ExtendedReferenceEvaluator

class experimental_experiment.reference.ExtendedReferenceEvaluator(proto: Any, opsets: Dict[str, int] | None = None, functions: List[ReferenceEvaluator | FunctionProto] | None = None, verbose: int = 0, new_ops: List[OpRun] | None = None, **kwargs)[source]

This class replaces the python implementation by custom implementation. The evaluator allows to test scenarios outside what an onnx backend bound to the official onnx operators definition could do such as optimization patterns involving onnxruntime contrib operators.

from experimental_experiment.reference import ExtendedReferenceEvaluator
ref = ExtendedReferenceEvaluator(...)

The class overloads or adds the following operators by default:

<<<

import pprint
from experimental_experiment.reference import ExtendedReferenceEvaluator

pprint.pprint(ExtendedReferenceEvaluator.default_ops)

>>>

    [<class 'experimental_experiment.reference.ops.op_add_add_mul_mul.AddAdd'>,
     <class 'experimental_experiment.reference.ops.op_add_add_mul_mul.AddMul'>,
     <class 'experimental_experiment.reference.ops.op_add_add_mul_mul.AddSharedInput'>,
     <class 'experimental_experiment.reference.ops.op_concat.Concat'>,
     <class 'experimental_experiment.reference.ops.op_cast_like.CastLike_15'>,
     <class 'experimental_experiment.reference.ops.op_cast_like.CastLike_19'>,
     <class 'experimental_experiment.reference.ops.op_constant_of_shape.ConstantOfShape'>,
     <class 'experimental_experiment.reference.ops.op_fused_matmul.FusedMatMul'>,
     <class 'experimental_experiment.reference.ops.op_gather_grad.GatherGrad'>,
     <class 'experimental_experiment.reference.ops.op_scatternd_of_shape.MaskedScatterNDOfShape'>,
     <class 'experimental_experiment.reference.ops.op_memcpy_host.MemcpyFromHost'>,
     <class 'experimental_experiment.reference.ops.op_memcpy_host.MemcpyToHost'>,
     <class 'experimental_experiment.reference.ops.op_add_add_mul_mul.MulAdd'>,
     <class 'experimental_experiment.reference.ops.op_add_add_mul_mul.MulMul'>,
     <class 'experimental_experiment.reference.ops.op_add_add_mul_mul.MulSharedInput'>,
     <class 'experimental_experiment.reference.ops.op_mul_sigmoid.MulSigmoid'>,
     <class 'experimental_experiment.reference.ops.op_add_add_mul_mul.MulSub'>,
     <class 'experimental_experiment.reference.ops.op_negxplus1.NegXplus1'>,
     <class 'experimental_experiment.reference.ops.op_quick_gelu.QuickGelu'>,
     <class 'experimental_experiment.reference.ops.op_replace_zero.ReplaceZero'>,
     <class 'experimental_experiment.reference.ops.op_rotary.Rotary'>,
     <class 'experimental_experiment.reference.ops.op_scatter_elements.ScatterElements'>,
     <class 'experimental_experiment.reference.ops.op_scatternd_of_shape.ScatterNDOfShape'>,
     <class 'experimental_experiment.reference.ops.op_simplified_layer_normalization.SimplifiedLayerNormalization'>,
     <class 'experimental_experiment.reference.ops.op_slice.Slice_1'>,
     <class 'experimental_experiment.reference.ops.op_slice.Slice_10'>,
     <class 'experimental_experiment.reference.ops.op_add_add_mul_mul.SubMul'>,
     <class 'experimental_experiment.reference.ops.op_transpose_cast.Transpose2DCastFP16'>,
     <class 'experimental_experiment.reference.ops.op_transpose_cast.Transpose2DCastFP32'>,
     <class 'experimental_experiment.reference.ops.op_tri_matrix.TriMatrix'>]
run(*args, **kwargs)[source]

See onnx.reference.ReferenceEvaluator.run().

Kernels

class experimental_experiment.reference.evaluator.AddAdd(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.AddMul(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.AddSharedInput(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.Concat(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.CastLike_15(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.CastLike_19(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.ConstantOfShape(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.FusedMatMul(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.GatherGrad(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.MaskedScatterNDOfShape(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.MemcpyFromHost(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.MemcpyToHost(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.MulAdd(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.MulMul(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.MulSharedInput(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.MulSigmoid(onnx_node, run_params)[source]
class experimental_experiment.reference.evaluator.MulSub(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.NegXplus1(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.QuickGelu(onnx_node, run_params)[source]
class experimental_experiment.reference.evaluator.ReplaceZero(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.Rotary(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.ScatterElements(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.ScatterNDOfShape(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.SimplifiedLayerNormalization(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.Slice_1(onnx_node, run_params)[source]
class experimental_experiment.reference.evaluator.Slice_10(onnx_node, run_params)[source]
class experimental_experiment.reference.evaluator.SubMul(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.Transpose2DCastFP16(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.Transpose2DCastFP32(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]
class experimental_experiment.reference.evaluator.TriMatrix(onnx_node: NodeProto, run_params: dict[str, Any], schema: Any | None = None)[source]

OrtEval

class experimental_experiment.reference.OrtEval(proto: str | ModelProto, providers: str | List[str] | None = None, options: onnxruntime.SessionOptions | None = None, verbose: int = 0, whole: bool = False, incremental: bool = False, optimized_model_filepath: str | None = None)[source]

This class loads an onnx model and the executes one by one the nodes with onnxruntime. This class is mostly meant for debugging.

Parameters:
  • proto – ModelProto or filaname

  • providers – providers

  • options – session options

  • verbose – verbosity

  • whole – run the whole model instead instead of node by node

  • incremental – run the model node by node, but for every node, executes the graph up to that node

  • optimized_model_filepath – export the optimized graph

run(outputs: List[str] | None, feed_inputs: Dict[str, Any]) List[Any][source]

Runs the model. It only works with numpy arrays.

Parameters:
  • outputs – required outputs or None for all

  • feed_inputs – inputs

Returns:

outputs

run_dlpack(outputs: List[str] | None, feed_inputs: Dict[str, Any]) List[Any][source]

Runs the model using run_with_ortvaluevector. It only works with torch.Tensor.

Parameters:
  • outputs – required outputs or None for all

  • feed_inputs – inputs

Returns:

outputs

from_array_extended

experimental_experiment.reference.from_array_extended(tensor: ndarray, name: str | None = None) TensorProto[source]

Converts an array into a TensorProto.

Parameters:
  • tensor – numpy array

  • name – name

Returns:

TensorProto