ONNX y Azure Machine Learning

Obtenga información sobre cómo usar Open Neural Network Exchange (ONNX) puede ayudar a optimizar la inferencia del modelo de Machine Learning. Inferencia o puntuación del modelo, es el proceso de usar un modelo implementado para generar predicciones en los datos de producción.

La optimización de los modelos de Machine Learning para la inferencia requiere que ajuste el modelo y la biblioteca de inferencia para aprovechar al máximo las funcionalidades de hardware. Esta tarea se vuelve compleja si desea obtener un rendimiento óptimo en diferentes tipos de plataformas, como la nube o el perímetro, la CPU o la GPU, etc., ya que cada plataforma tiene diferentes funcionalidades y características. La complejidad aumenta si tiene modelos de varios marcos que necesitan ejecutarse en distintas plataformas. Puede llevar mucho tiempo optimizar todas las diferentes combinaciones de marcos y hardware. Por lo tanto, una solución útil es entrenar el modelo una vez en el marco preferido y, a continuación, ejecutarlo en cualquier lugar de la nube o perimetral—de esta solución es donde entra ONNX.

¿Qué es ONNX?

Microsoft y una comunidad de asociados crearon ONNX como un estándar abierto para representar modelos de Machine Learning. Los modelos de varios marcos, incluidos TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet y MATLAB se pueden exportar o convertir al formato ONNX estándar. Una vez que los modelos están en formato ONNX, se pueden ejecutar en varias plataformas y dispositivos.

ONNX Runtime es un motor de inferencia de alto rendimiento que sirve para implementar modelos ONNX en la producción. Está optimizado tanto para la nube como para Edge y funciona en Linux, Windows y Mac. Aunque ONNX está escrito en C++, también tiene API de C, Python, C#, Java y JavaScript (Node.js) para su uso en muchos entornos. ONNX Runtime admite redes neuronales profundas (DNN) y modelos de Machine Learning automático tradicionales, y se integra con aceleradores en hardware diferente, como TensorRT en GPU de Nvidia, OpenVINO en procesadores Intel y DirectML en Windows. Al utilizar ONNX Runtime, puede beneficiarse de las amplias optimizaciones, pruebas y mejoras de producción.

ONNX Runtime se usa en servicios de Microsoft a gran escala, como Bing, Office y Azure AI. Aunque las mejoras de rendimiento dependen de muchos factores, estos servicios de Microsoft notifican un aumento medio de rendimiento de 2 veces en la CPU. Además de Azure Machine Learning Services, ONNX Runtime también se ejecuta en otros productos que admiten cargas de trabajo de aprendizaje automático, como:

Diagrama de flujo de ONNX que muestra el entrenamiento, los convertidores y la implementación.

Obtención de modelos ONNX

Puede obtener modelos de ONNX de varias maneras:

Muchos modelos, como la clasificación de imágenes, la detección de objetos y los modelos de procesamiento de texto, se pueden representar como modelos ONNX. Si tiene un problema con un modelo que no se puede convertir correctamente, registre un problema de GitHub en el repositorio del convertidor que usó. Puede seguir usando el formato de modelo existente hasta que se solucione el problema.

Implementación del modelo ONNX en Azure

Con Azure Machine Learning, puede implementar, administrar y supervisar sus modelos de ONNX. Mediante el flujo de trabajo de implementación MLOps estándar y ONNX Runtime, puede crear un punto de conexión REST hospedado en la nube. Para ver ejemplos prácticos, consulte estos Jupyter Notebooks.

Instalación y uso de ONNX Runtime con Python

Los paquetes de Python para ONNX Runtime están disponibles en PyPi.org (CPU y GPU). Asegúrese de revisar los requisitos del sistema antes de la instalación.

Para instalar ONNX Runtime para Python, use uno de los siguientes comandos:

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

Para llamar a ONNX Runtime en el script de Python, use lo siguiente:

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

La documentación que acompaña al modelo suele indicar las entradas y salidas para usar el modelo. También puede usar una herramienta de visualización como Netron para ver el modelo. ONNX Runtime también le permite consultar los metadatos, las entradas y las salidas del modelo de la siguiente manera:

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

Para realizar la inferencia en el modelo, use run y pase la lista de salidas que desea que se devuelvan (o deje la lista vacía si desea que todas ellas) y un mapa de los valores de entrada. El resultado es una lista de las salidas.

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

Para obtener la referencia completa de API de Python, vea la documentación de referencia de ONNX Runtime.

Ejemplos

Obtenga más información sobre ONNX o contribuya al proyecto:

Obtenga más información sobre ONNX Runtime o contribuya al proyecto: