Conheça ONNX, ecossistema para interoperabilidade entre estruturas de machine learning

Com o crescimento da importância dos modelos de deep learning para a aplicação de soluções baseadas em inteligência artificial, começaram a surgir várias bibliotecas, cada uma com características específicas como campo de aplicação, utilização de recursos ou base de implementação. Essa pluralidade, ainda que bem-vinda num primeiro momento, logo se torna um problema, pois os modelos gerados e treinados nessas diferentes linguagens não são capazes de “conversar” entre si. Assim, desenvolvedores acabam ficando “presos” em uma única estrutura, que pode ter aplicação limitada.

Em 2017, o Facebook e a Microsoft se uniram para desenvolver um sistema que permitisse a troca de informações entre as estruturas de machine learning desenvolvidas pelas duas empresas, PyTorch e Caffe2. Essa iniciativa foi chamada de ONNX, sigla para Troca Aberta de Redes Neurais , e pronunciada ônix. Mais tarde, outras empresas se juntaram, como IBM, Huawei, Intel, AMD ARM, Amazon, Alibaba e Qualcomm. Atualmente, a iniciativa encontra crescente aceitação e incorporação entre as empresas mais importantes no campo da inteligência artificial. A ONNX tem dois objetivos principais: a interoperabilidade de estruturas, e a otimização compartilhada.

A interoperabilidade de estruturas permite que desenvolvedores troquem mais facilmente de estrutura através do uso padronizado de modelos de grafos computacionais, operadores built-in e tipos de dados. Cada grafo do fluxo de dados é estruturado como uma lista de nodos que formam um grafo não-cíclico. Os nodos contêm uma ou mais entradas e uma ou mais saídas. Cada nodo representa uma chamada para um operador. O grafo ainda permite a inclusão de metadados para vincular sua documentação. Os operadores são implementados externamente ao grafo, mas os operadores built-in são portáveis em relação à estrutura utilizada. Cada estrutura que suporte a iniciativa fica responsável por providenciar a implementação desses operadores nos tipos de dados aplicáveis. O resultado desse esforço é que os desenvolvedores têm maior liberdade para migrar de uma estrutura para outra, se considerarem alguma estrutura mais adequada para diferentes partes de um projeto, como por exemplo para treinamento e inferência. Assim, é mais rápido passar da etapa de desenvolvimento para produção.

A otimização compartilhada permite que as empresas fabricantes de hardware melhorem a performance de redes neurais artificiais em várias estruturas ao mesmo tempo, já que não precisam atender requisitos específicos. Em contrapartida, qualquer ferramenta que exporte modelos ONNX pode se beneficiar dos tempos de execução e das bibliotecas compatíveis com o formato, desenvolvidas para maximizar a performance quando executadas no melhor hardware disponível.

Por enquanto, a ONNX é compatível com as estruturas Caffe2, Chainer, Cognitive Toolkit da Microsoft, mxnet, Pytorch, PaddlePaddle, Matlab, SAS e Neural Network Libraries. Existem conversores disponíveis para Tensorflow, Keras, Apple CoreML, Scikit-Learn, XGBoost, LibSVM e ncnn.

Maiores informações sobre a iniciativa podem ser encontradas no site oficial. O projeto é colaborativo e possui uma página aberta no Github. Seu andamento pode ser acompanhado no Twitter e no Facebook.