En el campo en rápida evolución de la inteligencia artificial (IA) y el aprendizaje automático (AM), 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 PyTorchy luego desplegarlo utilizando otro marco o motor de inferencia, como TensorFlow o tiempos de ejecución especializados como ONNX Runtime. Esta interoperabilidad agiliza el camino de la investigación a la producción, fomentando la colaboración y la flexibilidad dentro del 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 en el ciclo de vida del 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 bloques de construcción de redes neuronales) y un formato de archivo estándar (.onnx
), ONNX garantiza que la estructura y los parámetros aprendidos de un modelo (pesas) se representan de forma coherente. Esto es especialmente beneficioso para los usuarios de Ultralytics YOLO modelos, ya que Ultralytics proporciona métodos sencillos para exportar modelos al formato ONNX. Esta capacidad de exportación permite a los usuarios tomar modelos como YOLOv8 o el último YOLO11 y desplegarlos 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 mediante 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 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 permite operadores personalizados, lo que permite a los marcos de trabajo y a los proveedores de hardware admitir funcionalidades especializadas.
- Ecosistema y herramientas: ONNX está rodeado de un rico ecosistema, que incluye bibliotecas para convertir modelos de varios marcos de trabajo (como PyTorch o TensorFlow), herramientas para visualizar y depurar los gráficos ONNX , y tiempos de ejecución como ONNX Runtime, optimizado para la inferencia de alto rendimiento en diferentes hardware (CPU, GPUaceleradores 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 por ordenador en dispositivos Edge: Un desarrollador entrena un modelo de detección de objetos, como un modeloYOLO Ultralytics , utilizando PyTorch en un servidor potente 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 . Este archivo ONNX puede entonces optimizarse utilizando herramientas como NVIDIA TensorRT u OpenVINO deIntel y desplegarse para una inferencia eficiente y en tiempo real directamente en el dispositivo. Esta flexibilidad se pone de manifiesto en varias opciones de despliegue de modelos. Puedes explorar las soluciones deUltralytics para ver ejemplos en distintos sectores.
- Colaboración y despliegue entre marcos: Un equipo de investigación desarrolla una novedosa arquitectura de modelos 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 del modelo.
ONNX vs. Conceptos relacionados
Es importante distinguir ONNX de los términos relacionados:
- Formatos específicos del marco: Formatos como el de PyTorch
.pt
/.pth
o SavedModel de TensorFlow son nativos de sus respectivos marcos de trabajo. 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 de serialización de modelos PyTorch , que a veces se utiliza como alternativa o precursor de la exportación ONNX . - Motores de inferencia/tiempos de ejecución: Herramientas como ONNX Runtime, TensorRTy OpenVINO son bibliotecas de software diseñadas para ejecutar modelos ML de forma eficiente. Muchos de estos motores pueden consumir modelos ONNX , a menudo aplicando optimizaciones adicionales (como la cuantización o la 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 ), permitiendo a los desarrolladores elegir las mejores herramientas para la formación y el despliegue sin verse constreñidos por las limitaciones del marco. Plataformas como Ultralytics HUB aprovechan estos formatos para simplificar el camino desde el desarrollo del modelo hasta su aplicación en el mundo real.