ONNX e Azure Machine Learning: Criar e acelerar ML modelos

Saiba como utilizar a Rede Neural Aberta Exchange (ONNX) pode ajudar a otimizar a inferência do seu modelo de aprendizagem automática. Inferência, ou pontuação de modelos, é a fase em que o modelo implantado é usado para previsão, mais frequentemente em dados de produção.

Otimizar modelos de machine learning para inferência (ou pontuação de modelos) é difícil, uma vez que é necessário sintonizar o modelo e a biblioteca de inferências para aproveitar ao máximo as capacidades de hardware. O problema torna-se extremamente difícil se quiser obter o melhor desempenho em diferentes tipos de plataformas (cloud/edge, CPU/GPU, etc.), uma vez que cada uma tem diferentes capacidades e características. A complexidade aumenta se tivermos modelos de uma variedade de quadros que precisam de ser executados em várias plataformas. É muito demorado para otimizar todas as diferentes combinações de estruturas e hardware. É necessária uma solução para treinar uma vez na sua estrutura preferida e correr em qualquer lugar da nuvem ou borda. É aqui que entra a ONNX.

A Microsoft e uma comunidade de parceiros criaram o ONNX como um padrão aberto para representar modelos de machine learning. Modelos de muitas estruturas , incluindo TensorFlow, PyTorch, SciKit-Learn, Keras, Chainer, MXNet, MATLAB e SparkML podem ser exportados ou convertidos para o formato ONNX padrão. Uma vez que os modelos estão no formato ONNX, podem ser executados em várias plataformas e dispositivos.

ONNX Runtime é um motor de inferência de alto desempenho para a implementação de modelos ONNX para a produção. É otimizado tanto para a nuvem como para a borda e funciona em Linux, Windows e Mac. Escrito em C++, também tem APIs C, Python, C#, Java e JavaScript (Node.js) para utilização em diversos ambientes. O ONNX Runtime suporta tanto os modelos de ML DNN como os tradicionais ML e integra-se com aceleradores em diferentes hardware, como o TensorRT em GPUs NVidia, OpenVINO em processadores Intel, DirectML em Windows, e muito mais. Ao utilizar o ONNX Runtime, pode beneficiar das extensas otimizações de nível de produção, testes e melhorias contínuas.

OnNX Runtime é usado em serviços Microsoft de alta escala, tais como Bing, Office e Azure Cognitive Services. Os ganhos de desempenho dependem de uma série de fatores, mas estes serviços Microsoft viram um ganho médio de desempenho de 2x no CPU. Além dos serviços de Azure Machine Learning, o ONNX Runtime também funciona em outros produtos que suportam Machine Learning cargas de trabalho, incluindo:

ONNX flow diagram showing training, converters, and deployment

Obtenha modelos ONNX

Pode obter modelos ONNX de várias formas:

Muitos modelos, incluindo classificação de imagem, deteção de objetos e processamento de texto podem ser representados como modelos ONNX. Se tiver um problema com um modelo que não possa ser convertido com sucesso, por favor preencha um problema no GitHub do respetivo conversor que utilizou. Pode continuar a utilizar o modelo de formato existente até que o problema seja abordado.

Implementar modelos ONNX em Azure

Com Azure Machine Learning, pode implementar, gerir e monitorizar os seus modelos ONNX. Utilizando o fluxo de trabalho de implementação padrão e o tempo de execução ONNX, pode criar um ponto final REST alojado na nuvem. Veja o exemplo dos cadernos jupyter no final deste artigo para experimentá-lo por si mesmo.

Instale e utilize o tempo de execução ONNX com python

Os pacotes Python para ONNX Runtime estão disponíveis em PyPi.org (CPU, GPU). Leia os requisitos do sistema antes da instalação.

Para instalar onNX Runtime para Python, utilize um dos seguintes comandos:

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

Para ligar para o tempo de execução ONNX no seu script Python, utilize:

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

A documentação que acompanha o modelo costuma dizer-lhe as entradas e saídas para a utilização do modelo. Também pode utilizar uma ferramenta de visualização como o Netron para visualizar o modelo. O tempo de execução ONNX também permite consultar os metadados, entradas e saídas do modelo:

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

Para inferênciar o seu modelo, use run e passe na lista de saídas que deseja devolvidas (deixe-as vazias se quiser todas) 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 python, consulte os docs de referência ONNX Runtime.

Exemplos

Consulte como usar-azureml/deployment/onnx , por exemplo, os cadernos Python que criam e implementam modelos ONNX.

Saiba como executar blocos de notas ao seguir o artigo Utilizar blocos de notas Jupyter para explorar este serviço.

As amostras para utilização noutras línguas podem ser encontradas na GitHub onNX Runtime.

Saiba mais

Saiba mais sobre ONNX ou contribua para o projeto:

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