跳转到主要内容

开放神经网络交换

项目描述

PyPI - Version CI CII Best Practices OpenSSF Scorecard REUSE compliant Ruff Black

开放神经网络交换(ONNX)是一个开源生态系统,它使AI开发者能够随着项目的演变选择合适的工具。ONNX为AI模型提供了一个开源格式,包括深度学习和传统机器学习。它定义了一个可扩展的计算图模型,以及内置操作和标准数据类型的定义。目前我们专注于推理(评分)所需的功能。

ONNX被广泛支持,可在许多框架、工具和硬件中找到。它促进了不同框架之间的互操作性,并简化了从研究到生产的路径,有助于提高AI社区的创新速度。我们邀请社区加入我们,共同推动ONNX的进一步发展。

使用ONNX

了解ONNX规范

用于处理ONNX图的编程工具

贡献

ONNX是一个社区项目,开放治理模型在此描述。我们鼓励您加入我们的努力,提供反馈、想法和代码。您可以参与特别兴趣小组工作组,共同塑造ONNX的未来。

查看我们的贡献指南开始。

如果您认为某些操作符应该添加到ONNX规范中,请阅读此文档

社区会议

指导委员会、工作组及SIGs的定期会议安排可在此处找到。

社区聚会至少每年举行一次。往届社区聚会的资料在

讨论

我们鼓励您通过问题,或使用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的二进制构建版本可在Condaconda-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应为ONOFF默认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可以是01
  • ONNX_USE_LITE_PROTO应为ONOFF。当设置为ON时,onnx将使用轻量级protobuf而不是完整protobuf。默认ONNX_USE_LITE_PROTO=OFF

  • ONNX_WERROR应为ONOFF。当设置为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”,请确保您为常用命令(如pythonpip)具有一致的Python版本。清理所有现有的构建文件并重新构建ONNX。

测试

ONNX使用pytest作为测试驱动程序。为了运行测试,您首先需要安装pytest

pip install pytest nbval

安装pytest后,使用以下命令运行测试。

pytest

开发

有关说明,请参阅贡献指南

许可

Apache License v2.0

行为准则

ONNX开源代码行为准则

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

onnx-1.17.0.tar.gz (12.2 MB 查看散列)

上传时间

构建分发

onnx-1.17.0-cp312-cp312-win_amd64.whl (14.5 MB 查看散列)

上传时间 CPython 3.12 Windows x86-64

onnx-1.17.0-cp312-cp312-win32.whl (14.4 MB 查看散列)

上传时间 CPython 3.12 Windows x86

onnx-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.0 MB 查看散列)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64

onnx-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (15.9 MB 查看散列)

上传时间 CPython 3.12 manylinux: glibc 2.17+ ARM64

onnx-1.17.0-cp312-cp312-macosx_12_0_universal2.whl (16.7 MB 查看散列)

上传时间 CPython 3.12 macOS 12.0+ universal2 (ARM64, x86-64)

onnx-1.17.0-cp311-cp311-win_amd64.whl (14.5 MB 查看散列)

上传时间 CPython 3.11 Windows x86-64

onnx-1.17.0-cp311-cp311-win32.whl (14.4 MB 查看散列)

上传时间 CPython 3.11 Windows x86

onnx-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.0 MB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ x86-64

onnx-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (15.9 MB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ ARM64

onnx-1.17.0-cp311-cp311-macosx_12_0_universal2.whl (16.6 MB 查看哈希值)

上传时间: CPython 3.11 macOS 12.0+ universal2 (ARM64, x86-64)

onnx-1.17.0-cp310-cp310-win_amd64.whl (14.5 MB 查看哈希值)

上传时间: CPython 3.10 Windows x86-64

onnx-1.17.0-cp310-cp310-win32.whl (14.4 MB 查看哈希值)

上传时间: CPython 3.10 Windows x86

onnx-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.0 MB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ x86-64

onnx-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (15.9 MB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ ARM64

onnx-1.17.0-cp310-cp310-macosx_12_0_universal2.whl (16.6 MB 查看哈希值)

上传时间: CPython 3.10 macOS 12.0+ universal2 (ARM64, x86-64)

onnx-1.17.0-cp39-cp39-win_amd64.whl (14.5 MB 查看哈希值)

上传时间: CPython 3.9 Windows x86-64

onnx-1.17.0-cp39-cp39-win32.whl (14.4 MB 查看哈希值)

上传时间: CPython 3.9 Windows x86

onnx-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.0 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

onnx-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (15.9 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64

onnx-1.17.0-cp39-cp39-macosx_12_0_universal2.whl (16.6 MB 查看哈希值)

上传于 CPython 3.8 macOS 12.0+ universal2 (ARM64, x86-64)

onnx-1.17.0-cp38-cp38-win_amd64.whl (14.5 MB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

onnx-1.17.0-cp38-cp38-win32.whl (14.4 MB 查看哈希值)

上传于 CPython 3.8 Windows x86

onnx-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.0 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

onnx-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (15.9 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

onnx-1.17.0-cp38-cp38-macosx_12_0_universal2.whl (16.6 MB 查看哈希值)

上传于 CPython 3.8 macOS 12.0+ universal2 (ARM64, x86-64)

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页