开放神经网络交换
项目描述
开放神经网络交换(ONNX)是一个开源生态系统,它使AI开发者能够根据项目的发展选择合适的工具。ONNX为AI模型提供了一种开源格式,包括深度学习和传统机器学习。它定义了一个可扩展的计算图模型以及内置算子和标准数据类型的定义。目前,我们专注于推理(评分)所需的功能。
ONNX(Open Neural Network Exchange)得到了广泛的支持,并可以在许多框架、工具和硬件中找到。它促进了不同框架之间的互操作性,简化了从研究到生产的路径,有助于提高AI社区的创新能力。我们邀请社区加入我们,共同推动ONNX的进一步发展。
使用ONNX
了解ONNX规范
- 概述
- ONNX中间表示规范
- 规范的版本原则
- 运算符文档
- 运算符文档(最新版本)
- Python API概述
与ONNX图一起工作的编程工具
贡献
ONNX是一个社区项目,开放治理模式在此处进行了描述。我们鼓励您加入这一努力,并提供反馈、想法和代码。您可以通过加入特别兴趣小组和工作组来塑造ONNX的未来。
查看我们的贡献指南以开始。
如果您认为某些运算符应该添加到ONNX规范中,请阅读此文档。
社区会议
指导委员会、工作组和SIGs定期会议的日程安排可以在此处找到。
社区聚会每年至少举行一次。以前的社区聚会内容可以在此处找到。
- 2020.04.09 https://wiki.lfaidata.foundation/display/DL/LF+AI+Day+-ONNX+Community+Virtual+Meetup+-+Silicon+Valley+-+April+9
- 2020.10.14 https://wiki.lfaidata.foundation/display/DL/LF+AI+Day+-+ONNX+Community+Workshop+-+October+14
- 2021.03.24 https://wiki.lfaidata.foundation/pages/viewpage.action?pageId=35160391
- 2021.10.21 https://wiki.lfaidata.foundation/pages/viewpage.action?pageId=46989689
- 2022.06.24 https://wiki.lfaidata.foundation/display/DL/ONNX+Community+Day+-+June+24
- 2023.06.28 https://wiki.lfaidata.foundation/display/DL/ONNX+Community+Day+2023+-+June+28
讨论
我们鼓励您在问题部分发表意见,或使用Slack(如果您尚未加入,请使用此链接加入群组)进行更实时地讨论。
关注我们
关注最新的ONNX新闻。[Facebook] [Twitter]
路线图
每年都会进行路线图流程。更多详细信息可以在此处找到。
安装
官方Python包
ONNX发布包发布在PyPi上。
pip install onnx # or pip install onnx[reference] for optional reference implementation dependencies
ONNX每周包发布在PyPI上,以支持实验和早期测试。
vcpkg包
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包
ONNX的二进制构建可在Conda的conda-forge中找到。
conda install -c conda-forge onnx
从源代码构建ONNX
在从源代码构建之前,请卸载任何现有的onnx版本 pip uninstall onnx
。
要构建ONNX,需要c++17或更高版本的C++编译器。不过,用户可以为构建ONNX指定自己的CMAKE_CXX_STANDARD
版本。
如果您没有安装protobuf,ONNX将自动下载并构建protobuf以用于ONNX构建。
或者,您可以在继续之前手动安装指定版本的protobuf C/C++库和工具。然后,根据您安装protobuf的方式,您需要设置环境变量CMAKE_ARGS为"-DONNX_USE_PROTOBUF_SHARED_LIBS=ON"或"-DONNX_USE_PROTOBUF_SHARED_LIBS=OFF"。例如,您可能需要运行以下命令
Linux
export CMAKE_ARGS="-DONNX_USE_PROTOBUF_SHARED_LIBS=ON"
Windows
set CMAKE_ARGS="-DONNX_USE_PROTOBUF_SHARED_LIBS=ON"
ON/OFF取决于您拥有的protobuf库类型。共享库是以*.dll/*.so/*.dylib结尾的文件。静态库是以*.a/*.lib结尾的文件。此选项取决于您如何获取protobuf库以及它是如何构建的。默认为OFF。如果您更愿意使用静态protobuf库,则不需要运行上面的命令。
Windows
如果您正在从源代码构建ONNX,建议您也本地构建Protobuf作为静态库。conda-forge分发的版本是DLL,但ONNX期望它是一个静态库。本地构建protobuf也允许您控制protobuf的版本。已测试并推荐版本为3.21.12。
本README中的说明假设您正在使用Visual Studio。建议您从"Visual Studio 2019 x64 Native Tools Command Prompt"启动shell并运行所有命令,同时在构建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)添加到您的PATH。
set CMAKE_PREFIX_PATH=<protobuf_install_dir>;%CMAKE_PREFIX_PATH%
请注意:如果您的protobuf_install_dir包含空格,请不要在其周围添加引号。
备选方案:如果您不想更改PATH,可以设置ONNX_PROTOC_EXECUTABLE。
set CMAKE_ARGS=-DONNX_PROTOC_EXECUTABLE=<full_path_to_protoc.exe>
然后您可以按照以下步骤构建ONNX
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
首先,您需要安装protobuf。ONNX所需的最小Protobuf编译器(protoc)版本为3.6.1。请注意,较旧的protoc版本可能与CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
不兼容。
Ubuntu 20.04(及更高版本)用户可以选择通过以下方式安装protobuf
apt-get install python3-pip python3-dev libprotobuf-dev protobuf-compiler
在这种情况下,需要在ONNX构建步骤中将-DONNX_USE_PROTOBUF_SHARED_LIBS=ON
添加到CMAKE_ARGS。
更通用的方法是自行构建和安装。有关更多详细信息,请参阅下面的说明。
从源代码安装Protobuf
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
这里"-DCMAKE_POSITION_INDEPENDENT_CODE=ON"至关重要。默认情况下,不带有"-fPIC"标志的静态库不是位置无关代码。但是共享库必须是位置无关代码。Python C/C++扩展(如ONNX)是共享库。因此,如果静态库没有使用"-fPIC"构建,则无法将其链接到此类共享库。
构建成功后,更新PATH以包含protobuf路径。
然后您可以按照以下步骤构建ONNX
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
构建成功后,更新PATH以包含protobuf路径。
然后您可以按照以下步骤构建ONNX
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,而不是ON或OFF。当设置为1时,onnx会静态链接到运行时库。默认值:USE_MSVC_STATIC_RUNTIME=0
-
DEBUG
应为0或1。当设置为1时,onnx以调试模式构建或需要调试版本的依赖项,您需要打开CMakeLists文件并将字母d
添加到包名行末。例如,NAMES protobuf-lite
将变为NAMES protobuf-lited
。默认值:Debug=0
CMake变量
-
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 库。- 当设置为
ON
时 - onnx 将动态链接到 protobuf 共享库,PROTOBUF_USE_DLLS
将按如下描述定义:这里,Protobuf_USE_STATIC_LIBS
将设置为OFF
,且USE_MSVC_STATIC_RUNTIME
必须为 0。 - 当设置为
OFF
时 - onnx 将静态链接到 protobuf,Protobuf_USE_STATIC_LIBS
将设置为ON
(强制使用静态库),而USE_MSVC_STATIC_RUNTIME
可以是0
或1
。
- 当设置为
-
ONNX_USE_LITE_PROTO
应该设置为ON
或OFF
。当设置为ON
时,onnx 将使用轻量级的 protobuf 而不是完整的 protobuf。 默认值:ONNX_USE_LITE_PROTO=OFF
-
ONNX_WERROR
应该设置为ON
或OFF
。当设置为ON
时,警告被视为错误。 默认值: 本地构建时ONNX_WERROR=OFF
,CI 和发布管道中ON
。
常见错误
-
注意:从源代码检出目录执行
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。
测试
ONNX 使用 pytest 作为测试驱动程序。为了运行测试,您首先需要安装 pytest
pip install pytest nbval
安装 pytest 后,使用以下命令运行测试。
pytest
开发
查看 贡献指南 以获取说明。
许可证
行为准则
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
onnx_weekly-1.18.0.dev20240930.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5719c395252db08a6b1fea8b62b8df83cddbfc16cc7e04e52e39442ae6a70186 |
|
MD5 | 0f4fea90dfab78a4df216c4578677f78 |
|
BLAKE2b-256 | ea86c0205ceb841371ad3b12f2b9702ea6c5d8318b45ba62f3b41f79b76842ac |
onnx_weekly-1.18.0.dev20240930-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d8bc1e6a0360d4c5727e5a8dc2d2fde6bdcdefd6d38ea2cbbde4c2dbd35a82e4 |
|
MD5 | 2314662f7d7f30a652d913bfafd83847 |
|
BLAKE2b-256 | f93c58aa36e3a0dbb67fff8d5364d902109c2ce5b24d8e3bcbc60ec911846e25 |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp312-cp312-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f5e8b47cb8cb3d4e6278dd32b86729cc8bdf48c11ce4c25640585746dede1ca2 |
|
MD5 | 396e8bf81eaeb3a966e8408d4f7c9866 |
|
BLAKE2b-256 | d49227de02747fef329101e458d52302add7544fcbef9b9909a5ac19f843ef69 |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c9580f5ee17ea5455ac03e77cf468e040aff7d916cc2b77983f182d0747c6390 |
|
MD5 | aad9d0e52555f47aab552e395c9607e6 |
|
BLAKE2b-256 | 890eb5af3af0e2857628590ec3548955fde97e933f02043cf65ce049428a34f8 |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp311-cp311-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aef54ff14944b50ef341239758fc7694a6102cde86181c3fb6ca1f3698d8d41c |
|
MD5 | d2becb3da8327c7773dd88f24a0a7f48 |
|
BLAKE2b-256 | 6d94ed21cd8ec5fde5e7947ddcc0f4b40cc5b7dfec7edddb9f679170eca25682 |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp310-cp310-win32.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3efbc40d68757283e816f64d23ffd495deabf95e3d5360ae54e090aa0331c3f1 |
|
MD5 | d66893e96bf842c1f5eeadc609c1b295 |
|
BLAKE2b-256 | 9ce46ced86953757fccef237124b3847f34cbc382d1cad75687734f3f7d364bd |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a0e19b0187c9763182a7c63b03539f5c8b04ca36f220709c079f5bcbe016829e |
|
MD5 | 8f59caf2dfe84789eba6690676e4f23e |
|
BLAKE2b-256 | 4b94a6a1d5b41450465ca09aae70ad572f1e2416b6f630d2189a30d5ce5226af |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp310-cp310-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b96ead3fea59334b1c11d3b26747a4cc948f50e5d17319e10b9746ff5cfbb7c1 |
|
MD5 | 9a6754f3de717cff1d97885f62dab11f |
|
BLAKE2b-256 | 59bcbc24503d594039b85711ec3d9ea0ee1c2ca52716b5c3c0af899280fb4466 |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e2a317c11e77b9d870435cb64683f082883e5277c8e90d8525f0304baa103680 |
|
MD5 | b109beb52e92060019d38c627cd86be5 |
|
BLAKE2b-256 | 0ce8e2a43f2e8791e7aba8471023428b229e59f5aaf17c8727f4a9cd506f5ec3 |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp39-cp39-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b8c044dd29f745cb74a63650e58883bf134287c7674aaae66698add284a83edd |
|
MD5 | d37b18747980bfbc5d2dce371bde30b0 |
|
BLAKE2b-256 | 201d24bfc89d6e78189ea93c09162fac3b125447f33a5186ed6b1b347b1d6d45 |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp38-cp38-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7c159a9057d6cab7af17b637c361e7b3fd7eade0d6a915f0fe790d35a74505b0 |
|
MD5 | 39ce668851c1ea1184de4f3ea805619b |
|
BLAKE2b-256 | 8859781ebeb16f1a693b098a4073fb02077d69b28fda205c1170a90fe1cd7cb4 |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp38-cp38-win32.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5ff546b922855ec650c6607e5281d3cff3f710b03d0b815b930f1d1b49c3f272 |
|
MD5 | 543618c68e156f2a53ddfb1ce67362bd |
|
BLAKE2b-256 | b9b588c8b13ba495285301ed2fed8f952565770b4f2c311105dd46bebdbdbb7f |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e93da12dcd7e4e130dc68764ade26fc1c0e4888cf77dff12318f2897ae602cac |
|
MD5 | 53469553ff1302a349944546374401c7 |
|
BLAKE2b-256 | 4d9f1e85df49813f7359a2dd65932e8f2bd03c600323dcf7f46a441313bbbce2 |
哈希值 for onnx_weekly-1.18.0.dev20240930-cp38-cp38-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eab19b20756b2bcaa8244573090c738575d8401e9ad8f90a9707fe589b42ccde |
|
MD5 | 37d001346545be612fa1ac307b038341 |
|
BLAKE2b-256 | 1e4cc625c26183bf318f5f9807685c9729c58ffa2eedb50d14de1e4a4d6feaef |