
O Open Neural Network Exchange (ONNX) é um ecossistema aberto que capacita os desenvolvedores da IA a escolher as ferramentas certas à medida que seu projeto evolui. O ONNX fornece um formato de código aberto para modelos de IA, aprendizado profundo e ML tradicional. Ele define um modelo de gráfico de computação extensível, bem como definições de operadores internos e tipos de dados padrão. Atualmente, nos concentramos nos recursos necessários para inferir (pontuação).
O ONNX é amplamente suportado e pode ser encontrado em muitas estruturas, ferramentas e hardware. Permitir a interoperabilidade entre diferentes estruturas e otimizar o caminho da pesquisa para a produção ajuda a aumentar a velocidade da inovação na comunidade de IA. Convidamos a comunidade a se juntar a nós e evoluir ainda mais ONNX.
Onnx é um projeto comunitário e o modelo de governança aberta é descrito aqui. Incentivamos você a participar do esforço e contribuir com feedback, idéias e código. Você pode participar dos grupos de interesse especial e grupos de trabalho para moldar o futuro do ONNX.
Confira nosso guia de contribuição para começar.
Se você acha que algum operador deve ser adicionado à especificação ONNX, leia este documento.
Os horários das reuniões regulares do Comitê Diretor, os Grupos de Trabalho e os SIGs podem ser encontrados aqui
Os encontros da comunidade são realizados pelo menos uma vez por ano. O conteúdo de encontros anteriores da comunidade estão em:
Incentivamos você a abrir problemas ou usar o Slack (se você ainda não ingressou, use este link para ingressar no grupo) para mais discussões em tempo real.
Mantenha -se atualizado com as últimas notícias OnNX. [Facebook] [Twitter]
Um processo de roteiro ocorre todos os anos. Mais detalhes podem ser encontrados aqui
Os pacotes lançados pela ONNX são publicados no Pypi.
pip install onnx # or pip install onnx[reference] for optional reference implementation dependenciesOs pacotes semanais da ONNX são publicados no PYPI para permitir a experimentação e os testes antecipados.
O ONNX está na lista de manutenção do VCPKG, você pode usar facilmente o VCPKG para construí -lo e instalá -lo.
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat # For powershell
./bootstrap-vcpkg.sh # For bash
./vcpkg install onnxUma construção binária do ONNX está disponível na conda, em conda-forge:
conda install -c conda-forge onnx Antes de construir a partir da fonte, desinstale quaisquer versões existentes do Onnx pip uninstall onnx .
A versão C ++ 17 ou superior do compilador C ++ é necessária para criar ONNX a partir da fonte. Ainda assim, os usuários podem especificar sua própria versão CMAKE_CXX_STANDARD para criar ONNX.
Se você não possui o Protobuf instalado, o ONNX baixará e criará o Protobuf para o ONNX Build.
Ou você pode instalar manualmente as bibliotecas e ferramentas do Protobuf C/C ++ com a versão especificada antes de prosseguir. Em seguida, dependendo de como você instalou o Protobuf, você precisa definir a variável de ambiente Cmake_args como "-donnx_use_protobuf_shared_libs = on" ou "-donnx_use_protobuf_shared_libs = off". Por exemplo, pode ser necessário executar o seguinte comando:
Linux:
export CMAKE_ARGS= " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "Windows:
set CMAKE_ARGS = " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "O ON/OFF depende de que tipo de biblioteca Protobuf você possui. As bibliotecas compartilhadas são arquivos que terminam com*.dll/*. So/*. Dylib. As bibliotecas estáticas são arquivos que terminam com *.a/ *. Lib. Esta opção depende de como você obtém sua biblioteca Protobuf e como ela foi construída. E é padrão. Você não precisa executar os comandos acima se preferir usar uma biblioteca estática do Protobuf.
Se você estiver construindo o ONNX a partir da fonte, é recomendável que você também construa o Protobuf localmente como uma biblioteca estática. A versão distribuída com conda-forge é uma DLL, mas o ONNX espera que seja uma biblioteca estática. Construir Protobuf localmente também permite controlar a versão do Protobuf. A versão testada e recomendada é 3.21.12.
As instruções neste Readme assumem que você está usando o Visual Studio. Recomenda -se que você execute todos os comandos de um shell iniciado no "X64 Native Tools Command Prompt para vs 2019" e mantenha o gerador de sistema de construção para CMake (por exemplo, cmake -g "Visual Studio 16 2019") consistente durante a criação do Protobuf e do OnNX.
Você pode obter o Protobuf executando os seguintes 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=ReleaseEm seguida, será construído como uma biblioteca estática e instalado em <Protobuf_install_dir>. Adicione o diretório da bin (que contém Protoc.exe) ao seu caminho.
set CMAKE_PREFIX_PATH = < protobuf_install_dir > ; %CMAKE_PREFIX_PATH%Observação: se o seu protobuf_install_dir contiver espaços, não adicione aspas em torno dele.
Alternativa: se você não quiser alterar seu caminho, poderá definir ONNX_PROTOC_EXECONDABLE.
set CMAKE_ARGS = -DONNX_PROTOC_EXECUTABLE= < full_path_to_protoc.exe >Então você pode 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
Primeiro, você precisa instalar o Protobuf. A versão mínima do compilador Protobuf (Protoc) exigida pelo ONNX é 3.6.1. Observe que as versões antigas do Protoc pode não funcionar com CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON .
Ubuntu 20.04 (e mais recentes) os usuários podem optar por instalar o Protobuf via
apt-get install python3-pip python3-dev libprotobuf-dev protobuf-compiler Nesse caso, é necessário adicionar -DONNX_USE_PROTOBUF_SHARED_LIBS=ON a cmake_args na etapa de construção onnx.
Uma maneira mais geral é construí -lo e instalá -lo a partir da fonte. Veja as instruções abaixo para obter mais detalhes.
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 installAqui "-dcmake_position_independent_code = on" é crucial. Por padrão, as bibliotecas estáticas são construídas sem o sinalizador "-fpic", elas não são um código independente de posição. Mas bibliotecas compartilhadas devem ser um código independente de posição. As extensões Python C/C ++ (como ONNX) são bibliotecas compartilhadas. Portanto, se uma biblioteca estática não foi construída com "-fic", ela não pode ser vinculada a uma biblioteca tão compartilhada.
Depois que o Build for bem -sucedido, atualize o caminho para incluir os caminhos do Protobuf.
Então você pode 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 installDepois que o Build for bem -sucedido, atualize o caminho para incluir os caminhos do Protobuf.
Então você pode 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 . -vApós a instalação, execute
python -c " import onnx "Para verificar se funciona.
Para lista completa, consulte cmakelists.txt
USE_MSVC_STATIC_RUNTIME deve ser 1 ou 0, não ligado ou desativado. Quando definido como 1 ONNX vincula estaticamente à biblioteca de tempo de execução. Padrão : USE_MSVC_STATIC_RUNTIME=0
DEBUG deve ser 0 ou 1. Quando definido como 1 OnNX, é incorporado no modo de depuração. ou versões de depuração das dependências, você precisa abrir o arquivo cmakelists e anexar uma letra d no final das linhas de nome do pacote. Por exemplo, NAMES protobuf-lite se tornariam NAMES protobuf-lited . Padrão : Debug=0
ONNX_USE_PROTOBUF_SHARED_LIBS deve estar ON ou OFF . Padrão : ONNX_USE_PROTOBUF_SHARED_LIBS=OFF USE_MSVC_STATIC_RUNTIME=0 ONNX_USE_PROTOBUF_SHARED_LIBS determina como o ONNX links para as bibliotecas Protobuf.
ON - ONNX vinculará dinamicamente as LIBs compartilhadas do Protobuf, o protobuf_use_dlls será definido conforme descrito aqui.OFF - ONNX vinculará estaticamente ao Protobuf. ONNX_USE_LITE_PROTO deve estar ON ou OFF . Quando definido como ON , usa o Lite Protobuf em vez de protobuf completo. Padrão : ONNX_USE_LITE_PROTO=OFF
ONNX_WERROR deve estar ON ou OFF . Quando definido em ON , são tratados como erros. Padrão : ONNX_WERROR=OFF nas compilações locais, ON CI e libere pipelines.
Nota: o comando import onnx não funciona no diretório de checkout de origem; Nesse caso, você verá ModuleNotFoundError: No module named 'onnx.onnx_cpp2py_export' . Mude para outro diretório para corrigir esse erro.
Se você tiver algum problema ao criar o Protobuf como uma biblioteca estática, verifique se as bibliotecas do Protobuf compartilhadas, como o LibProtobuf, não estão instaladas no seu dispositivo ou no ambiente do CONDA. Se essas bibliotecas compartilhadas existirem, remova -as para criar o Protobuf a partir da fonte como uma biblioteca estática ou pule a construção do protobuf da fonte para usar a versão compartilhada diretamente.
Se você tiver problemas durante a criação de ONNX a partir da fonte e sua mensagem de erro lê, Could not find pythonXX.lib , verifique se você possui versões Python consistentes para comandos comuns, como python e pip . Limpe todos os arquivos de construção existentes e reconstrua novamente o ONNX.
Onnx usa o pytest como driver de teste. Para executar testes, você precisará primeiro instalar pytest :
pip install pytest nbvalDepois de instalar o Pytest, use o seguinte comando para executar testes.
pytestConfira o guia colaborador para obter instruções.
Licença Apache v2.0
Código de Conduta Onnx Open Source