
Open Neural Network Exchange (ONNX) est un écosystème ouvert qui permet aux développeurs de l'IA de choisir les bons outils à mesure que leur projet évolue. ONNX fournit un format open source pour les modèles d'IA, à la fois l'apprentissage en profondeur et le ML traditionnel. Il définit un modèle de graphique de calcul extensible, ainsi que des définitions des opérateurs intégrés et des types de données standard. Actuellement, nous nous concentrons sur les capacités nécessaires à l'inférence (score).
ONNX est largement pris en charge et peut être trouvé dans de nombreux cadres, outils et matériels. L'activation de l'interopérabilité entre les différents cadres et la rationalisation du chemin de la recherche à la production contribuent à augmenter la vitesse de l'innovation dans la communauté de l'IA. Nous invitons la communauté à nous rejoindre et à évoluer davantage ONNX.
ONNX est un projet communautaire et le modèle de gouvernance ouverte est décrit ici. Nous vous encourageons à vous joindre à l'effort et à apporter des commentaires, des idées et du code. Vous pouvez participer aux groupes d'intérêt spéciaux et aux groupes de travail pour façonner l'avenir de l'ONNX.
Consultez notre guide de contribution pour commencer.
Si vous pensez qu'un opérateur doit être ajouté à la spécification ONNX, veuillez lire ce document.
Les horaires des réunions régulières du comité directeur, des groupes de travail et des SIG peuvent être trouvés ici
Les rencontres communautaires ont lieu au moins une fois par an. Le contenu des rencontres communautaires précédentes est à:
Nous vous encourageons à ouvrir des problèmes ou à utiliser Slack (si vous n'avez pas encore rejoint, veuillez utiliser ce lien pour rejoindre le groupe) pour une discussion plus réel.
Restez à jour avec les dernières nouvelles de l'ONNX. [Facebook] [Twitter]
Un processus de feuille de route a lieu chaque année. Plus de détails peuvent être trouvés ici
Les packages publiés ONNX sont publiés dans PYPI.
pip install onnx # or pip install onnx[reference] for optional reference implementation dependenciesLes packages hebdomadaires ONNX sont publiés dans PYPI pour permettre l'expérimentation et les tests précoces.
ONNX est dans la liste de maintenance de VCPKG, vous pouvez facilement utiliser VCPKG pour la construire et l'installer.
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat # For powershell
./bootstrap-vcpkg.sh # For bash
./vcpkg install onnxUne construction binaire d'Onnx est disponible auprès de Conda, à Conda-Forge:
conda install -c conda-forge onnx Avant de construire à partir de la source, désinstallez toutes les versions existantes d'Onnx pip uninstall onnx .
La version du compilateur C ++ 17 ou plus ou supérieure est nécessaire pour construire ONNX à partir de la source. Pourtant, les utilisateurs peuvent spécifier leur propre version CMAKE_CXX_STANDARD pour la création d'ONNX.
Si vous n'avez pas installé Protobuf, ONNX télécharge et buvilera en interne Protobuf pour ONNX Build.
Ou, vous pouvez installer manuellement les bibliothèques et outils Protobuf C / C ++ avec une version spécifiée avant de procéder. Ensuite, selon la façon dont vous avez installé Protobuf, vous devez définir la variable d'environnement CMake_args sur "-Donnx_use_protobuf_shared_libs = on" ou "-donnx_use_protobuf_shared_libs = off". Par exemple, vous devrez peut-être exécuter la commande suivante:
Linux:
export CMAKE_ARGS= " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "Windows:
set CMAKE_ARGS = " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "Le marche / désactivation dépend du type de bibliothèque Protobuf que vous avez. Les bibliothèques partagées sont des fichiers se terminant par * .dll / *. SO / *. Dylib. Les bibliothèques statiques sont des fichiers se terminant par * .a / *. Lib. Cette option dépend de la façon dont vous obtenez votre bibliothèque Protobuf et de la façon dont elle a été construite. Et c'est par défaut. Vous n'avez pas besoin d'exécuter les commandes ci-dessus si vous préférez utiliser une bibliothèque Protobuf statique.
Si vous construisez ONNX à partir de Source, il est recommandé de créer également Protobuf localement en tant que bibliothèque statique. La version distribuée avec Conda-Forge est une DLL, mais ONNX s'attend à ce que ce soit une bibliothèque statique. La construction de Protobuf localement vous permet également de contrôler la version de Protobuf. La version testée et recommandée est 3.21.12.
Les instructions de ce lecture supposent que vous utilisez Visual Studio. Il est recommandé d'exécuter toutes les commandes à partir d'un shell démarré à partir de "X64 Native Tools Invite pour vs 2019" et de conserver le générateur de système de construction pour CMake (par exemple, CMake -G "Visual Studio 16 2019") cohérent tout en construisant Protobuf ainsi que ONNX.
Vous pouvez obtenir Protobuf en exécutant les commandes suivantes:
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=ReleaseEnsuite, il sera construit en tant que bibliothèque statique et installé sur <protobuf_install_dir>. Veuillez ajouter le répertoire bac (qui contient protoc.exe) à votre chemin.
set CMAKE_PREFIX_PATH = < protobuf_install_dir > ; %CMAKE_PREFIX_PATH%Veuillez noter: si votre protobuf_install_dir contient des espaces, n'ajoutez pas de guillemets autour de lui.
Alternative: Si vous ne souhaitez pas modifier votre chemin, vous pouvez plutôt définir ONNX_PROTOC_EXECUTABLE.
set CMAKE_ARGS = -DONNX_PROTOC_EXECUTABLE= < full_path_to_protoc.exe >Ensuite, vous pouvez construire ONNX en tant que:
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
Tout d'abord, vous devez installer Protobuf. La version minimum du compilateur Protobuf (Protoc) requise par ONNX est de 3,6.1. Veuillez noter que les anciennes versions Protoc peuvent ne pas fonctionner avec CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON .
Les utilisateurs Ubuntu 20.04 (et plus récents) peuvent choisir d'installer Protobuf via
apt-get install python3-pip python3-dev libprotobuf-dev protobuf-compiler Dans ce cas, il est nécessaire d'ajouter -DONNX_USE_PROTOBUF_SHARED_LIBS=ON cmake_args dans l'étape de construction onnx.
Une manière plus générale consiste à construire et à l'installer à partir de la source. Voir les instructions ci-dessous pour plus de détails.
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 installIci "-dcmake_position_independent_code = sur" est crucial. Par défaut, les bibliothèques statiques sont construites sans drapeau "-fpic", ils ne sont pas du code indépendant de position. Mais les bibliothèques partagées doivent être du code indépendant de position. Les extensions Python C / C ++ (comme ONNX) sont des bibliothèques partagées. Donc, si une bibliothèque statique n'a pas été construite avec "-fpic", elle ne peut pas être liée à une bibliothèque aussi partagée.
Une fois que la construction est réussie, mettez à jour le chemin pour inclure les chemins de protobuf.
Ensuite, vous pouvez construire ONNX en tant que:
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 installUne fois que la construction est réussie, mettez à jour le chemin pour inclure les chemins de protobuf.
Ensuite, vous pouvez construire ONNX en tant que:
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 . -vAprès l'installation, exécutez
python -c " import onnx "pour vérifier que cela fonctionne.
Pour la liste complète, reportez-vous à CMakelists.txt
USE_MSVC_STATIC_RUNTIME doit être 1 ou 0, pas sur ou désactivé. Lorsqu'il est défini sur 1 liens ONNX statiquement à la bibliothèque d'exécution. Par défaut : USE_MSVC_STATIC_RUNTIME=0
DEBUG doit être 0 ou 1. Lorsqu'il est réglé sur 1 onnx est construit en mode de débogage. Ou de débogage des versions des dépendances, vous devez ouvrir le fichier CMakelists et ajouter une lettre d à la fin des lignes de nom du package. Par exemple, NAMES protobuf-lite deviendraient NAMES protobuf-lited . Par défaut : Debug=0
ONNX_USE_PROTOBUF_SHARED_LIBS devrait être ON ou OFF . Par défaut : ONNX_USE_PROTOBUF_SHARED_LIBS=OFF USE_MSVC_STATIC_RUNTIME=0 ONNX_USE_PROTOBUF_SHARED_LIBS détermine comment les liens ONNX vers les bibliothèques Protobuf.
ON - onnx se liera dynamiquement vers les LIB partagés Protobuf, Protobuf_use_dlls sera défini comme décrit ici.OFF - ONNX sera lié statiquement à Protobuf. ONNX_USE_LITE_PROTO devrait être ON ou OFF . Lorsqu'il est réglé sur ON , utilise Lite Protobuf au lieu de Protobuf complet. Par défaut : ONNX_USE_LITE_PROTO=OFF
ONNX_WERROR devrait être ON ou OFF . Lorsqu'ils sont définis ON les avertissements, sont traités comme des erreurs. Par défaut : ONNX_WERROR=OFF dans les versions locales, ON les pipelines CI et libération.
Remarque: La commande import onnx ne fonctionne pas à partir du répertoire de caisse source; Dans ce cas, vous verrez ModuleNotFoundError: No module named 'onnx.onnx_cpp2py_export' . Se transformer en un autre répertoire pour corriger cette erreur.
Si vous rencontrez des problèmes lors de la création de Protobuf en tant que bibliothèque statique, veuillez vous assurer que les bibliothèques protobuf partagées, comme LibProtobuf, ne sont pas installées sur votre appareil ou dans l'environnement Conda. Si ces bibliothèques partagées existent, supprimez-les pour construire Protobuf de Source en tant que bibliothèque statique, ou sautez la version Protobuf à partir de la source pour utiliser directement la version partagée.
Si vous rencontrez des problèmes lors de la création d'ONNX à partir de la source et que votre message d'erreur se lit, Could not find pythonXX.lib , assurez-vous que vous disposez de versions Python cohérentes pour des commandes communes, telles que python et pip . Nettoyez tous les fichiers de construction existants et reconstruisez à nouveau ONNX.
ONNX utilise PyTest comme pilote de test. Pour exécuter des tests, vous devrez d'abord installer pytest :
pip install pytest nbvalAprès avoir installé PyTest, utilisez la commande suivante pour exécuter des tests.
pytestConsultez le Guide des contributeurs pour les instructions.
Licence Apache v2.0
Code de conduite open source ONNX