onnx-mlir/doc/ImportONNXDefs.md

2.2 KiB

Import ONNX specifications into ONNX MLIR

The specifications of ONNX are defined under onnx/defs directory in ONNX projects. There is a python script onnx/defs/gen_doc.py that automatically generate documents about operations in ONNX (docs/Operations.md). ONNX MLIR modified this script to import ONNX specifications into ONNX MLIR. There are two files generated for ONNX MLIR with the modified gen_doc.py:

  1. src/Dialect/ONNX/ONNXOps.td.inc: Operation defintion for MLIR tablegen. Will be included in src/Dialect/ONNX/ONNXOps.td
  2. src/Builder/OpBuildTable.inc: c code for ONNX MLIR frontend to import operation nodes from ONNX model. Will be included in src/Builder/FrontendDialectTransformer.cpp

How to use the script

  1. Get ONNX. You can use onnx-mlir/third_party/onnx
  2. Perform the following steps (assume that we use onnx-mlir/third_party/onnx):
$ cd onnx-mlir
$ cp doc/gen_doc.py third_party/onnx/onnx/defs/
$ cd third_party/onnx
$ python onnx/defs/gen_doc.py
$ cd ../..
$ cp third_party/onnx/onnx/defs/ONNXOps.td.inc src/Dialect/ONNX/
$ cp third_party/onnx/onnx/defs/OpBuildTable.inc src/Builder/

Consistency

The Operators.md generated by gen_doc.py is copied into doc. Please refer to this specification, not the one in onnx github, to make sure operators are consistent in version with ONNXOps.td.inc.

Customization

In addition to following the ONNX specification, the modified gen_doc.py provides some mechanism for you to customize the output. Several tables are defined at the beginning of the script:

  1. special_attr_defaults: gives attribute special default value.
  2. special_op_handler: creates special import function in frontend_dialect_transformer.cpp. Currently special handler is used for operations with oprational arguments
  3. OpsWithShapeInference: list of operations which have shape inference defined
  4. OpsWithCanonicalizer: list of operations which have canonical form
  5. OpsWithPromotableConstOperands: list of operations which have operands that, if produced by constant operations, should be promoted to become an attribute (via attribute promotion)
  6. custom_builder_ops_list: list of operations which need custom build methods to deduce result types