Open Neural Network Exchange (ONNX) is an open ecosystem that empowers AI developers to choose the right tools as their project evolves. ONNX provides an open source format for AI models, both deep learning and traditional ML. It defines an extensible computation graph model, as well as definitions of built-in operators and standard data types. Currently we focus on the capabilities needed for inferencing (scoring).
ONNX is widely supported and can be found in many frameworks, tools, and hardware. Enabling interoperability between different frameworks and streamlining the path from research to production helps increase the speed of innovation in the AI community. We invite the community to join us and further evolve ONNX.
Learn about the ONNX spec
- ONNX intermediate representation spec
- Versioning principles of the spec
- Operators documentation
- Python API Overview
Programming utilities for working with ONNX Graphs
Check out our contribution guide to get started.
If you think some operator should be added to ONNX specification, please read this document.
We encourage you to open Issues, or use Gitter for more real-time discussion:
conda install -c conda-forge onnx
Linux and MacOS
You will need an install of protobuf and numpy to build ONNX. One easy way to get these dependencies is via Anaconda:
# Use conda-forge protobuf, as default doesn't come with protoc conda install -c conda-forge protobuf numpy
You can then install ONNX from PyPi (Note: Set environment variable
ONNX_ML=1 for onnx-ml):
pip install onnx
You can also build and install ONNX locally from source code:
git clone https://github.com/onnx/onnx.git cd onnx git submodule update --init --recursive python setup.py install
Note: When installing in a non-Anaconda environment, make sure to install the Protobuf compiler before running the pip installation of onnx. For example, on Ubuntu:
sudo apt-get install protobuf-compiler libprotoc-dev pip install onnx
When building on Windows it is highly recommended that you also build protobuf locally as a static library. The version distributed with conda-forge is a DLL and this is a conflict as ONNX expects it to be a static lib.
Instructions to build protobuf and ONNX on windows
Step 1 : Build protobuf locally
git clone https://github.com/protocolbuffers/protobuf.git cd protobuf git checkout 3.9.x cd cmake # Explicitly set -Dprotobuf_MSVC_STATIC_RUNTIME=OFF to make sure protobuf does not statically link to runtime library cmake -G "Visual Studio 15 2017 Win64" -Dprotobuf_MSVC_STATIC_RUNTIME=OFF -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_EXAMPLES=OFF -DCMAKE_INSTALL_PREFIX=<protobuf_install_dir> msbuild protobuf.sln /m /p:Configuration=Release msbuild INSTALL.vcxproj /p:Configuration=Release
Step 2: Build ONNX
# Get ONNX git clone https://github.com/onnx/onnx.git cd onnx git submodule update --init --recursive # Set environment variables to find protobuf and turn off static linking of ONNX to runtime library. # Even better option is to add it to user\system PATH so this step can be performed only once. # For more details check https://docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library?view=vs-2017 set PATH=<protobuf_install_dir>\bin;%PATH% set USE_MSVC_STATIC_RUNTIME=0 # Optional : Set environment variable `ONNX_ML=1` for onnx-ml # Build ONNX python setup.py install
If you do not want to build protobuf and instead want to use protobuf from conda forge then follow these instructions. However please note : This method is just added as a convenience for users and there is very limited support from ONNX team when using this method.
Instructions to build ONNX on windows in anaconda environment
# Use conda-forge protobuf conda install -c conda-forge protobuf=3.9.2 numpy # Get ONNX git clone https://github.com/onnx/onnx.git cd onnx git submodule update --init --recursive # Set environment variable for ONNX to use protobuf shared lib set CMAKE_ARGS="-DONNX_USE_PROTOBUF_SHARED_LIBS=ON" # Build ONNX # Optional : Set environment variable `ONNX_ML=1` for onnx-ml python setup.py install
After installation, run
python -c "import onnx"
to verify it works. Note that this command does not work from a source checkout directory; in this case you'll see:
ModuleNotFoundError: No module named 'onnx.onnx_cpp2py_export'
Change into another directory to fix this error.
ONNX uses pytest as test driver. In order to run tests, first you need to install pytest:
pip install pytest nbval
After installing pytest, do
to run tests.
Check out contributor guide for instructions.