开放神经网络交换(ONNX)工具
开放神经网络交换(ONNX)是一个开放的生态系统,它使人工智能开发人员能够在项目发展过程中选择正确的工具。ONNX为人工智能模型提供了一种开源格式,包括深度学习和传统ML,它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型的定义。目前我们关注的是推断(评分)所需的能力。
ONNX受到广泛支持,可以在许多框架、工具和硬件中找到。实现不同框架之间的互操作性和简化从研究到生产的路径有助于提高人工智能社区的创新速度。
参考链接:https://github.com/onnx/onnx
Use ONNX
Learn about the ONNX spec
- Overview
- ONNX intermediate representation spec
- Versioning principles of the spec
- Operators documentation
- Python API Overview
Programming utilities for working with ONNX Graphs
- Stay up to date with the latest ONNX news. [Facebook] [Twitter]
- A binary build of ONNX is available from Conda, in conda-forge:
- You will need an install of Protobuf and NumPy to build ONNX. One easy way to get these dependencies is via Anaconda:
- You can then install ONNX from PyPi (Note: Set environment variable
ONNX_ML=1
for onnx-ml): - Alternatively, you can also build and install ONNX locally from source code:
- 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:
- Step 1: Build Protobuf locally
- Step 2: Build ONNX
- If you would prefer to use Protobuf from conda-forge instead of building Protobuf from source, you can use the following instructions.
- If you are building ONNX on an ARM 64 device, please make sure to install the dependencies appropriately.
- After installation, run
- to verify it works.
-
Environment variables:
USE_MSVC_STATIC_RUNTIME
(should be 1 or 0, not ON or OFF) -
CMake variables:
ONNX_USE_PROTOBUF_SHARED_LIBS
,Protobuf_USE_STATIC_LIBS
- If
ONNX_USE_PROTOBUF_SHARED_LIBS
is ON thenProtobuf_USE_STATIC_LIBS
must be OFF andUSE_MSVC_STATIC_RUNTIME
must be 0.
IfONNX_USE_PROTOBUF_SHARED_LIBS
is OFF thenProtobuf_USE_STATIC_LIBS
must be ON andUSE_MSVC_STATIC_RUNTIME
can be 1 or 0. - Note that
the
import onnx
command 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. - Building
ONNX on Ubuntu works well, but on CentOS/RHEL and other ManyLinux systems, you
might need to open the CMakeLists
file and replace all instances of
/lib
with/lib64
. - If you want
to build ONNX on Debug mode, remember to set the environment variable
DEBUG=1
. For debug versions of the dependencies, you need to open the CMakeLists file and append a letterd
at the end of the package name lines. For example,NAMES protobuf-lite
would becomeNAMES protobuf-lited
. - You can also use the onnx-dev docker image for a Linux-based installation without having to worry about dependency versioning.
- ONNX uses pytest as test driver. In order to run tests, you will first need to install pytest:
- After installing pytest, use the following command to run tests.
- Check out the contributor guide for instructions.
· Installation
· Binaries
·
conda install -c conda-forge onnx
· Source
· Linux and MacOS
·
# Use conda-forge protobuf, as default doesn't come with protoc
·
conda install -c conda-forge protobuf numpy
·
pip install onnx
·
git clone https://github.com/onnx/onnx.git
·
cd onnx
·
git submodule update --init --recursive
·
python setup.py install
·
sudo apt-get install protobuf-compiler libprotoc-dev
·
pip install onnx
· Windows
· 如果在Windows上从源代码构建ONNX,建议也将Protobuf作为静态库在本地构建。与conda-forge一起发布的版本是一个DLL,这是一个冲突,因为ONNX希望它是一个静态库。
·
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
·
# 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
· Build ONNX on Windows with Anaconda
·
# Use conda-forge protobuf
·
conda install -c conda-forge numpy libprotobuf=3.11.3 protobuf
·
·
# 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 USE_MSVC_STATIC_RUNTIME=0
·
set CMAKE_ARGS="-DONNX_USE_PROTOBUF_SHARED_LIBS=ON -DProtobuf_USE_STATIC_LIBS=OFF -DONNX_USE_LITE_PROTO=ON"
·
·
# Build ONNX
·
# Optional: Set environment variable `ONNX_ML=1` for onnx-ml
·
·
python setup.py install
· Build ONNX on ARM 64
·
pip install cython protobuf numpy
·
sudo apt-get install libprotobuf-dev protobuf-compiler
·
pip install onnx
· Verify Installation
·
python -c "import onnx"
· Common Errors
· Testing
·
pip install pytest nbval
·
pytest
· Development