ONNX (Intercambio abierto de redes neuronales)
Descubra cómo ONNX mejora la portabilidad y la interoperabilidad de los modelos de IA, lo que permite un despliegue perfecto de los modelos YOLO de Ultralytics en diversas plataformas.
En el campo de la inteligencia artificial (IA) y el aprendizaje automático (AM), en rápida evolución, es crucial trasladar modelos entre distintas herramientas y plataformas de forma eficiente. ONNX (Open Neural Network Exchange) aborda este reto proporcionando un formato de código abierto diseñado específicamente para modelos de IA. Actúa como un traductor universal, permitiendo a los desarrolladores entrenar un modelo en un marco, como PyTorch, y luego desplegarlo utilizando otro marco o motor de inferencia, como TensorFlow o tiempos de ejecución especializados como ONNX Runtime. Esta interoperabilidad agiliza el paso de la investigación a la producción, fomentando la colaboración y la flexibilidad en el ecosistema de la IA. ONNX fue desarrollado inicialmente por Facebook AI Research y Microsoft Research, y ahora es un próspero proyecto comunitario.
Relevancia de ONNX
El valor fundamental de ONNX reside en promover portabilidad e interoperabilidad dentro del ciclo de vida de desarrollo de la IA. En lugar de quedar atrapados en el ecosistema de un marco específico, los desarrolladores pueden aprovechar ONNX para mover modelos libremente entre diferentes herramientas y plataformas de hardware. Al definir un conjunto común de operadores (los componentes básicos de redes neuronales) y un formato de archivo estándar (.onnx
), ONNX garantiza que la estructura de un modelo y los parámetros aprendidos (pesos) se representan de forma coherente. Esto es especialmente beneficioso para los usuarios de Ultralytics YOLO modelos, ya que Ultralytics ofrece métodos sencillos para exportación de modelos al formato ONNX. Esta capacidad de exportación permite a los usuarios tomar modelos como YOLOv8 o el último YOLO11 y desplegarlas en una amplia variedad de plataformas de hardware y software, a menudo utilizando motores de inferencia para mejorar el rendimiento y aceleración por hardware.
Cómo funciona ONNX
ONNX logra la interoperabilidad a través de varias características técnicas clave:
- Representación común de modelos: ONNX define un conjunto estándar de operadores de grafos computacionales, como funciones de convolución o activación, y un sistema de tipos de datos común. Cuando un modelo de aprendizaje profundo se convierte a ONNX, su arquitectura y sus parámetros se traducen a esta representación compartida.
- Estructura basada en grafos: Los modelos en ONNX se representan como grafos computacionales. Los nodos del gráfico representan operaciones (como la multiplicación de matrices o la aplicación de una función ReLU), mientras que las aristas representan el flujo de datos (tensores) entre estas operaciones. Esta estructura de grafos es común a muchos marcos de ML, lo que facilita la conversión.
- Sistema de versiones: ONNX mantiene versiones para sus conjuntos de operadores (opsets). Esto garantiza la compatibilidad con versiones anteriores, permitiendo que los modelos creados con opsets antiguos sigan funcionando en tiempos de ejecución más recientes que admitan esas versiones.
- Extensibilidad: Aunque ONNX define un conjunto básico de operadores, también admite operadores personalizados, lo que permite a los marcos y proveedores de hardware admitir funcionalidades especializadas.
- Ecosistema y herramientas: Un rico ecosistema rodea a ONNX, incluyendo librerías para convertir modelos de varios marcos (como PyTorch o TensorFlow), herramientas para visualizar y depurar gráficos ONNX, y tiempos de ejecución como ONNX Runtime optimizado para la inferencia de alto rendimiento a través de diferentes hardware(CPU, GPU, aceleradores especializados).
Aplicaciones de ONNX
ONNX sirve de puente crucial entre los entornos de formación de modelos y los diversos objetivos de despliegue. He aquí dos ejemplos concretos:
- Despliegue de modelos de visión artificial en dispositivos Edge: Un desarrollador entrena un modelo de detección de objetos, como el modelo YOLO de Ultralytics, utilizando PyTorch en un potente servidor con GPU. Para implementarlo en dispositivos per iféricos con recursos limitados (como una cámara inteligente o un dron), exporta el modelo al formato ONNX. A continuación, este archivo ONNX puede optimizarse con herramientas como NVIDIA TensorRT u OpenVINO de Intel y desplegarse directamente en el dispositivo para una inferencia eficiente y en tiempo real. Esta flexibilidad se pone de manifiesto en varias opciones de despliegue de modelos. Puede explorar las soluciones de Ultralytics para ver ejemplos en diferentes industrias.
- Colaboración y despliegue entre frameworks: Un equipo de investigación desarrolla una arquitectura de modelo novedosa utilizando TensorFlow. Otro equipo quiere integrar este modelo en una aplicación existente construida con PyTorch. Al exportar el modelo TensorFlow a ONNX, el segundo equipo puede cargarlo y utilizarlo fácilmente dentro de su entorno PyTorch o desplegarlo utilizando el ONNX Runtime estandarizado a través de diferentes configuraciones de servidor(en la nube o en las instalaciones) sin necesidad del marco TensorFlow original. Esto facilita el servicio y la integración de modelos.
ONNX frente a conceptos relacionados
Es importante distinguir ONNX de los términos relacionados:
- Formatos específicos del marco: Formatos como PyTorch
.pt
/.pth
o Modelo guardado de TensorFlow son nativos de sus respectivos frameworks. ONNX actúa como intermediario, permitiendo la conversión entre estos formatos o el despliegue a través de un tiempo de ejecución común. TorchScript es otro formato para la serialización de modelos PyTorch, a veces utilizado como alternativa o precursor de la exportación ONNX. - Motores de inferencia/tiempos de ejecución: Herramientas como ONNX Runtime, TensorRT y OpenVINO son bibliotecas de software diseñadas para ejecutar modelos ML de forma eficiente. Muchos de estos motores pueden consumir modelos de ONNX, a menudo aplicando optimizaciones adicionales (como cuantificación o fusión de grafos) para objetivos de hardware específicos. ONNX proporciona la entrada de modelo estandarizada para estos motores.
En resumen, ONNX es un estándar vital para garantizar la flexibilidad y la interoperabilidad en la canalización de las operaciones de aprendizaje automático (MLOps ), lo que permite a los desarrolladores elegir las mejores herramientas para la formación y el despliegue sin verse restringidos por las limitaciones del marco. Plataformas como Ultralytics HUB aprovechan estos formatos para simplificar el camino desde el desarrollo de modelos hasta su aplicación en el mundo real.