Skip to main content

Open Neural Network Exchange

Project description

PyPI - Version CI CII Best Practices OpenSSF Scorecard REUSE compliant Ruff Black

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.

Use ONNX

Learn about the ONNX spec

Programming utilities for working with ONNX Graphs

Contribute

ONNX is a community project and the open governance model is described here. We encourage you to join the effort and contribute feedback, ideas, and code. You can participate in the Special Interest Groups and Working Groups to shape the future of ONNX.

Check out our contribution guide to get started.

If you think some operator should be added to ONNX specification, please read this document.

Community meetings

The schedules of the regular meetings of the Steering Committee, the working groups and the SIGs can be found here

Community Meetups are held at least once a year. Content from previous community meetups are at:

Discuss

We encourage you to open Issues, or use Slack (If you have not joined yet, please use this link to join the group) for more real-time discussion.

Follow Us

Stay up to date with the latest ONNX news. [Facebook] [Twitter]

Roadmap

A roadmap process takes place every year. More details can be found here

Installation

Official Python packages

ONNX released packages are published in PyPi.

pip install onnx  # or pip install onnx[reference] for optional reference implementation dependencies

ONNX weekly packages are published in PyPI to enable experimentation and early testing.

vcpkg packages

onnx is in the maintenance list of vcpkg, you can easily use vcpkg to build and install it.

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat # For powershell
./bootstrap-vcpkg.sh # For bash
./vcpkg install onnx

Conda packages

A binary build of ONNX is available from Conda, in conda-forge:

conda install -c conda-forge onnx

Build ONNX from Source

Before building from source uninstall any existing versions of onnx pip uninstall onnx.

c++17 or higher C++ compiler version is required to build ONNX from source. Still, users can specify their own CMAKE_CXX_STANDARD version for building ONNX.

If you don't have protobuf installed, ONNX will internally download and build protobuf for ONNX build.

Or, you can manually install protobuf C/C++ libraries and tools with specified version before proceeding forward. Then depending on how you installed protobuf, you need to set environment variable CMAKE_ARGS to "-DONNX_USE_PROTOBUF_SHARED_LIBS=ON" or "-DONNX_USE_PROTOBUF_SHARED_LIBS=OFF". For example, you may need to run the following command:

Linux:

export CMAKE_ARGS="-DONNX_USE_PROTOBUF_SHARED_LIBS=ON"

Windows:

set CMAKE_ARGS="-DONNX_USE_PROTOBUF_SHARED_LIBS=ON"

The ON/OFF depends on what kind of protobuf library you have. Shared libraries are files ending with *.dll/*.so/*.dylib. Static libraries are files ending with *.a/*.lib. This option depends on how you get your protobuf library and how it was built. And it is default OFF. You don't need to run the commands above if you'd prefer to use a static protobuf library.

Windows

If you are building ONNX from source, it is recommended that you also build Protobuf locally as a static library. The version distributed with conda-forge is a DLL, but ONNX expects it to be a static library. Building protobuf locally also lets you control the version of protobuf. The tested and recommended version is 3.21.12.

The instructions in this README assume you are using Visual Studio. It is recommended that you run all the commands from a shell started from "x64 Native Tools Command Prompt for VS 2019" and keep the build system generator for cmake (e.g., cmake -G "Visual Studio 16 2019") consistent while building protobuf as well as ONNX.

You can get protobuf by running the following commands:

git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git checkout v21.12
cd cmake
cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX=<protobuf_install_dir> -Dprotobuf_MSVC_STATIC_RUNTIME=OFF -Dprotobuf_BUILD_SHARED_LIBS=OFF -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_EXAMPLES=OFF .
msbuild protobuf.sln /m /p:Configuration=Release
msbuild INSTALL.vcxproj /p:Configuration=Release

Then it will be built as a static library and installed to <protobuf_install_dir>. Please add the bin directory(which contains protoc.exe) to your PATH.

set CMAKE_PREFIX_PATH=<protobuf_install_dir>;%CMAKE_PREFIX_PATH%

Please note: if your protobuf_install_dir contains spaces, do not add quotation marks around it.

Alternative: if you don't want to change your PATH, you can set ONNX_PROTOC_EXECUTABLE instead.

set CMAKE_ARGS=-DONNX_PROTOC_EXECUTABLE=<full_path_to_protoc.exe>

Then you can build ONNX as:

git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
# prefer lite proto
set CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
pip install -e . -v

Linux

First, you need to install protobuf. The minimum Protobuf compiler (protoc) version required by ONNX is 3.6.1. Please note that old protoc versions might not work with CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON.

Ubuntu 20.04 (and newer) users may choose to install protobuf via

apt-get install python3-pip python3-dev libprotobuf-dev protobuf-compiler

In this case, it is required to add -DONNX_USE_PROTOBUF_SHARED_LIBS=ON to CMAKE_ARGS in the ONNX build step.

A more general way is to build and install it from source. See the instructions below for more details.

Installing Protobuf from source

Debian/Ubuntu:

  git clone https://github.com/protocolbuffers/protobuf.git
  cd protobuf
  git checkout v21.12
  git submodule update --init --recursive
  mkdir build_source && cd build_source
  cmake ../cmake -Dprotobuf_BUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_POSITION_INDEPENDENT_CODE=ON -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
  make -j$(nproc)
  make install

CentOS/RHEL/Fedora:

  git clone https://github.com/protocolbuffers/protobuf.git
  cd protobuf
  git checkout v21.12
  git submodule update --init --recursive
  mkdir build_source && cd build_source
  cmake ../cmake  -DCMAKE_INSTALL_LIBDIR=lib64 -Dprotobuf_BUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_POSITION_INDEPENDENT_CODE=ON -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
  make -j$(nproc)
  make install

Here "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" is crucial. By default static libraries are built without "-fPIC" flag, they are not position independent code. But shared libraries must be position independent code. Python C/C++ extensions(like ONNX) are shared libraries. So if a static library was not built with "-fPIC", it can't be linked to such a shared library.

Once build is successful, update PATH to include protobuf paths.

Then you can build ONNX as:

git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
# Optional: prefer lite proto
export CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
pip install -e . -v

Mac

export NUM_CORES=`sysctl -n hw.ncpu`
brew update
brew install autoconf && brew install automake
wget https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protobuf-cpp-3.21.12.tar.gz
tar -xvf protobuf-cpp-3.21.12.tar.gz
cd protobuf-3.21.12
mkdir build_source && cd build_source
cmake ../cmake -Dprotobuf_BUILD_SHARED_LIBS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
make -j${NUM_CORES}
make install

Once build is successful, update PATH to include protobuf paths.

Then you can build ONNX as:

git clone --recursive https://github.com/onnx/onnx.git
cd onnx
# Optional: prefer lite proto
set CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
pip install -e . -v

Verify Installation

After installation, run

python -c "import onnx"

to verify it works.

Common Build Options

For full list refer to CMakeLists.txt

Environment variables

  • USE_MSVC_STATIC_RUNTIME should be 1 or 0, not ON or OFF. When set to 1 onnx links statically to runtime library. Default: USE_MSVC_STATIC_RUNTIME=0

  • DEBUG should be 0 or 1. When set to 1 onnx is built in debug mode. or debug versions of the dependencies, you need to open the CMakeLists file and append a letter d at the end of the package name lines. For example, NAMES protobuf-lite would become NAMES protobuf-lited. Default: Debug=0

CMake variables

  • ONNX_USE_PROTOBUF_SHARED_LIBS should be ON or OFF. Default: ONNX_USE_PROTOBUF_SHARED_LIBS=OFF USE_MSVC_STATIC_RUNTIME=0 ONNX_USE_PROTOBUF_SHARED_LIBS determines how onnx links to protobuf libraries.

    • When set to ON - onnx will dynamically link to protobuf shared libs, PROTOBUF_USE_DLLS will be defined as described here, Protobuf_USE_STATIC_LIBS will be set to OFF and USE_MSVC_STATIC_RUNTIME must be 0.
    • When set to OFF - onnx will link statically to protobuf, and Protobuf_USE_STATIC_LIBS will be set to ON (to force the use of the static libraries) and USE_MSVC_STATIC_RUNTIME can be 0 or 1.
  • ONNX_USE_LITE_PROTO should be ON or OFF. When set to ON onnx uses lite protobuf instead of full protobuf. Default: ONNX_USE_LITE_PROTO=OFF

  • ONNX_WERROR should be ON or OFF. When set to ON warnings are treated as errors. Default: ONNX_WERROR=OFF in local builds, ON in CI and release pipelines.

Common Errors

  • Note: the import onnx command does not work from the 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.

  • If you run into any issues while building Protobuf as a static library, please ensure that shared Protobuf libraries, like libprotobuf, are not installed on your device or in the conda environment. If these shared libraries exist, either remove them to build Protobuf from source as a static library, or skip the Protobuf build from source to use the shared version directly.

  • If you run into any issues while building ONNX from source, and your error message reads, Could not find pythonXX.lib, ensure that you have consistent Python versions for common commands, such as python and pip. Clean all existing build files and rebuild ONNX again.

Testing

ONNX uses pytest as test driver. In order to run tests, you will first need to install pytest:

pip install pytest nbval

After installing pytest, use the following command to run tests.

pytest

Development

Check out the contributor guide for instructions.

License

Apache License v2.0

Code of Conduct

ONNX Open Source Code of Conduct

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

onnx_weekly-1.18.0.dev20240930.tar.gz (11.4 MB view details)

Uploaded Source

Built Distributions

onnx_weekly-1.18.0.dev20240930-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

onnx_weekly-1.18.0.dev20240930-cp312-cp312-macosx_12_0_universal2.whl (16.6 MB view details)

Uploaded CPython 3.12 macOS 12.0+ universal2 (ARM64, x86-64)

onnx_weekly-1.18.0.dev20240930-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

onnx_weekly-1.18.0.dev20240930-cp311-cp311-macosx_12_0_universal2.whl (16.6 MB view details)

Uploaded CPython 3.11 macOS 12.0+ universal2 (ARM64, x86-64)

onnx_weekly-1.18.0.dev20240930-cp310-cp310-win32.whl (14.4 MB view details)

Uploaded CPython 3.10 Windows x86

onnx_weekly-1.18.0.dev20240930-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

onnx_weekly-1.18.0.dev20240930-cp310-cp310-macosx_12_0_universal2.whl (16.6 MB view details)

Uploaded CPython 3.10 macOS 12.0+ universal2 (ARM64, x86-64)

onnx_weekly-1.18.0.dev20240930-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

onnx_weekly-1.18.0.dev20240930-cp39-cp39-macosx_12_0_universal2.whl (16.6 MB view details)

Uploaded CPython 3.9 macOS 12.0+ universal2 (ARM64, x86-64)

onnx_weekly-1.18.0.dev20240930-cp38-cp38-win_amd64.whl (14.6 MB view details)

Uploaded CPython 3.8 Windows x86-64

onnx_weekly-1.18.0.dev20240930-cp38-cp38-win32.whl (14.4 MB view details)

Uploaded CPython 3.8 Windows x86

onnx_weekly-1.18.0.dev20240930-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

onnx_weekly-1.18.0.dev20240930-cp38-cp38-macosx_12_0_universal2.whl (16.6 MB view details)

Uploaded CPython 3.8 macOS 12.0+ universal2 (ARM64, x86-64)

File details

Details for the file onnx_weekly-1.18.0.dev20240930.tar.gz.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930.tar.gz
Algorithm Hash digest
SHA256 5719c395252db08a6b1fea8b62b8df83cddbfc16cc7e04e52e39442ae6a70186
MD5 0f4fea90dfab78a4df216c4578677f78
BLAKE2b-256 ea86c0205ceb841371ad3b12f2b9702ea6c5d8318b45ba62f3b41f79b76842ac

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8bc1e6a0360d4c5727e5a8dc2d2fde6bdcdefd6d38ea2cbbde4c2dbd35a82e4
MD5 2314662f7d7f30a652d913bfafd83847
BLAKE2b-256 f93c58aa36e3a0dbb67fff8d5364d902109c2ce5b24d8e3bcbc60ec911846e25

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp312-cp312-macosx_12_0_universal2.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp312-cp312-macosx_12_0_universal2.whl
Algorithm Hash digest
SHA256 f5e8b47cb8cb3d4e6278dd32b86729cc8bdf48c11ce4c25640585746dede1ca2
MD5 396e8bf81eaeb3a966e8408d4f7c9866
BLAKE2b-256 d49227de02747fef329101e458d52302add7544fcbef9b9909a5ac19f843ef69

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c9580f5ee17ea5455ac03e77cf468e040aff7d916cc2b77983f182d0747c6390
MD5 aad9d0e52555f47aab552e395c9607e6
BLAKE2b-256 890eb5af3af0e2857628590ec3548955fde97e933f02043cf65ce049428a34f8

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp311-cp311-macosx_12_0_universal2.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp311-cp311-macosx_12_0_universal2.whl
Algorithm Hash digest
SHA256 aef54ff14944b50ef341239758fc7694a6102cde86181c3fb6ca1f3698d8d41c
MD5 d2becb3da8327c7773dd88f24a0a7f48
BLAKE2b-256 6d94ed21cd8ec5fde5e7947ddcc0f4b40cc5b7dfec7edddb9f679170eca25682

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 3efbc40d68757283e816f64d23ffd495deabf95e3d5360ae54e090aa0331c3f1
MD5 d66893e96bf842c1f5eeadc609c1b295
BLAKE2b-256 9ce46ced86953757fccef237124b3847f34cbc382d1cad75687734f3f7d364bd

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a0e19b0187c9763182a7c63b03539f5c8b04ca36f220709c079f5bcbe016829e
MD5 8f59caf2dfe84789eba6690676e4f23e
BLAKE2b-256 4b94a6a1d5b41450465ca09aae70ad572f1e2416b6f630d2189a30d5ce5226af

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp310-cp310-macosx_12_0_universal2.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp310-cp310-macosx_12_0_universal2.whl
Algorithm Hash digest
SHA256 b96ead3fea59334b1c11d3b26747a4cc948f50e5d17319e10b9746ff5cfbb7c1
MD5 9a6754f3de717cff1d97885f62dab11f
BLAKE2b-256 59bcbc24503d594039b85711ec3d9ea0ee1c2ca52716b5c3c0af899280fb4466

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e2a317c11e77b9d870435cb64683f082883e5277c8e90d8525f0304baa103680
MD5 b109beb52e92060019d38c627cd86be5
BLAKE2b-256 0ce8e2a43f2e8791e7aba8471023428b229e59f5aaf17c8727f4a9cd506f5ec3

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp39-cp39-macosx_12_0_universal2.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp39-cp39-macosx_12_0_universal2.whl
Algorithm Hash digest
SHA256 b8c044dd29f745cb74a63650e58883bf134287c7674aaae66698add284a83edd
MD5 d37b18747980bfbc5d2dce371bde30b0
BLAKE2b-256 201d24bfc89d6e78189ea93c09162fac3b125447f33a5186ed6b1b347b1d6d45

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 7c159a9057d6cab7af17b637c361e7b3fd7eade0d6a915f0fe790d35a74505b0
MD5 39ce668851c1ea1184de4f3ea805619b
BLAKE2b-256 8859781ebeb16f1a693b098a4073fb02077d69b28fda205c1170a90fe1cd7cb4

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp38-cp38-win32.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 5ff546b922855ec650c6607e5281d3cff3f710b03d0b815b930f1d1b49c3f272
MD5 543618c68e156f2a53ddfb1ce67362bd
BLAKE2b-256 b9b588c8b13ba495285301ed2fed8f952565770b4f2c311105dd46bebdbdbb7f

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e93da12dcd7e4e130dc68764ade26fc1c0e4888cf77dff12318f2897ae602cac
MD5 53469553ff1302a349944546374401c7
BLAKE2b-256 4d9f1e85df49813f7359a2dd65932e8f2bd03c600323dcf7f46a441313bbbce2

See more details on using hashes here.

File details

Details for the file onnx_weekly-1.18.0.dev20240930-cp38-cp38-macosx_12_0_universal2.whl.

File metadata

File hashes

Hashes for onnx_weekly-1.18.0.dev20240930-cp38-cp38-macosx_12_0_universal2.whl
Algorithm Hash digest
SHA256 eab19b20756b2bcaa8244573090c738575d8401e9ad8f90a9707fe589b42ccde
MD5 37d001346545be612fa1ac307b038341
BLAKE2b-256 1e4cc625c26183bf318f5f9807685c9729c58ffa2eedb50d14de1e4a4d6feaef

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page