.xbuilder.optimization_options

class experimental_experiment.xbuilder.optimization_options.OptimizationOptions(remove_unused: bool = True, constant_folding: bool | Set[str | Tuple[str, str]] | Tuple[str | Tuple[str, str], ...] = ('Transpose', 'Cast', 'Reshape', 'Concat'), constant_size: int = 1024, constant_fusing: bool = True, remove_identity: bool = True, patterns: str | List[PatternOptimization] = 'default', max_iter: int = -1, recursive: bool = True, stop_after: int = -1, verbose: int = 0, verifies: bool = False, dump_applied_patterns: str | None = None, processor: str = 'CPU', order: OrderAlgorithm | None = None)[source]

Defines all the optimization to apply.

Parameters:
  • remove_unused – remove all unused nodes, this must be true if pattern optimization is enabled

  • constant_folding – folds constant as much as possible, it can be true or set of operator types if it must be restricted to a subset of operators

  • constant_size – all node Constant above this threshold should be defined as initializer

  • remove_identity – remove identity nodes

  • patterns – list of pattern optimization to apply to the graph, it looks a a specific subsequence of nodes in a graph and do some replacements, ‘default’ means a default list of optimization patterns are applied, see below for the most common values

  • constant_fusing – similar node Constant and ConstantOfShape are used, this options avoids creating new nodes when they are the same

  • max_iter – maximum number of iteration when doing pattern optimizations, -1 to let it undefined

  • recursive – optimizes subgraphs and functions as well

  • stop_after – for investigation, stop_after this number of applies patterns, -1 to never stop

  • verbose – verbosity level (for pattern optimization)

  • verifies – run verifications to ensure the model is correct everytime it is modifies, it is mostly to find bugs, it is very slow

  • dump_applied_patterns – dump applied patterns in a folder, the users can check every pattern dumped as a FunctionProto

  • processor – optimization should be made for this processor or this list of processors (comma separated value)

  • order – order algorithm to apply

It is possible to define a precise of the pattern to apply to a model. The value is interpreter by experimental_experiment.xoptim.get_pattern_list().

  • patterns=None: no pattern optimization

  • patterns="TransposeTranspose,TransposeMatMul": applies two patterns

  • patterns=["FusedMatMul"]: applies one pattern

  • patterns=[RotaryEmbeddingPattern(verbose=10)]: applies one pattern with a specific verbosity value

  • patterns="default: applies all patterns modifying standard onnx operators into other standard onnx operators

  • patterns="default+onnxruntime: applies all patterns modifying standard onnx operators into other standard onnx operators as well as patterns fusing nodes into custom operators implemented by onnxruntime

  • patterns="default+onnxruntime+experimental: applies all patterns modifying standard onnx operators into other standard onnx operators, patterns fusing nodes into custom operators implemented by onnxruntime.

Constant folding folds operators Transpose, Cast, Reshape and Concat by default. Concat is often used to create shapes.