O Open Neural Network Exchange (ONNX) é um ecossistema de código aberto e um formato padrão para representar modelos de aprendizado de máquina. Ele fornece uma representação comum para algoritmos de IA, permitindo que modelos sejam transferidos entre diferentes frameworks, ferramentas e plataformas de hardware. Governado por uma comunidade colaborativa de empresas de tecnologia e organizações de pesquisa, o ONNX visa simplificar o desenvolvimento e a implantação de redes neurais e outros sistemas de aprendizado de máquina.
O ONNX está disponível no GitHub, onde suas especificações, operadores e ferramentas são mantidos. O formato define um modelo de grafo de computação extensível, operadores integrados e tipos de dados padrão, focando principalmente em inferência (avaliação) em vez de treinamento. Ele usa Protocol Buffers como seu formato de contêiner, garantindo serialização eficiente e compatibilidade entre linguagens e sistemas.
História
O ONNX foi inicialmente desenvolvido sob o codinome "Toffee" pela equipe do PyTorch no Facebook. Em setembro de 2017, foi renomeado para ONNX e anunciado publicamente pelo Facebook e pela Microsoft. O anúncio posicionou o formato como uma forma de promover a interoperabilidade no campo em rápido crescimento do aprendizado profundo.
Nos meses seguintes ao lançamento, várias grandes empresas de tecnologia declararam apoio à iniciativa, incluindo IBM, Huawei, Intel, AMD, Arm e Qualcomm. Em outubro de 2017, a Microsoft expandiu seu compromisso ao anunciar que seu Cognitive Toolkit e a plataforma Project Brainwave se integrariam ao ONNX. No ano seguinte, o projeto ganhou apoio institucional mais amplo: em novembro de 2019, o ONNX foi aceito como um projeto graduado sob a Linux Foundation AI, um movimento que solidificou sua governança e status de código aberto. Em outubro de 2020, a Zetane Systems se juntou ao ecossistema ONNX como membro, ampliando ainda mais a comunidade.
Intenção
O principal objetivo do ONNX é permitir a interoperabilidade entre frameworks. Os desenvolvedores podem criar modelos em um framework, como PyTorch ou TensorFlow, e exportá-los para o formato ONNX para uso em outro ambiente. Essa capacidade é particularmente valiosa durante diferentes estágios do pipeline de desenvolvimento, incluindo treinamento, design de arquitetura, avaliação de modelos e implantação em dispositivos móveis ou embarcados. Ao desacoplar a representação do modelo de pilhas de software específicas, o ONNX reduz o aprisionamento ao fornecedor e simplifica a colaboração entre equipes.
Outro objetivo fundamental é a otimização compartilhada. O ONNX fornece uma representação comum que fornecedores de hardware e desenvolvedores de software podem usar para aplicar otimizações de desempenho a modelos de redes neurais em vários frameworks simultaneamente. Isso significa que uma única técnica de otimização, como fusão de operadores ou quantização, pode beneficiar modelos originados de diferentes fontes, acelerando a execução em GPUs, CPUs e aceleradores de IA especializados.
Formato e Estrutura
Os modelos ONNX são representados como grafos acíclicos direcionados (DAGs), onde cada nó corresponde a uma chamada de operador. Os nós têm entradas e saídas definidas, formando um grafo de fluxo de dados que descreve a computação. O grafo é acompanhado por metadados que documentam propriedades como versão do modelo, autor e informações de treinamento. Os operadores integrados são garantidos para estarem disponíveis em todos os frameworks compatíveis com ONNX, garantindo um nível básico de funcionalidade entre implementações.
O formato é extensível, permitindo que operadores personalizados e tipos de dados sejam adicionados para casos de uso especializados. Essa flexibilidade tornou o ONNX uma ponte entre frameworks de pesquisa como PyTorch e ambientes de produção, bem como entre dispositivos de borda e infraestrutura em nuvem.
Ecossistema e Adoção
O ONNX cresceu para incluir contribuições de uma ampla gama de organizações, incluindo provedores de nuvem, empresas de semicondutores e laboratórios de pesquisa. Esses parceiros desenvolveram ferramentas para converter modelos para e do ONNX, bem como motores de execução que executam grafos ONNX de forma eficiente. O ecossistema suporta frameworks importantes como PyTorch e TensorFlow, permitindo uma transição suave do treinamento para a implantação.
Os fornecedores de hardware usam o ONNX como um alvo comum para otimização. Ao aplicar ajustes de desempenho aos grafos ONNX, eles podem alcançar um público amplo de modelos sem adaptar soluções para cada framework. Isso tornou o ONNX um componente-chave na implantação de modelos em dispositivos que variam de telefones celulares a servidores em nuvem.
A Linux Foundation AI hospeda o projeto, fornecendo governança neutra em relação a fornecedores e promovendo a colaboração entre concorrentes. Essa estrutura espelha outras iniciativas de IA de código aberto e garante que o padrão evolua com contribuições de múltiplas partes interessadas.
Conteúdo e Estrutura Técnica
Em seu núcleo, o ONNX define um modelo de grafo de computação extensível. Cada grafo é uma lista de nós que formam uma estrutura acíclica, onde os nós têm entradas e saídas, e cada nó representa uma chamada a um operador. O grafo é documentado com metadados, que podem incluir informações sobre o propósito, versão e autor do modelo. Operadores integrados, como multiplicação de matrizes, convolução e funções de ativação, são especificados para estarem disponíveis em qualquer framework que suporte ONNX, garantindo consistência.
O formato de contêiner é Protocol Buffers, um mecanismo de serialização neutro em relação à linguagem que é compacto e amplamente suportado. Essa escolha facilita a troca de modelos entre diversos ambientes de programação, incluindo C++, Python e Java.
Fluxo de Trabalho Operacional
Um fluxo de trabalho típico do ONNX envolve treinar um modelo em um único framework, como PyTorch ou TensorFlow, e depois exportá-lo para o formato ONNX. Esse processo de exportação captura o grafo computacional do modelo, incluindo seus operadores e parâmetros, em um arquivo padronizado. Uma vez no formato ONNX, o modelo pode ser carregado em outros sistemas para teste, validação ou implantação em produção.
Como o ONNX é agnóstico em relação a hardware, o mesmo arquivo de modelo pode ser executado em diferentes ambientes de execução, incluindo CPUs, GPUs e chips de IA personalizados. Essa flexibilidade é essencial para aplicações modernas de IA, onde o treinamento pode ocorrer em clusters de alto desempenho, mas a inferência precisa ser executada em dispositivos de borda com recursos limitados. A representação comum também facilita o benchmarking e a comparação de modelos entre frameworks.
Ecossistema e Adoção
O ONNX foi adotado por uma ampla gama de organizações no setor de IA, incluindo provedores de nuvem, fabricantes de chips e desenvolvedores de software. Sua governança sob a Linux Foundation AI ajudou a garantir transparência e evolução orientada pela comunidade. As especificações do projeto são versionadas e mantidas publicamente, permitindo contribuições de pesquisadores e engenheiros em todo o mundo.
Ver Também
Categorias
- machine-learning
- open-source
- interoperabilidade
- redes-neurais