跳转到主要内容

开放神经网络交换

项目描述

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

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

ONNX(Open Neural Network Exchange)得到了广泛的支持,并可以在许多框架、工具和硬件中找到。它促进了不同框架之间的互操作性,简化了从研究到生产的路径,有助于提高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。建议您从"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 应该设置为 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,CI 和发布管道中 ON

常见错误

  • 注意:从源代码检出目录执行 import onnx 命令无效;在这种情况下,您将看到 ModuleNotFoundError: No module named 'onnx.onnx_cpp2py_export'。切换到另一个目录以修复此错误。

  • 如果您在构建 Protobuf 作为静态库时遇到任何问题,请确保您的设备或 conda 环境中未安装共享 Protobuf 库,如 libprotobuf。如果存在这些共享库,则可以移除它们以从源代码构建 Protobuf 作为静态库,或者跳过从源代码构建 Protobuf 以直接使用共享版本。

  • 如果您在从源代码构建 ONNX 时遇到任何问题,并且错误信息为 Could not find pythonXX.lib,请确保您为常用命令(如 pythonpip)具有一致的 Python 版本。清理所有现有构建文件并重新构建 ONNX。

测试

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

pip install pytest nbval

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

pytest

开发

查看 贡献指南 以获取说明。

许可证

Apache License v2.0

行为准则

ONNX 开源代码行为准则

项目详情


下载文件

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

源分布

onnx_weekly-1.18.0.dev20240930.tar.gz (11.4 MB 查看哈希值)

上传时间

构建分布

onnx_weekly-1.18.0.dev20240930-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB 查看哈希值)

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

onnx_weekly-1.18.0.dev20240930-cp312-cp312-macosx_12_0_universal2.whl (16.6 MB 查看哈希值)

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

onnx_weekly-1.18.0.dev20240930-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB 查看哈希值)

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

onnx_weekly-1.18.0.dev20240930-cp311-cp311-macosx_12_0_universal2.whl (16.6 MB 查看哈希值)

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

onnx_weekly-1.18.0.dev20240930-cp310-cp310-win32.whl (14.4 MB 查看哈希值)

上传时间 CPython 3.10 Windows x86

onnx_weekly-1.18.0.dev20240930-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB 查看哈希值)

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

onnx_weekly-1.18.0.dev20240930-cp310-cp310-macosx_12_0_universal2.whl (16.6 MB 查看哈希值)

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

onnx_weekly-1.18.0.dev20240930-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB 查看哈希值)

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

onnx_weekly-1.18.0.dev20240930-cp39-cp39-macosx_12_0_universal2.whl (16.6 MB 查看哈希值)

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

onnx_weekly-1.18.0.dev20240930-cp38-cp38-win_amd64.whl (14.6 MB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

onnx_weekly-1.18.0.dev20240930-cp38-cp38-win32.whl (14.4 MB 查看哈希值)

上传时间 CPython 3.8 Windows x86

onnx_weekly-1.18.0.dev20240930-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB 查看哈希值)

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

onnx_weekly-1.18.0.dev20240930-cp38-cp38-macosx_12_0_universal2.whl (16.6 MB 查看哈希值)

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

由以下机构支持