ONNX e Azure Machine Learning
Este artigo descreve como o Open Neural Network Exchange (ONNX) pode ajudar a otimizar a inferência de seus modelos 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 plataformas, como nuvem, borda, CPU ou GPU, porque cada plataforma tem recursos e características diferentes. A complexidade aumenta se você precisar executar modelos de várias estruturas em diferentes plataformas. Pode ser demorado otimizar todas as diferentes combinações de estruturas e hardware.
Uma solução útil é treinar seu modelo uma vez em sua estrutura preferida e, em seguida, exportá-lo ou convertê-lo para ONNX para que ele possa ser executado em qualquer lugar na nuvem ou borda. A Microsoft e uma comunidade de parceiros criaram o ONNX como um padrão aberto para representar modelos de aprendizado de máquina. Você pode exportar ou converter modelos de muitas estruturas para o formato ONNX padrão. As estruturas suportadas incluem TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet e MATLAB. Você pode executar modelos no formato ONNX em várias plataformas e dispositivos.
Este diagrama de fluxo ONNX mostra estruturas e opções de implantação disponíveis.
ONNX Runtime
O ONNX Runtime é um mecanismo de inferência de alto desempenho para implantar modelos ONNX na produção. O ONNX Runtime é otimizado para nuvem e borda e funciona em Linux, Windows e macOS. ONNX é escrito em C++, mas também tem APIs C, Python, C#, Java e JavaScript (Node.js) para usar nesses 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 de extensas otimizações de nível de produção, testes e melhorias contínuas.
Serviços Microsoft de alta escala, como Bing, Office e Azure AI, usam o ONNX Runtime. 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 usando ONNX. O ONNX Runtime é executado no Azure Machine Learning e em outros produtos da Microsoft que oferecem suporte a cargas de trabalho de aprendizado de máquina, incluindo:
- Janelas. O tempo de execução do ONNX é integrado ao Windows como parte do Windows Machine Learning e é executado em centenas de milhões de dispositivos.
- Azure SQL. O SQL Edge do Azure e a Instância Gerenciada SQL do Azure usam o ONNX para executar a pontuação nativa nos dados.
- ML.NET. Para obter um exemplo, consulte Tutorial: Detetar objetos usando ONNX no ML.NET.
Formas de obter modelos ONNX
Você pode obter modelos ONNX de várias maneiras:
- Treine um novo modelo ONNX no Azure Machine Learning ou use recursos automatizados de aprendizado de máquina.
- Converta um modelo existente de outro formato para ONNX. Para obter mais informações, consulte Tutoriais ONNX.
- Obtenha um modelo ONNX pré-treinado do ONNX Model Zoo.
- Gere um modelo ONNX personalizado a partir do serviço Azure AI Custom Vision.
Você pode representar muitos modelos como ONNX, incluindo classificação de imagem, deteção de objetos e modelos de processamento de texto. Se você não conseguir converter seu modelo com êxito, registre um problema no GitHub no repositório do conversor usado.
Implantação do modelo ONNX no Azure
Você pode implantar, gerenciar e monitorar seus modelos ONNX no Azure Machine Learning. Usando um fluxo de trabalho de implantação MLOps padrão com o ONNX Runtime, você pode criar um ponto de extremidade REST hospedado na nuvem.
Pacotes Python para ONNX Runtime
Pacotes Python para CPU e GPU ONNX Runtime estão disponíveis no PyPi.org. 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 o seguinte código:
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 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 você deseja retornar e um mapa dos valores de entrada. Deixe a lista de saídas vazia se quiser todas as saídas. 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 de tempo de execução ONNX, consulte a documentação da API do Python.