
Open Neural Network Exchange (ONNX) es un ecosistema abierto que faculta a los desarrolladores de IA para elegir las herramientas adecuadas a medida que su proyecto evoluciona. ONNX proporciona un formato de código abierto para los modelos de IA, tanto el aprendizaje profundo como el ML tradicional. Define un modelo de gráfico de cálculo extensible, así como definiciones de operadores incorporados y tipos de datos estándar. Actualmente nos centramos en las capacidades necesarias para la inferencia (puntuación).
ONNX es ampliamente compatible y se puede encontrar en muchos marcos, herramientas y hardware. Permitir la interoperabilidad entre diferentes marcos y racionalizar el camino desde la investigación hasta la producción ayuda a aumentar la velocidad de la innovación en la comunidad de IA. Invitamos a la comunidad a unirse a nosotros y evolucionar aún más ONNX.
ONNX es un proyecto comunitario y el modelo de gobierno abierto se describe aquí. Le recomendamos que se una al esfuerzo y contribuya con comentarios, ideas y código. Puede participar en los grupos de intereses especiales y los grupos de trabajo para dar forma al futuro de ONNX.
Consulte nuestra guía de contribución para comenzar.
Si cree que se debe agregar algún operador a la especificación ONNX, lea este documento.
Los horarios de las reuniones regulares del comité directivo, los grupos de trabajo y los SIG se pueden encontrar aquí
Las reuniones comunitarias se llevan a cabo al menos una vez al año. El contenido de reuniones comunitarias anteriores está en:
Le recomendamos que abra problemas o use Slack (si aún no se ha unido, use este enlace para unirse al grupo) para una discusión más en tiempo real.
Manténgase al día con las últimas noticias de ONNX. [Facebook] [Twitter]
Un proceso de hoja de ruta tiene lugar cada año. Se pueden encontrar más detalles aquí
Los paquetes lanzados de ONNX se publican en Pypi.
pip install onnx # or pip install onnx[reference] for optional reference implementation dependenciesLos paquetes semanales de ONNX se publican en PYPI para permitir la experimentación y las pruebas tempranas.
ONNX está en la lista de mantenimiento de VCPKG, puede usar fácilmente VCPKG para construirlo e instalarlo.
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat # For powershell
./bootstrap-vcpkg.sh # For bash
./vcpkg install onnxUna construcción binaria de ONNX está disponible en Conda, en Conda-Forge:
conda install -c conda-forge onnx Antes de construir desde la fuente, desinstale las versiones existentes de Onnx pip uninstall onnx .
Se requiere una versión del compilador C ++ 17 o superior C ++ para construir ONNX a partir de la fuente. Aún así, los usuarios pueden especificar su propia versión CMAKE_CXX_STANDARD para construir ONNX.
Si no tiene ProTobuf instalado, ONNX descargará internamente y construirá ProTobuf para ONNX Build.
O bien, puede instalar manualmente las bibliotecas y herramientas ProtoBuf C/C ++ con la versión especificada antes de avanzar. Luego, dependiendo de cómo haya instalado protoBUF, debe establecer la variable de entorno CMake_args en "-donnx_use_protobuf_shared_libs = on" o "-donnx_use_protobuf_shared_libs = off". Por ejemplo, es posible que deba ejecutar el siguiente comando:
Linux:
export CMAKE_ARGS= " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "Windows:
set CMAKE_ARGS = " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "El encendido/apagado depende de qué tipo de biblioteca ProtoBuf tenga. Las bibliotecas compartidas son archivos que terminan con*.dll/*. SO/*. Dylib. Las bibliotecas estáticas son archivos que terminan con *.a/ *. Lib. Esta opción depende de cómo obtenga su biblioteca ProtoBuf y de cómo se construyó. Y está desactivado por defecto. No necesita ejecutar los comandos anteriores si prefiere usar una biblioteca de ProtoBuf estática.
Si está construyendo ONNX desde la fuente, se recomienda que también construya ProtoBuf localmente como una biblioteca estática. La versión distribuida con Conda-Forge es una DLL, pero ONNX espera que sea una biblioteca estática. Building ProtoBuf localmente también le permite controlar la versión de ProtoBuf. La versión probada y recomendada es 3.21.12.
Las instrucciones en este ReadMe suponen que está utilizando Visual Studio. Se recomienda que ejecute todos los comandos desde un shell iniciado desde el "solicitante del sistema de herramientas nativas x64 para VS 2019" y mantenga el generador del sistema de compilación para cmake (p. Ej.
Puede obtener ProtoBuf ejecutando los siguientes comandos:
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=ReleaseLuego se construirá como una biblioteca estática e instalada en <topoBuf_install_dir>. Agregue el directorio bin (que contiene protoc.exe) a su ruta.
set CMAKE_PREFIX_PATH = < protobuf_install_dir > ; %CMAKE_PREFIX_PATH%Tenga en cuenta: si su protobuf_install_dir contiene espacios, no agregue comillas a su alrededor.
Alternativa: si no desea cambiar su ruta, puede configurar ONNX_PROTOC_EXECUTABLE en su lugar.
set CMAKE_ARGS = -DONNX_PROTOC_EXECUTABLE= < full_path_to_protoc.exe >Entonces puedes construir ONNX como:
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
Primero, debe instalar ProtoBuf. La versión mínima del compilador de protoBuf (protocas) requerida por ONNX es 3.6.1. Tenga en cuenta que las versiones de protocas antiguas pueden no funcionar con CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON .
Los usuarios de Ubuntu 20.04 (y más nuevos) pueden optar por instalar ProtoBuf a través de
apt-get install python3-pip python3-dev libprotobuf-dev protobuf-compiler En este caso, se requiere agregar -DONNX_USE_PROTOBUF_SHARED_LIBS=ON cmake_args en el paso de compilación ONNX.
Una forma más general es construirlo e instalarlo desde la fuente. Consulte las instrucciones a continuación para obtener más detalles.
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 installAquí "-DCMake_Position_independent_code = on" es crucial. Por defecto, las bibliotecas estáticas se construyen sin un indicador "-FPIC", no son un código independiente de posición. Pero las bibliotecas compartidas deben ser un código independiente de posición. Las extensiones de Python C/C ++ (como ONNX) son bibliotecas compartidas. Entonces, si una biblioteca estática no se construyó con "-FPIC", no se puede vincular a una biblioteca tan compartida.
Una vez que la compilación sea exitosa, actualice la ruta para incluir rutas de protoBuf.
Entonces puedes construir ONNX como:
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 installUna vez que la compilación sea exitosa, actualice la ruta para incluir rutas de protoBuf.
Entonces puedes construir ONNX como:
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 . -vDespués de la instalación, ejecute
python -c " import onnx "para verificarlo funciona.
Para la lista completa, consulte CMAKELISTS.txt
USE_MSVC_STATIC_RUNTIME debe ser 1 o 0, no encendido o apagado. Cuando se establece en 1 ONNX, enlaces estáticamente a la biblioteca de tiempo de ejecución. Valor predeterminado : USE_MSVC_STATIC_RUNTIME=0
DEBUG debe ser 0 o 1. Cuando se establece en 1 ONNX, está construido en modo de depuración. o las versiones de depuración de las dependencias, debe abrir el archivo CMAKELISTS y agregar una letra d al final de las líneas de nombre del paquete. Por ejemplo, NAMES protobuf-lite se convertirían en NAMES protobuf-lited . Predeterminado : Debug=0
ONNX_USE_PROTOBUF_SHARED_LIBS debe estar ON o OFF . Predeterminado : ONNX_USE_PROTOBUF_SHARED_LIBS=OFF USE_MSVC_STATIC_RUNTIME=0 ONNX_USE_PROTOBUF_SHARED_LIBS determina cómo ONNX enlaces a las bibliotecas de ProtoBuf.
ON - ONNX se vinculará dinámicamente a los libs compartidos de ProtoBuf, ProtoBuf_use_DLLS se definirá como se describe aquí.OFF , ONNX se unirá estáticamente a ProtoBuf. ONNX_USE_LITE_PROTO debe estar ON o OFF . Cuando se establece en ON ONNX usa lite ProtoBuf en lugar de ProtoBuf completo. Valor predeterminado : ONNX_USE_LITE_PROTO=OFF
ONNX_WERROR debe estar ON o OFF . Cuando se establecen ON advertencias, se tratan como errores. Valor predeterminado : ONNX_WERROR=OFF en compilaciones locales, ON CI y liberación de tuberías.
Nota: El comando import onnx no funciona desde el directorio de pago de origen; En este caso, verá ModuleNotFoundError: No module named 'onnx.onnx_cpp2py_export' . Cambie en otro directorio para corregir este error.
Si se encuentra con algún problema mientras construye ProTobuf como una biblioteca estática, asegúrese de que las bibliotecas de ProtoBuf compartidas, como LibProtobuf, no estén instaladas en su dispositivo o en el entorno de Conda. Si existen estas bibliotecas compartidas, elimínelas para construir ProtoBuf desde la fuente como una biblioteca estática, o omita la compilación de ProtoBuf de la fuente para usar la versión compartida directamente.
Si se encuentra con algún problema al construir ONNX desde la fuente, y su mensaje de error se lee, Could not find pythonXX.lib , asegúrese de tener versiones consistentes de Python para comandos comunes, como python y pip . Limpie todos los archivos de compilación existentes y reconstruya ONNX nuevamente.
ONNX usa Pytest como controlador de prueba. Para ejecutar pruebas, primero deberá instalar pytest :
pip install pytest nbvalDespués de instalar PyTest, use el siguiente comando para ejecutar pruebas.
pytestConsulte la Guía de contribuyentes para obtener instrucciones.
Licencia de Apache v2.0
ONNX Código de conducta de ONNX Open Source