Onnx support for Julia ML frameworks

This seems like it’s becoming a thing. https://onnx.ai/getting-started

Any packages providing support for this?


Mike is working on something similar for deeplearn.js here but I don’t know of any existing work for onnx.

Thanks for the reference. Getting deep networks deployed onto web/mobile/embedded devices is a hard problem. Mostly, due to lack of a common standard. In the past I played around with pmml files and subsequently http://dmg.org/pfa/index.html. But it was too hard for me. Hoping for a smoother experience in the near future.

PFA isn’t fully baked yet, and PMML can be frustrating. I had to extend PMML for it to be really useful, but then it wasn’t a standard anymore. The extension was to communicate cutoff thresholds for deployment.

A lot of it comes down to pre- and post-processing needs, rather than communicating the model itself. If you allow that requirement in, it ends up creating an entire new programming/data manipulation language. We didn’t.

A project I’m working on just dropped using PMML for years, in favor of a proprietary JSON format. The main driver in addition to speed was the need to support the communication of model context and version history for governance reasons.

So the question is still wide open on how to communicate models between systems. Lots of people solve it by staying in one system.

there is a new package, but not sure how mature it is.

1 Like

2 years since then, and that package seems dead. I tried to use it and filed an issue, but I don’t see any activity on the code in the last year. There is also ONNXmutable, but that’s also based on ONNX.jl (I don’t know to which extent).

Seems like there have been a few non-code changes recently. Might be worth pinging @ayush-1506 to clarify?

I posted some more info about ONNXmutable in the announcement thread.

Tl;dr is that ONNXmutable pretty much only uses the protos from ONNX.jl, so aside from some annoying warnings from the deprecated DataFlow package ONNXmutable is fully functional (barring stated limitations and yet undisovered bugs ofc) and a model which can’t be loaded in ONNX.jl might very well load with ONNXmutable.

I still think it would be good to get an understanding of whether ONNX.jl is actually maintained so that it can be archived or merged with, say, ONNXmutable if not. There are weekly questions about saving/loading where ONNX is brought up, and to have the “official” (i.e. FluxML org) solution non-functional is a bad look (goodness knows we need less ammunition for the “Flux/Julia is not mature enough for real-world use” crowd).


Probably worth stating that in industry ONNX is somewhat of a big deal. Might be a missing cornerstone for many people adopting the toolset. Letting people prototype in julia and export to ONNX could be a foot in the door for some groups. Otherwise, people are wasting a lot of electrons(rebuilding and retraining) or investing pretty heavily in something new (most managers don’t like that).