ONNX e o Microsoft Azure Machine Learning

Saiba como o uso do Open Neural Network Exchange (ONNX) pode ajudar a otimizar a inferência do seu modelo de machine learning. A inferência ou pontuação de modelo é o processo de usar um modelo implantado para gerar previsões em dados de produção.

A otimização dos modelos de machine learning para inferência exige que você ajuste o modelo e a biblioteca de inferência para aproveitar ao máximo os recursos do hardware. Essa tarefa se torna complexa se você quiser obter o desempenho ideal em diferentes tipos de plataformas, como nuvem ou borda, CPU ou GPU, e assim por diante, já que cada plataforma tem funcionalidades e características diferentes. A complexidade aumenta se você tiver modelos de várias estruturas que precisam ser executados em diferentes plataformas. Pode ser demorado otimizar todas as diferentes combinações de estruturas e hardware. Portanto, uma solução útil é treinar seu modelo uma vez na sua estrutura preferida e, em seguida, executá-lo em qualquer lugar na nuvem ou na borda; é nessa solução que entra o ONNX.

O que é o ONNX?

A Microsoft e uma comunidade de parceiros criaram o ONNX como um padrão aberto para representar modelos de aprendizado de máquina. Modelos de muitas estruturas, incluindo TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet e MATLAB, podem ser exportados ou convertidos para o formato ONNX padrão. Uma vez que os modelos estejam no formato ONNX, eles podem ser executados em várias plataformas e dispositivos.

O ONNX Runtime é um mecanismo de inferência de alto desempenho para a implantação de modelos do ONNX para produção. Ele é otimizado para a nuvem e o edge e funciona no Linux, no Windows e no Mac. Embora o ONNX seja escrito em C++, ele também tem APIs em C, Python, C#, Java e JavaScript (Node.js) para uso em vários ambientes. O ONNX Runtime é dá suporte para redes neurais profundas (DNN) e modelos tradicionais de aprendizado de máquina, e se integra a aceleradores em diferentes hardwares, como o TensorRT em GPUs da Nvidia, o OpenVINO em processadores Intel e o DirectML no Windows. Usando o ONNX Runtime, você pode se beneficiar das grandes otimizações de nível de produção, testes e melhorias contínuas.

O ONNX Runtime é usado em serviços da Microsoft de grande escala, como Bing, Office e a IA do Azure. Embora os ganhos de desempenho dependam de muitos fatores, esses serviços da Microsoft relatam um ganho de desempenho médio de 2x na CPU. Além dos serviços do Azure Machine Learning, o ONNX Runtime também é executado em outros produtos que dão suporte a cargas de trabalho de Machine Learning, incluindo:

Diagrama de fluxo do ONNX mostrando o treinamento, os conversores e a implantação.

Como obter modelos ONNX

Você pode obter modelos ONNX de várias maneiras:

Muitos modelos, incluindo classificação de imagens, detecção de objetos e modelos de processamento de texto, podem ser representados como modelos ONNX. Se você tiver um problema com um modelo que não possa ser convertido com êxito, registre um problema no GitHub no repositório do conversor que você usou. Você pode continuar usando seu formato de modelo existente até que o problema seja resolvido.

Implantação do modelo ONNX no Azure

Com o serviço do Azure Machine Learning, é possível implantar, gerenciar e monitorar os modelos do ONNX. Usando o fluxo de trabalho padrão de implantação MLOps e o ONNX Runtime, você pode criar um ponto de extremidade REST hospedado na nuvem. Para obter exemplos práticos, consulte estes Jupyter notebooks.

Instalação e uso do ONNX Runtime com Python

Os pacotes Python para o ONNX Runtime estão disponíveis em PyPi.org (CPU e GPU). Certifique-se de revisar os requisitos do sistema antes da instalação.

Para instalar o ONNX Runtime para Python, use um dos seguintes comandos:

pip install onnxruntime          # CPU build
pip install onnxruntime-gpu   # GPU build

Para chamar o ONNX Runtime no script do Python, use:

import onnxruntime
session = onnxruntime.InferenceSession("path to model")

A documentação que acompanha o modelo geralmente informa as entradas e saídas para usar o modelo. Também é possível usar uma ferramenta de visualização como o Netron para exibir o modelo. O ONNX Runtime também permite que você consulte os metadados, as entradas e as saídas do modelo da seguinte forma:

session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name

Para realizar inferências em seu modelo, use run e passe a lista de saídas que deseja retornar (ou deixe a lista vazia se quiser todas elas) e um mapa dos valores de entrada. O resultado é uma lista das saídas.

results = session.run(["output1", "output2"], {
                      "input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})

Para obter a referência completa da API do Python, consulte os documentos de referência do ONNX Runtime.

Exemplos

Saiba mais sobre o ONNX ou colabore com o projeto:

Saiba mais sobre o ONNX Runtime ou contribua para o projeto: