Home
Login
microsoft/onnxruntime

ONNX Runtime: un acelerador de inferencia y entrenamiento de aprendizaje automático de alto rendimiento y multiplataforma.

MITC++ 16.9kmicrosoft Last Updated: 2025-06-14
https://github.com/microsoft/onnxruntime

ONNX Runtime (ORT)

Introducción

ONNX Runtime (ORT) es un acelerador de inferencia de aprendizaje automático multiplataforma, diseñado para acelerar el proceso de inferencia de modelos ONNX (Open Neural Network Exchange). Desarrollado y de código abierto por Microsoft, soporta múltiples plataformas de hardware y sistemas operativos, y proporciona capacidades de inferencia de alto rendimiento.

Objetivos principales:

  • Acelerar la inferencia de modelos ONNX: Mejorar la velocidad de inferencia de los modelos ONNX mediante la optimización del grafo de ejecución, la utilización de la aceleración por hardware, etc.
  • Soporte multiplataforma: Soporte para sistemas operativos como Windows, Linux, macOS, y plataformas de hardware como CPU, GPU, FPGA, etc.
  • Fácil integración: Proporciona APIs en varios lenguajes de programación como C/C++, Python, Java, C#, para facilitar la integración en diversas aplicaciones.
  • Alto rendimiento: Lograr un alto rendimiento de inferencia a través de diversas técnicas de optimización, como la optimización de grafos, la fusión de operadores, la optimización de memoria, etc.
  • Escalabilidad: Permite a los usuarios definir operadores y proveedores de ejecución personalizados para soportar nuevas plataformas de hardware y algoritmos.

Características principales

  • Soporte de modelos ONNX: Soporte completo del estándar ONNX, puede cargar y ejecutar modelos que cumplen con la especificación ONNX.
  • Múltiples proveedores de ejecución (Execution Providers, EPs):
    • CPU EP: Utiliza la CPU para la inferencia, soporta múltiples optimizaciones del conjunto de instrucciones de la CPU (por ejemplo, AVX2, AVX512).
    • CUDA EP: Utiliza la GPU NVIDIA para la inferencia, aprovechando la aceleración CUDA.
    • TensorRT EP: Utiliza NVIDIA TensorRT para la inferencia, optimizando aún más el rendimiento de la GPU.
    • OpenVINO EP: Utiliza el kit de herramientas Intel OpenVINO para la inferencia, optimizando el rendimiento de la CPU y la GPU de Intel.
    • DirectML EP: Utiliza la API DirectML de Windows para la inferencia, aprovechando los recursos de la GPU en Windows.
    • CoreML EP: Utiliza el framework CoreML de Apple para la inferencia, optimizando el rendimiento en dispositivos Apple.
    • Otros EP: También soporta otras plataformas de hardware, como ARM NN, ACL, etc.
  • Optimización de grafos: Optimiza automáticamente el grafo del modelo ONNX, por ejemplo, la fusión de operadores, el plegado de constantes, la eliminación de nodos, etc., reduciendo la cantidad de cálculo y la ocupación de memoria.
  • Fusión de operadores: Combina múltiples operadores en un solo operador, reduciendo la sobrecarga de comunicación entre operadores.
  • Soporte de cuantificación: Soporta la cuantificación de modelos, convirtiendo modelos de punto flotante en modelos enteros, reduciendo el tamaño del modelo y la cantidad de cálculo, mejorando la velocidad de inferencia.
  • Soporte de formas dinámicas: Soporta modelos ONNX con formas dinámicas, puede procesar datos de entrada de diferentes tamaños.
  • Opciones de sesión: Proporciona una amplia gama de opciones de sesión, que pueden controlar varios aspectos del proceso de inferencia, como el número de hilos, la asignación de memoria, el nivel de optimización del grafo, etc.
  • Herramientas de depuración: Proporciona herramientas de depuración que pueden ayudar a los usuarios a analizar los cuellos de botella del rendimiento de los modelos ONNX.
  • Análisis de rendimiento: Proporciona herramientas de análisis de rendimiento que pueden ayudar a los usuarios a comprender las métricas de rendimiento de los modelos ONNX, como el tiempo de inferencia, la ocupación de memoria, etc.
  • Inferencia distribuida: Soporta la inferencia distribuida, puede desplegar modelos ONNX en múltiples dispositivos para la inferencia, mejorando el rendimiento de la inferencia.

Arquitectura

La arquitectura de ONNX Runtime incluye principalmente las siguientes partes:

  1. Frontend: Responsable de cargar el modelo ONNX y convertirlo a la representación interna de ONNX Runtime.
  2. Optimizador de grafos (Graph Optimizer): Responsable de optimizar el grafo del modelo ONNX, por ejemplo, la fusión de operadores, el plegado de constantes, etc.
  3. Ejecutor (Executor): Responsable de ejecutar el grafo del modelo ONNX, asignando operadores a diferentes plataformas de hardware para su ejecución según los diferentes proveedores de ejecución.
  4. Proveedor de ejecución (Execution Provider): Responsable de ejecutar operadores en una plataforma de hardware específica, como CPU, GPU, FPGA, etc.
  5. Sesión (Session): Responsable de gestionar el ciclo de vida del modelo ONNX, incluyendo la carga del modelo, la optimización del modelo, la ejecución del modelo, la liberación de recursos, etc.

Modo de empleo

  1. Instalar ONNX Runtime: ONNX Runtime se puede instalar a través de pip, por ejemplo: pip install onnxruntime (versión CPU) o pip install onnxruntime-gpu (versión GPU).
  2. Cargar el modelo ONNX: Utilice onnxruntime.InferenceSession para cargar el modelo ONNX.
  3. Preparar los datos de entrada: Convierta los datos de entrada a un formato que ONNX Runtime pueda aceptar, por ejemplo, un array de NumPy.
  4. Ejecutar la inferencia: Utilice el método InferenceSession.run() para ejecutar la inferencia y obtener los resultados de salida.

Código de ejemplo (Python):

import onnxruntime
import numpy as np

# Cargar el modelo ONNX
session = onnxruntime.InferenceSession("model.onnx")

# Obtener la información de entrada y salida
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name

# Preparar los datos de entrada
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)

# Ejecutar la inferencia
output_data = session.run([output_name], {input_name: input_data})

# Imprimir los resultados de salida
print(output_data)

Escenarios de aplicación

  • Reconocimiento de imágenes: Acelerar la inferencia de tareas como la clasificación de imágenes, la detección de objetos, la segmentación de imágenes, etc.
  • Procesamiento del lenguaje natural: Acelerar la inferencia de tareas como la clasificación de texto, la traducción automática, la generación de texto, etc.
  • Reconocimiento de voz: Acelerar la inferencia de tareas como el reconocimiento de voz, la síntesis de voz, etc.
  • Sistemas de recomendación: Acelerar la inferencia de modelos de recomendación, mejorando la eficiencia de la recomendación.
  • Otras tareas de aprendizaje automático: Puede acelerar la inferencia de varias tareas de aprendizaje automático, como la regresión, la agrupación, etc.

Ventajas

  • Alto rendimiento: Lograr un alto rendimiento de inferencia a través de diversas técnicas de optimización.
  • Multiplataforma: Soporta múltiples sistemas operativos y plataformas de hardware.
  • Fácil integración: Proporciona APIs en varios lenguajes de programación.
  • Flexible y escalable: Permite a los usuarios definir operadores y proveedores de ejecución personalizados.
  • Comunidad activa: Cuenta con una comunidad activa, donde se puede obtener soporte técnico e intercambiar experiencias.

Limitaciones

  • Dependencia del formato de modelo ONNX: Solo puede ejecutar modelos en formato ONNX, es necesario convertir otros formatos de modelo a formato ONNX.
  • El soporte para algunos operadores puede ser incompleto: Para algunos operadores especiales, el soporte de ONNX Runtime puede ser incompleto, lo que requiere que los usuarios definan operadores personalizados.
  • Requiere cierta configuración y ajuste: Para obtener el mejor rendimiento, puede ser necesario realizar cierta configuración y ajuste de ONNX Runtime.

Resumen

ONNX Runtime es un potente acelerador de inferencia de aprendizaje automático que puede ayudar a los usuarios a acelerar el proceso de inferencia de modelos ONNX, mejorando el rendimiento de las aplicaciones. Tiene ventajas como alto rendimiento, multiplataforma, fácil integración, flexible y escalable, y es adecuado para varias tareas de aprendizaje automático.

Para obtener toda la información detallada, consulte el sitio web oficial (https://github.com/microsoft/onnxruntime)