Package: onnx
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 iswidely supportedand 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 ONNXDocumentation of ONNX Python PackageTutorials for creating ONNX modelsPre-trained ONNX modelsLearn about the ONNX specOverviewONNX intermediate representation specVersioning principles of the specOperators documentation(development version)Operators documentation(latest release)Python API OverviewProgramming utilities for working with ONNX GraphsShape and Type InferenceGraph OptimizationOpset Version ConversionContributeONNX is a community project and the open governance model is describedhere. We encourage you to join the effort and contribute feedback, ideas, and code. You can participate in theSpecial Interest GroupsandWorking Groupsto shape the future of ONNX.Check out ourcontribution guideto get started.If you think some operator should be added to ONNX specification, please readthis document.Community meetingsThe schedules of the regular meetings of the Steering Committee, the working groups and the SIGs can be foundhereCommunity Meetups are held at least once a year. Content from previous community meetups are at:2020.04.09https://wiki.lfaidata.foundation/display/DL/LF+AI+Day+-ONNX+Community+Virtual+Meetup+-+Silicon+Valley+-+April+92020.10.14https://wiki.lfaidata.foundation/display/DL/LF+AI+Day+-+ONNX+Community+Workshop+-+October+142021.03.24https://wiki.lfaidata.foundation/pages/viewpage.action?pageId=351603912021.10.21https://wiki.lfaidata.foundation/pages/viewpage.action?pageId=469896892022.06.24https://wiki.lfaidata.foundation/display/DL/ONNX+Community+Day+-+June+242023.06.28https://wiki.lfaidata.foundation/display/DL/ONNX+Community+Day+2023+-+June+28DiscussWe encourage you to openIssues, or useSlack(If you have not joined yet, please use thislinkto join the group) for more real-time discussion.Follow UsStay up to date with the latest ONNX news. [Facebook] [Twitter]RoadmapA roadmap process takes place every year. More details can be foundhereInstallationOfficial Python packagesONNX released packages are published in PyPi.pipinstallonnx# or pip install onnx[reference] for optional reference implementation dependenciesONNX weekly packagesare published in PyPI to enable experimentation and early testing.vcpkg packagesonnx is in the maintenance list ofvcpkg, you can easily use vcpkg to build and install it.gitclonehttps://github.com/microsoft/vcpkg.gitcdvcpkg
./bootstrap-vcpkg.bat# For powershell./bootstrap-vcpkg.sh# For bash./vcpkginstallonnxConda packagesA binary build of ONNX is available fromConda, inconda-forge:condainstall-cconda-forgeonnxBuild ONNX from SourceBefore building from source uninstall any existing versions of onnxpip uninstall onnx.c++17 or higher C++ compiler version is required to build ONNX from source on Windows. For other platforms, please use C++14 or higher versions.If you don't have protobuf installed, ONNX will internally download and build protobuf for ONNX build.Or, you can manually installprotobuf C/C++ libraries and toolswith 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:exportCMAKE_ARGS="-DONNX_USE_PROTOBUF_SHARED_LIBS=ON"Windows:setCMAKE_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.WindowsIf 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.gitcdprotobuf
git checkout v21.12cdcmake
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=ReleaseThen 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.setPATH=<protobuf_install_dir>/bin;%PATH%Please note: if your protobuf_install_dir contains spaces,do notadd quotation marks around it.Alternative: if you don't want to change your PATH, you can set ONNX_PROTOC_EXECUTABLE instead.setCMAKE_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 .LinuxFirst, 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 withCMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON.Ubuntu 20.04 (and newer) users may choose to install protobuf viaapt-getinstallpython3-pippython3-devlibprotobuf-devprotobuf-compilerIn this case, it is required to add-DONNX_USE_PROTOBUF_SHARED_LIBS=ONto 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 sourceDebian/Ubuntu:gitclonehttps://github.com/protocolbuffers/protobuf.gitcdprotobufgitcheckoutv21.12gitsubmoduleupdate--init--recursivemkdirbuild_source&&cdbuild_sourcecmake../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=Releasemake-j$(nproc)makeinstallCentOS/RHEL/Fedora:gitclonehttps://github.com/protocolbuffers/protobuf.gitcdprotobufgitcheckoutv21.12gitsubmoduleupdate--init--recursivemkdirbuild_source&&cdbuild_sourcecmake../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=Releasemake-j$(nproc)makeinstallHere "-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:gitclonehttps://github.com/onnx/onnx.gitcdonnx
gitsubmoduleupdate--init--recursive# Optional: prefer lite protoexportCMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
pipinstall-e.MacexportNUM_CORES=`sysctl-nhw.ncpu`brewupdate
brewinstallautoconf&&brewinstallautomake
wgethttps://github.com/protocolbuffers/protobuf/releases/download/v21.12/protobuf-cpp-3.21.12.tar.gz
tar-xvfprotobuf-cpp-3.21.12.tar.gzcdprotobuf-3.21.12
mkdirbuild_source&&cdbuild_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}makeinstallOnce build is successful, update PATH to include protobuf paths.Then you can build ONNX as:gitclone--recursivehttps://github.com/onnx/onnx.gitcdonnx# Optional: prefer lite protosetCMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
pipinstall-e.Verify InstallationAfter installation, runpython-c"import onnx"to verify it works.Common Build OptionsFor full list refer to CMakeLists.txtEnvironment variablesUSE_MSVC_STATIC_RUNTIMEshould be 1 or 0, not ON or OFF. When set to 1 onnx links statically to runtime library.Default:USE_MSVC_STATIC_RUNTIME=0DEBUGshould be 0 or 1. When set to 1 onnx is built in debug mode. or debug versions of the dependencies, you need to open theCMakeLists fileand append a letterdat the end of the package name lines. For example,NAMES protobuf-litewould becomeNAMES protobuf-lited.Default:Debug=0CMake variablesONNX_USE_PROTOBUF_SHARED_LIBSshould beONorOFF.Default:ONNX_USE_PROTOBUF_SHARED_LIBS=OFF USE_MSVC_STATIC_RUNTIME=0ONNX_USE_PROTOBUF_SHARED_LIBSdetermines how onnx links to protobuf libraries.When set toON- onnx will dynamically link to protobuf shared libs, PROTOBUF_USE_DLLS will be defined as describedhere, Protobuf_USE_STATIC_LIBS will be set toOFFandUSE_MSVC_STATIC_RUNTIMEmust be 0.When set toOFF- onnx will link statically to protobuf, and Protobuf_USE_STATIC_LIBS will be set toON(to force the use of the static libraries) andUSE_MSVC_STATIC_RUNTIMEcan be0or1.ONNX_USE_LITE_PROTOshould beONorOFF. When set toONonnx uses lite protobuf instead of full protobuf.Default:ONNX_USE_LITE_PROTO=OFFONNX_WERRORshould beONorOFF. When set toONwarnings are treated as errors.Default:ONNX_WERROR=OFFin local builds,ONin CI and release pipelines.Common ErrorsNote: theimport onnxcommand does not work from the source checkout directory; in this case you'll seeModuleNotFoundError: 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 aspythonandpip. Clean all existing build files and rebuild ONNX again.TestingONNX usespytestas test driver. In order to run tests, you will first need to installpytest:pipinstallpytestnbvalAfter installing pytest, use the following command to run tests.pytestDevelopmentCheck out thecontributor guidefor instructions.LicenseApache License v2.0Code of ConductONNX Open Source Code of Conduct