
開放的神經網絡交換(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開源行為準則