
Open Neural Network Exchange (ONNX) - это открытая экосистема, которая позволяет разработчикам ИИ выбирать правильные инструменты по мере развития их проекта. ONNX предоставляет формат с открытым исходным кодом для моделей искусственного интеллекта, как глубокого обучения, так и традиционного ML. Он определяет обширную модель графика вычислений, а также определения встроенных операторов и стандартных типов данных. В настоящее время мы сосредотачиваемся на возможностях, необходимых для вывода (оценка).
ONNX широко поддерживается и может быть найден во многих фреймворках, инструментах и аппаратном обеспечении. Включение совместимости между различными рамками и оптимизация пути от исследований к производству помогает увеличить скорость инноваций в сообществе ИИ. Мы приглашаем сообщество присоединиться к нам и еще больше развиваться ONNX.
ONNX - это общественный проект, а модель открытого управления описана здесь. Мы призываем вас присоединиться к усилиям и внести свой вклад отзывы, идеи и код. Вы можете участвовать в группах с особыми интересами и рабочими группами, чтобы сформировать будущее ONNX.
Проверьте наше руководство по взносу, чтобы начать.
Если вы думаете, что какой -то оператор должен быть добавлен в спецификацию ONNX, прочитайте этот документ.
Расписание регулярных заседаний Руководящего комитета, рабочих групп и SIGS можно найти здесь
Сообщество встречается не реже одного раза в год. Контент от предыдущих встреч сообщества находится по адресу:
Мы призываем вас открывать проблемы или использовать Slack (если вы еще не присоединились, используйте эту ссылку, чтобы присоединиться к группе) для большего обсуждения в режиме реального времени.
Будьте в курсе последних новостей ONNX. [Facebook] [Twitter]
Процесс дорожной карты происходит каждый год. Более подробную информацию можно найти здесь
Выпущенные пакеты Onnx опубликованы в PYPI.
pip install onnx # or pip install onnx[reference] for optional reference implementation dependenciesЕженедельные пакеты ONNX публикуются в 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Бинарная сборка ONNX доступна в Conda, в Conda-Forge:
conda install -c conda-forge onnx Перед строительством из источника удалить любые существующие версии ONNX pip uninstall onnx .
C ++ 17 или более высокая версия компилятора C ++ требуется для создания ONNX из источника. Тем не менее, пользователи могут указать свою собственную версию CMAKE_CXX_STANDARD для создания ONNX.
Если у вас нет установленного ProtoBuf, ONNX будет внутренне загружать и построить ProToBuf для Build 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 "Вкл/выключение зависит от того, какая у вас библиотека Protobuf. Общие библиотеки - это файлы, заканчивающиеся*.dll/*. So/*. Dylib. Статические библиотеки - это файлы, заканчивающиеся *.a/ *. Lib. Эта опция зависит от того, как вы получаете свою библиотеку Protobuf и как она была построена. И это не по умолчанию. Вам не нужно запускать команды выше, если вы предпочитаете использовать статическую библиотеку Protobuf.
Если вы создаете ONNX из источника, рекомендуется также создавать Protobuf локально в качестве статической библиотеки. Версия, распространяемая с помощью Conda-Forge, является DLL, но Onnx ожидает, что это станет статическая библиотека. Создание Protobuf локально также позволяет вам контролировать версию Protobuf. Протестированная и рекомендуемая версия составляет 3.21.12.
Инструкции в этом Readme предполагают, что вы используете Visual Studio. Рекомендуется запустить все команды из оболочки, начатой от командной строки «x64 Native Tools Tools для VS 2019», и сохранить генератор системы сборки для Cmake (например, Cmake -G «Visual Studio 16 2019») в соответствии с протобуфом, а также Onnx.
Вы можете получить 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 >Тогда вы можете построить 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
Во -первых, вам нужно установить Protobuf. Минимальная версия Protobuf Compiler (Protoc), требуемая ONNX, составляет 3,6,1. Обратите внимание, что старые версии протока могут не работать с CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON .
Пользователи Ubuntu 20.04 (и более новые) могут установить Protobuf через
apt-get install python3-pip python3-dev libprotobuf-dev protobuf-compiler В этом случае необходимо добавить -DONNX_USE_PROTOBUF_SHARED_LIBS=ON cmake_args на этапе строительства ONNX.
Более общий способ - создать и установить его из источника. Смотрите инструкции ниже для получения более подробной информации.
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" имеет решающее значение. По умолчанию статические библиотеки строится без «-фпик», они не являются независимым кодом. Но общие библиотеки должны быть независимым кодом позиции. Расширения Python C/C ++ (например, ONNX) являются общими библиотеками. Так что, если статическая библиотека не была построена с «-фпиком», она не может быть связана с такой общей библиотекой.
Как только сборка будет успешной, обновление пути включить пути 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 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.
Тогда вы можете построить 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, а не включен или выключен. При установке 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.
ON - ONNX будет динамически связываться с общими LIBS Protobuf, Protobuf_USE_DLLS будет определен, как описано здесь.OFF - ONNX будет связываться статически с ProtoBuf. ONNX_USE_LITE_PROTO должен быть ON или OFF . При установке ON используется Lite 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 в качестве статической библиотеки, пожалуйста, убедитесь, что общие библиотеки Protobuf, такие как Libprotobuf, не установлены на вашем устройстве или в среде Conda. Если эти общие библиотеки существуют, либо удалите их для построения ProtoBuf из Source в качестве статической библиотеки, либо пропустите сборку Protobuf из источника, чтобы напрямую использовать общую версию.
Если вы столкнетесь с любыми проблемами при создании ONNX из источника, а ваше сообщение об ошибке считывает, Could not find pythonXX.lib , убедитесь, что у вас есть последовательные версии Python для общих команд, таких как python и pip . Очистите все существующие файлы сборки и снова перестройте ONNX.
Onnx использует Pytest в качестве драйвера для испытаний. Чтобы запустить тесты, вам сначала нужно будет установить pytest :
pip install pytest nbvalПосле установки Pytest используйте следующую команду для запуска тестов.
pytestОзнакомьтесь с Руководством по вкладчику для инструкций.
Apache License v2.0
Onnx с открытым исходным кодом поведения