Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como o ONNX (Open Neural Network Exchange) pode ajudar a otimizar a inferência de seus modelos 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 as funcionalidades do hardware. Essa tarefa se tornará complexa se você quiser obter um desempenho ideal em diferentes plataformas, como nuvem, borda, CPU ou GPU, pois cada plataforma tem diferentes funcionalidades e características. A complexidade aumentará 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 depois exportá-lo ou convertê-lo no 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 com suporte 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 as estruturas e opções de implantação disponíveis.
ONNX Runtime
O ONNX Runtime é um mecanismo de inferência de alto desempenho para a implantação de modelos do ONNX para produção. O runtime do ONNX é otimizado para a nuvem e borda e funciona no Linux, no Windows e no macOS. ONNX é escrito em C++, mas também tem APIs C, Python, C#, Java e JavaScript (Node.js) que você pode usar nesses ambientes.
O ONNX Runtime dá suporte a DNN (redes neurais profundas) e modelos tradicionais de machine learning. Ele se integra com aceleradores em hardwares diferentes, como TensorRT em GPUs NVIDIA, OpenVINO em processadores Intel e DirectML no Windows. Usando o Runtime ONNX, você pode se beneficiar das grandes otimizações de nível de produção, testes e aprimoramentos contínuos.
Serviços da Microsoft de grande escala, como Bing, Office e a IA do Azure, usam o runtime do ONNX. Embora os ganhos de desempenho dependam de muitos fatores, esses serviços da Microsoft têm uma média de um ganho de desempenho de 2x na CPU porque usam ONNX. O runtime do ONNX é executado no Azure Machine Learning e em outros produtos da Microsoft que dão suporte a cargas de trabalho de machine learning, incluindo:
- Windows. O ONNX Runtime é integrado ao Windows como parte do Windows Machine Learning e é executado em centenas de milhões de dispositivos.
- SQL do Azure. O SQL do Azure no Edge e a Instância Gerenciada de SQL do Azure usam o ONNX para executar a pontuação nativa nos dados.
- ML.NET. Para obter um exemplo, consulte Tutorial: Detectar objetos usando o ONNX em ML.NET.
Maneiras de obter modelos ONNX
Você pode obter modelos ONNX de várias maneiras:
- Treine um novo modelo ONNX no Azure Machine Learning ou use funcionalidades automatizadas de machine learning.
- Converta um modelo existente de outro formato em ONNX. Para obter mais informações, confira tutoriais do ONNX.
- Obter um modelo ONNX pré-treinado no ONNX Model Zoo.
- Gere um modelo ONNX personalizado do serviço de Visão Personalizada da IA do Azure.
Você pode representar muitos modelos como ONNX, incluindo classificação de imagem, detecção de objetos e modelos de processamento de texto. Se você não conseguir converter seu modelo com êxito, registre um problema do GitHub no repositório do conversor usado.
Implantação do modelo ONNX no Azure
Você pode implantar, gerenciar e monitorar os modelos do ONNX no Azure Machine Learning. Usando um fluxo de trabalho de implantação padrão de MLOps com o ONNX Runtime, você pode criar um endpoint REST hospedado na nuvem.
Pacotes do Python para o runtime do ONNX
Os pacotes Python para o ONNX Runtime de CPU e GPU estão disponíveis no PyPi.org. Certifique-se de verificar 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 runtime do ONNX no script do 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. Também é possível usar uma ferramenta de visualização como o Netron para exibir o modelo.
O runtime do ONNX 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 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ída vazia se desejar 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 runtime do ONNX, confira a documentação da API do Python.