
开放的神经网络交换(ONNX)是一个开放的生态系统,它使AI开发人员能够随着项目的发展而选择正确的工具。 ONNX为AI模型提供了开源格式,包括深度学习和传统ML。它定义了可扩展的计算图模型,以及内置运算符和标准数据类型的定义。目前,我们专注于推理所需的功能(评分)。
ONNX得到了广泛的支持,可以在许多框架,工具和硬件中找到。在不同的框架之间实现互操作性并简化从研究到生产的路径有助于提高AI社区的创新速度。我们邀请社区加入我们并进一步发展。
ONNX是一个社区项目,此处描述了公开治理模型。我们鼓励您加入努力并贡献反馈,想法和代码。您可以参加特殊兴趣小组和工作组,以塑造ONNX的未来。
查看我们的贡献指南以开始。
如果您认为应该将某些操作员添加到ONNX规范中,请阅读此文档。
指导委员会常规会议,工作组和SIGS的时间表可以在此处找到
每年至少举行一次社区聚会。以前社区聚会的内容是:
我们鼓励您打开问题,或使用Slack(如果您尚未加入,请使用此链接加入该组)进行更多的实时讨论。
保持最新的ONNX新闻。 [Facebook] [Twitter]
每年都会进行路线图过程。可以在这里找到更多细节
ONNX发布的软件包发表在PYPI中。
pip install onnx # or pip install onnx[reference] for optional reference implementation dependenciesONNX每周包在PYPI中发表,以实现实验和早期测试。
ONNX位于VCPKG的维护列表中,您可以轻松地使用VCPKG来构建和安装它。
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat # For powershell
./bootstrap-vcpkg.sh # For bash
./vcpkg install onnx康达(Conda)的康达(Conda)提供了二元版本的二元版本:
conda install -c conda-forge onnx从源构建之前,卸载了任何现有版本的ONNX pip uninstall onnx 。
C ++ 17或更高的C ++编译器版本需要从源构建ONNX。尽管如此,用户仍可以指定自己的CMAKE_CXX_STANDARD版本用于构建ONNX。
如果您没有安装Protobuf,则ONNX将在内部下载并构建用于ONNX构建的Protobuf。
或者,您可以在进行前进之前手动安装带有指定版本的Protobuf C/C ++库和工具。然后,根据您安装ProtoBuf的方式,您需要将环境变量cmake_args设置为“ -donnx_use_protobuf_shared_shared_libs = on”或“ -donnx_protobuf_shared_libs_libs = off”。例如,您可能需要运行以下命令:
Linux:
export CMAKE_ARGS= " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "视窗:
set CMAKE_ARGS = " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "ON/OFF取决于您拥有哪种Protobuf库。共享库是以*.dll/*。so/*。dylib结尾的文件。静态库是以 *.A/ *。lib结尾的文件。此选项取决于您如何获得Protobuf库以及它的构建方式。它是默认的。如果您希望使用静态Protobuf库,则无需运行上述命令。
如果您是从源构建ONNX的,则建议您还将Protobuf在本地构建为静态库。用Conda-Forge分发的版本是DLL,但ONNX期望它是静态库。在本地建造Protobuf还可以控制Protobuf的版本。测试和推荐的版本为3.21.12。
此读书中的说明假定您正在使用Visual Studio。建议您从“ X64本机工具提示vs for VS 2019”中运行所有命令,并在构建ProtoBuf和ONNX时保持CMAKE的构建系统生成器(例如,Cmake -G“ Visual Studio 16 2019”)一致。
您可以通过运行以下命令来获得Protobuf:
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然后将其作为静态库构建,并安装到<protobuf_install_dir>。请在您的路径中添加bin目录(包含protoc.exe)。
set CMAKE_PREFIX_PATH = < protobuf_install_dir > ; %CMAKE_PREFIX_PATH%请注意:如果您的Protobuf_install_dir包含空格,请不要在其周围添加引号。
替代方案:如果您不想更改路径,则可以设置Onnx_protoc_executable。
set CMAKE_ARGS = -DONNX_PROTOC_EXECUTABLE= < full_path_to_protoc.exe >然后,您可以将其构建为:
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
首先,您需要安装Protobuf。 ONNX所需的最小Protobuf编译器(ProtoC)版本为3.6.1。请注意,旧的ProtoC版本可能无法与CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON一起使用。
Ubuntu 20.04(和较新的)用户可以选择通过
apt-get install python3-pip python3-dev libprotobuf-dev protobuf-compiler在这种情况下,需要在ONNX构建步骤中添加-DONNX_USE_PROTOBUF_SHARED_LIBS=ON 。
一种更通用的方法是从源构建和安装它。有关更多详细信息,请参见下面的说明。
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 installCentos/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这里“ -dcmake_position_independent_code = on”至关重要。默认情况下,静态库是没有“ -FPIC”标志的,它们不是位置独立的代码。但是共享的库必须是位置独立的代码。 Python C/C ++扩展(例如ONNX)是共享库。因此,如果未使用“ -fpic”构建静态库,则不能将其链接到这样的共享库。
构建成功后,更新路径,以包括Protobuf路径。
然后,您可以将其构建为:
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 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构建成功后,更新路径,以包括Protobuf路径。
然后,您可以将其构建为:
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安装后,运行
python -c " import onnx "验证它有效。
有关完整列表,请参阅cmakelists.txt
USE_MSVC_STATIC_RUNTIME应为1或0,而不打开或关闭。设置为1个ONNX链接时,静态链接到运行时库。默认值: USE_MSVC_STATIC_RUNTIME=0
DEBUG应为0或1。设置为1 ONNX时,请在调试模式下构建。或依赖项的调试版本,您需要打开cmakelists文件,并在软件包名称行的末尾附加字母d 。例如, NAMES protobuf-lite将成为NAMES protobuf-lited 。默认值: Debug=0
ONNX_USE_PROTOBUF_SHARED_LIBS应该ON或OFF 。默认值: ONNX_USE_PROTOBUF_SHARED_LIBS=OFF USE_MSVC_STATIC_RUNTIME=0 ONNX_USE_PROTOBUF_SHARED_LIBS确定ONNX链接到ProtoBuf Libraries的链接。
ON -ONNX将动态链接到Protobuf共享的libs时,ProtoBuf_USE_DLL将被定义如下所述。OFF时 - ONNX将静态链接到Protobuf。 ONNX_USE_LITE_PROTO应该ON或OFF 。设置为ON时,请使用Lite Protobuf代替完整的Protobuf。默认值: ONNX_USE_LITE_PROTO=OFF
ONNX_WERROR应该ON或OFF 。设置在ON时被视为错误。默认值: ONNX_WERROR=OFF在本地构建中,在CI和释放管道中ON OFF。
注意: import onnx命令无法从源结帐目录中使用;在这种情况下,您将看到ModuleNotFoundError: No module named 'onnx.onnx_cpp2py_export' 。更改为另一个目录以解决此错误。
如果您在将Protobuf作为静态库时遇到任何问题,请确保在设备或Conda环境中不会安装共享的Protobuf库,例如Libprotobuf。如果存在这些共享库,则将它们删除以从源库中构建Protobuf,或者跳过Protobuf构建,从源直接使用共享版本。
如果您在从源构建ONNX时会遇到任何问题,并且您的错误消息读取, Could not find pythonXX.lib ,请确保您对python和pip等通用命令具有一致的Python版本。清洁所有现有的构建文件,然后再次重建。
ONNX使用PYTEST作为测试驱动程序。为了进行测试,您首先需要安装pytest :
pip install pytest nbval安装pytest后,使用以下命令运行测试。
pytest请查看撰稿人指南以获取说明。
Apache许可证v2.0
ONNX开源行为准则