PyTorch to ONNX Exporter

Experimental torch ONNX exporter. Compatible with torch>=2.1.
[!WARNING]
This is an experimental project and is not designed for production use.
Use torch.onnx.export
for these purposes.
Installation
pip install --upgrade torch-onnx
Usage
import torch
import torch_onnx
from onnxscript import ir
import onnx
exported = torch.export.export(...)
model = torch_onnx.exported_program_to_ir(exported)
proto = ir.to_proto(model)
onnx.save(proto, "model.onnx")
torch_onnx.patch_torch(report=True, verify=True, profile=True)
torch.onnx.export(...)
torch_onnx.analyze(exported)
Design
{dynamo/jit} -> {ExportedProgram} -> {torchlib} -> {ONNX IR} -> {ONNX}
- Use ExportedProgram
- Rely on robustness of the torch.export implementation
- Reduce complexity in the exporter
- This does not solve dynamo limitations, but it avoids introducing additional breakage by running fx passes
- Flat graph; Scope info as metadata, not functions
- Because existing tools are not good at handling them
- Eager optimization where appropriate
- Because exsiting tools are not good at optimizing
- Drop in replacement for torch.onnx.export
- Build graph eagerly in the exporter
- Give the exporter full control over the graph being built
Why is this doable?