ONNX y Azure Machine Learning
En este artículo se describe cómo Open Neural Network Exchange (ONNX) puede ayudar a optimizar la inferencia de los modelos de aprendizaje automático. La inferencia o la 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 aprendizaje automático para la inferencia requiere que ajuste el modelo y la biblioteca de inferencia para aprovechar 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 necesita ejecutar modelos desde varios marcos en distintas plataformas. Puede llevar mucho tiempo optimizar todas las diferentes combinaciones de marcos y hardware.
Una solución útil es entrenar el modelo una vez en el marco preferido y, a continuación, exportarlo o convertirlo a ONNX para que pueda ejecutarse en cualquier lugar de la nube o el perímetro. Microsoft y una comunidad de asociados crearon ONNX como un estándar abierto para representar modelos de Machine Learning. Puede exportar o convertir modelos de muchos marcos al formato ONNX estándar. Entre los marcos admitidos se incluyen TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet y MATLAB. Puede ejecutar modelos en formato ONNX en varias plataformas y dispositivos.
En este diagrama de flujo de ONNX se muestran los marcos y las opciones de implementación disponibles.
ONNX Runtime
ONNX Runtime es un motor de inferencia de alto rendimiento que sirve para implementar modelos ONNX en la producción. ONNX Runtime está optimizado para la nube y el perímetro, y funciona en Linux, Windows y macOS. ONNX está escrito en C++, pero también tiene API de C, Python, C#, Java y JavaScript (Node.js) para usarlas en esos 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. Con ONNX Runtime, puede beneficiarse de amplias optimizaciones de nivel de producción, pruebas y mejoras en curso.
Los servicios de Microsoft a gran escala, como Bing, Office y Azure AI, usan ONNX Runtime. Aunque las mejoras de rendimiento dependen de muchos factores, estos servicios de Microsoft notifican una ganancia media de rendimiento de 2 veces en la CPU mediante ONNX. ONNX Runtime se ejecuta en Azure Machine Learning y otros productos de Microsoft que admiten cargas de trabajo de aprendizaje automático, entre las que se incluyen:
- Windows. El entorno de ejecución de ONNX está integrado en Windows como parte de Windows Machine Learning y se ejecuta en cientos de millones de dispositivos.
- Azure SQL. Azure SQL Edge y Instancia administrada de Azure SQL usan ONNX para ejecutar la puntuación nativa en los datos.
- ML.NET. Para obtener un ejemplo, consulte Tutorial: Detección de objetos mediante ONNX en ML.NET.
Formas de obtener modelos ONNX
Puede obtener modelos de ONNX de varias maneras:
- Entrenar un nuevo modelo ONNX en Azure Machine Learning o usar funcionalidades de aprendizaje automático automatizadas.
- Convierta un modelo existente de otro formato a ONNX. Para obtener más información, consulte Tutoriales de ONNX.
- 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.
Puede representar muchos modelos como ONNX, incluida la clasificación de imágenes, la detección de objetos y los modelos de procesamiento de texto. Si no puede convertir el modelo correctamente, registre un problema de GitHub en el repositorio del convertidor que usó.
Implementación del modelo ONNX en Azure
Puede implementar, administrar y supervisar los modelos de ONNX en Azure Machine Learning. Con un flujo de trabajo de implementación MLOps estándar con ONNX Runtime, puede crear un punto de conexión REST hospedado en la nube.
Paquetes de Python para ONNX Runtime
Los paquetes de Python para CPU y GPU ONNX Runtime están disponibles en PyPi.org. 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 el código 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 permite consultar los metadatos, las entradas y las salidas del modelo, como se indica a continuación:
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 devolver y un mapa de los valores de entrada. Deje la lista de resultados vacía si desea todas las salidas. 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 la API en ONNX Runtime, consulte la documentación de la API de Python.