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:
- Windows: el entorno de ejecución está integrado en Windows como parte de Windows Machine Learning y se ejecuta en cientos de millones de dispositivos.
- Familia de productos de Azure SQL: ejecutar la puntuación nativa en los datos de Azure SQL Edge y Azure SQL Managed Instance.
- ML.NET: ejecutar modelos ONNX en ML.NET.
Obtención de modelos ONNX
Puede obtener modelos de ONNX de varias maneras:
- Entrene un nuevo modelo ONNX en Azure Machine Learning (como se describe en la sección de ejemplos de este artículo) o mediante funcionalidades de aprendizaje automático automatizado.
- Convertir un modelo existente de otro formato a ONNX como se muestra en estos tutoriales.
- Obtenga un modelo ONNX previamente entrenado de la ONNX Model Zoo.
- Genere un modelo ONNX personalizado a partir del servicio Custom Vision de Azure AI.
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
- Siga las instrucciones del artículo Exploración de Azure Machine Learning con cuadernos de Jupyter para aprender a ejecutar cuadernos.
- Para obtener ejemplos que muestran el uso de ONNX en otros lenguajes, consulte el GitHub de ONNX Runtime.
Contenido relacionado
Obtenga más información sobre ONNX o contribuya al proyecto:
Obtenga más información sobre ONNX Runtime o contribuya al proyecto: