开放神经网络交换
项目描述
开放神经网络交换(ONNX)是一个开源生态系统,它使AI开发者能够随着项目的演变选择合适的工具。ONNX为AI模型提供了一个开源格式,包括深度学习和传统机器学习。它定义了一个可扩展的计算图模型,以及内置操作和标准数据类型的定义。目前我们专注于推理(评分)所需的功能。
ONNX被广泛支持,可在许多框架、工具和硬件中找到。它促进了不同框架之间的互操作性,并简化了从研究到生产的路径,有助于提高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。建议您从“x64 Native Tools Command Prompt for VS 2019”启动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
在本地构建中,ON
在CI和发布管道中。
常见错误
-
注意:从源代码检出目录运行
import onnx
命令不起作用;在这种情况下,您将看到ModuleNotFoundError: No module named 'onnx.onnx_cpp2py_export'
。切换到另一个目录以修复此错误。 -
如果在构建Protobuf作为静态库时遇到任何问题,请确保您的设备或conda环境中没有安装共享Protobuf库,如libprotobuf。如果存在这些共享库,则可以从源代码构建Protobuf作为静态库,或者跳过从源代码构建Protobuf,直接使用共享版本。
-
如果在构建ONNX源代码时遇到任何问题,并且错误消息为“无法找到pythonXX.lib”,请确保您为常用命令(如
python
和pip
)具有一致的Python版本。清理所有现有的构建文件并重新构建ONNX。
测试
ONNX使用pytest作为测试驱动程序。为了运行测试,您首先需要安装pytest
pip install pytest nbval
安装pytest后,使用以下命令运行测试。
pytest
开发
有关说明,请参阅贡献指南。
许可
行为准则
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
构建分发
onnx-1.17.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 48ca1a91ff73c1d5e3ea2eef20ae5d0e709bb8a2355ed798ffc2169753013fd3 |
|
MD5 | 3bb7fe474d76ee33a6a34f97aed104ea |
|
BLAKE2b-256 | 9a540e385c26bf230d223810a9c7d06628d954008a5e5e4b73ee26ef02327282 |
onnx-1.17.0-cp312-cp312-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 659b8232d627a5460d74fd3c96947ae83db6d03f035ac633e20cd69cfa029227 |
|
MD5 | bc7c694a9d27af71d69009cf12cd1c3d |
|
BLAKE2b-256 | 3555c4d11bee1fdb0c4bd84b4e3562ff811a19b63266816870ae1f95567aa6e1 |
onnx-1.17.0-cp312-cp312-win32.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 317870fca3349d19325a4b7d1b5628f6de3811e9710b1e3665c68b073d0e68d7 |
|
MD5 | 20437012aa69ba69205621a57ec00cc5 |
|
BLAKE2b-256 | ae206da11042d2ab870dfb4ce4a6b52354d7651b6b4112038b6d2229ab9904c4 |
哈希值 用于 onnx-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4f3fb5cc4e2898ac5312a7dc03a65133dd2abf9a5e520e69afb880a7251ec97a |
|
MD5 | 9018bb506e676bf68bbb6ef25f23d7b0 |
|
BLAKE2b-256 | 3d7c67f4952d1b56b3f74a154b97d0dd0630d525923b354db117d04823b8b49b |
哈希值 用于 onnx-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3d955ba2939878a520a97614bcf2e79c1df71b29203e8ced478fa78c9a9c63c2 |
|
MD5 | 812ad4799500931bbfc1067e6ce9916e |
|
BLAKE2b-256 | f06cf040652277f514ecd81b7251841f96caa5538365af7df07f86c6018cda2b |
哈希值 用于 onnx-1.17.0-cp312-cp312-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0e906e6a83437de05f8139ea7eaf366bf287f44ae5cc44b2850a30e296421f2f |
|
MD5 | 6dabd352b93e153f47f81fb5eaf73840 |
|
BLAKE2b-256 | b4ddc416a11a28847fafb0db1bf43381979a0f522eb9107b831058fde012dd56 |
哈希值 用于 onnx-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4a183c6178be001bf398260e5ac2c927dc43e7746e8638d6c05c20e321f8c949 |
|
MD5 | cb23d2e761810b163762a3af1dc921c1 |
|
BLAKE2b-256 | b12f91092557ed478e323a2b4471e2081fdf88d1dd52ae988ceaf7db4e4506ff |
哈希值 用于 onnx-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f01a4b63d4e1d8ec3e2f069e7b798b2955810aa434f7361f01bc8ca08d69cce4 |
|
MD5 | 0fda4b90ba97784392354680aecbd589 |
|
BLAKE2b-256 | 7be3cc80110e5996ca61878f7b4c73c7a286cd88918ff35eacb60dc75ab11ef5 |
哈希值 用于 onnx-1.17.0-cp311-cp311-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d6fc3a03fc0129b8b6ac03f03bc894431ffd77c7d79ec023d0afd667b4d35869 |
|
MD5 | 786f1bd0b4443522884f8e6f736e4425 |
|
BLAKE2b-256 | e5a98d1b1d53aec70df53e0f57e9f9fcf47004276539e29230c3d5f1f50719ba |
哈希值 用于 onnx-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3193a3672fc60f1a18c0f4c93ac81b761bc72fd8a6c2035fa79ff5969f07713e |
|
MD5 | 42b7face4dcabcd3973ce93ea774cb2c |
|
BLAKE2b-256 | dd5bc4f95dbe652d14aeba9afaceb177e9ffc48ac3c03048dd3f872f26f07e34 |
哈希值 用于 onnx-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d545335cb49d4d8c47cc803d3a805deb7ad5d9094dc67657d66e568610a36d7d |
|
MD5 | 2cd4903bd4e987786511a8e507bb25f8 |
|
BLAKE2b-256 | 750d831807a18db2a5e8f7813848c59272b904a4ef3939fe4d1288cbce9ea735 |
哈希值 用于 onnx-1.17.0-cp310-cp310-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 38b5df0eb22012198cdcee527cc5f917f09cce1f88a69248aaca22bd78a7f023 |
|
MD5 | def107e185532c184633789a0f01729b |
|
BLAKE2b-256 | 2e2957053ba7787788ac75efb095cfc1ae290436b6d3a26754693cd7ed1b4fac |
哈希值 for onnx-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8167295f576055158a966161f8ef327cb491c06ede96cc23392be6022071b6ed |
|
MD5 | 5da1d6e33264913dfe06673ea1af66be |
|
BLAKE2b-256 | 3ddac19d0f20d310045f4701d75ecba4f765153251d48a32f27a5d6b0a7e3799 |
哈希值 for onnx-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3e19fd064b297f7773b4c1150f9ce6213e6d7d041d7a9201c0d348041009cdcd |
|
MD5 | 65eef32361e73b980cdfeaad16837f6b |
|
BLAKE2b-256 | 6194d753c230d56234dd01ad939590a2ed33221b57c61abe513ff6823a69af6e |
哈希值 for onnx-1.17.0-cp39-cp39-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 67e1c59034d89fff43b5301b6178222e54156eadd6ab4cd78ddc34b2f6274a66 |
|
MD5 | 17141b60fd21bd4be33c1ab830329586 |
|
BLAKE2b-256 | 49e1c5301ff2afa4c473d32a4e9f1bed5c589cfc4947c79002a00183f4cc0fa1 |
哈希值 for onnx-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ea5023a8dcdadbb23fd0ed0179ce64c1f6b05f5b5c34f2909b4e927589ebd0e4 |
|
MD5 | 64d07494036867f810501be279c6d8e5 |
|
BLAKE2b-256 | fb4c687f641702f3d3c67ce01a17d93cf2a83d7f9d9cb32bd18e397d4ff9580d |
哈希值 for onnx-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ecf2b617fd9a39b831abea2df795e17bac705992a35a98e1f0363f005c4a5247 |
|
MD5 | 9ba1fa14019811276d5781b463e8b1c3 |
|
BLAKE2b-256 | f54037d697e99f6385efb0f2b8ae2c2a3e2b78bedfebc1e6bbbae7f29f9d30d4 |
哈希值 for onnx-1.17.0-cp38-cp38-macosx_12_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 23b8d56a9df492cdba0eb07b60beea027d32ff5e4e5fe271804eda635bed384f |
|
MD5 | 5a3359d903a68b8c74e8785298d355c1 |
|
BLAKE2b-256 | e1471cfa62d9ddd71fba5dd335b45d6213b3af4f34ecdb22e90f3b4f46621d53 |