ONNX e Azure Machine Learning

Saiba como o uso do Open Neural Network Exchange (ONNX) pode ajudar a otimizar a inferência do seu modelo de aprendizado de máquina. Inferência ou pontuação de modelo, é o processo de usar um modelo implantado para gerar previsões sobre dados de produção.

A otimização de modelos de aprendizado de máquina para inferência exige que você ajuste o modelo e a biblioteca de inferência para aproveitar ao máximo os recursos de 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 recursos e características diferentes. A complexidade aumenta se você tiver modelos de várias estruturas que precisam ser executados em plataformas diferentes. Pode ser demorado otimizar todas as diferentes combinações de estruturas e hardware. Portanto, uma solução útil é treinar seu modelo uma vez em sua estrutura preferida e, em seguida, executá-lo em qualquer lugar na nuvem ou borda — essa solução é onde o ONNX entra.

O que é 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 estão 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 implantar modelos ONNX na produção. Ele é otimizado para nuvem e borda e funciona em Linux, Windows e Mac. Embora o ONNX seja escrito em C++, ele também tem APIs C, Python, C#, Java e JavaScript (Node.js) para uso em muitos ambientes. O ONNX Runtime suporta redes neurais profundas (DNN) e modelos tradicionais de aprendizado de máquina, e integra-se com aceleradores em diferentes hardwares, como TensorRT em GPUs Nvidia, OpenVINO em processadores Intel e DirectML no Windows. Usando o ONNX Runtime, você pode se beneficiar das extensas otimizações de nível de produção, testes e melhorias contínuas.

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

  • Windows: O tempo de execução é integrado ao Windows como parte do Windows Machine Learning e é executado em centenas de milhões de dispositivos.
  • Família de produtos SQL do Azure: execute a pontuação nativa em dados no Azure SQL Edge e na Instância Gerenciada SQL do Azure.
  • ML.NET: Execute modelos ONNX no ML.NET.

Fluxograma ONNX mostrando treinamento, conversores e implantação.

Como obter modelos ONNX

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

  • Treine um novo modelo ONNX no Azure Machine Learning (conforme descrito na seção de exemplos deste artigo) ou usando recursos de aprendizado de máquina automatizados.
  • Converta um modelo existente de outro formato para ONNX, conforme mostrado nestes tutoriais.
  • Obtenha um modelo ONNX pré-treinado do ONNX Model Zoo.
  • Gere um modelo ONNX personalizado a partir do serviço Azure AI Custom Vision.

Muitos modelos, incluindo classificação de imagem, deteçã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 pode ser convertido com êxito, registre um problema do 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 Azure Machine Learning, você pode implantar, gerenciar e monitorar seus modelos ONNX. Usando o fluxo de trabalho de implantação MLOps padrão e o ONNX Runtime, você pode criar um ponto de extremidade REST hospedado na nuvem. Para obter exemplos práticos, consulte estes cadernos Jupyter.

Instalação e uso do ONNX Runtime com Python

Pacotes Python para 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 for Python, use um dos seguintes comandos:

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

Para chamar o ONNX Runtime em seu script 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. Você também pode usar uma ferramenta de visualização como o Netron para visualizar o modelo. O ONNX Runtime também permite consultar os metadados, entradas e saídas do modelo da seguinte maneira:

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

Para executar a inferência 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 contribua para o projeto:

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