El Open Neural Network Exchange (ONNX) es un ecosistema de código abierto y un formato estándar para representar modelos de aprendizaje automático. Proporciona una representación común para algoritmos de inteligencia artificial, lo que permite transferir modelos entre diferentes frameworks, plataformas de hardware y herramientas. Gobernado por una comunidad colaborativa de empresas tecnológicas y organizaciones de investigación, ONNX tiene como objetivo optimizar el desarrollo y la implementación de redes neuronales y otros sistemas de aprendizaje automático.
ONNX está disponible en GitHub, donde se mantienen sus especificaciones, operadores y herramientas. El formato define un modelo de grafo computacional extensible, operadores integrados y tipos de datos estándar, centrándose principalmente en la inferencia (evaluación) en lugar del entrenamiento. Utiliza Protocol Buffers como formato contenedor, lo que garantiza una serialización eficiente y compatibilidad entre lenguajes y sistemas.
Historia
ONNX fue desarrollado inicialmente bajo el nombre clave "Toffee" por el equipo de PyTorch en Facebook. En septiembre de 2017, fue renombrado a ONNX y anunciado públicamente por Facebook y Microsoft. El anuncio posicionó el formato como una forma de fomentar la interoperabilidad en el campo de rápido crecimiento del aprendizaje profundo.
En los meses posteriores al lanzamiento, varias empresas tecnológicas importantes declararon su apoyo a la iniciativa, incluyendo IBM, Huawei, Intel, AMD, Arm y Qualcomm. En octubre de 2017, Microsoft amplió su compromiso al anunciar que su Cognitive Toolkit y la plataforma Project Brainwave se integrarían con ONNX. Al año siguiente, el proyecto obtuvo un respaldo institucional más amplio: en noviembre de 2019, ONNX fue aceptado como proyecto de graduación bajo la Linux Foundation AI, una medida que consolidó su gobernanza y su estatus de código abierto. En octubre de 2020, Zetane Systems se unió al ecosistema ONNX como miembro, ampliando aún más la comunidad.
Propósito
El objetivo principal de ONNX es permitir la interoperabilidad entre frameworks. Los desarrolladores pueden crear modelos en un framework, como PyTorch o TensorFlow, y exportarlos al formato ONNX para utilizarlos en otro entorno. Esta capacidad es especialmente valiosa en las diferentes etapas del desarrollo, incluyendo el entrenamiento, el diseño de arquitecturas, la evaluación de modelos y la implementación en dispositivos móviles o integrados. Al desacoplar la representación del modelo de las pilas de software específicas, ONNX reduce la dependencia de un proveedor y simplifica la colaboración entre equipos.
Otro objetivo clave es la optimización compartida. ONNX proporciona una representación común que los proveedores de hardware y los desarrolladores de software pueden utilizar para aplicar optimizaciones de rendimiento a modelos de redes neuronales en múltiples frameworks simultáneamente. Esto significa que una única técnica de optimización, como la fusión de operadores o la cuantización, puede beneficiar a modelos de diferentes orígenes, acelerando la ejecución en GPUs, CPUs y aceleradores de IA especializados.
Formato y Estructura
Los modelos ONNX se representan como grafos acíclicos dirigidos (DAGs), donde cada nodo corresponde a una llamada a un operador. Los nodos tienen entradas y salidas definidas, formando un grafo de flujo de datos que describe el cálculo. El grafo está acompañado de metadatos que documentan propiedades como la versión del modelo, el autor e información sobre el entrenamiento. Se garantiza que los operadores integrados estén disponibles en todos los frameworks compatibles con ONNX, asegurando un nivel básico de funcionalidad en todas las implementaciones.
El formato es extensible, lo que permite añadir operadores personalizados y tipos de datos para casos de uso especializados. Esta flexibilidad ha convertido a ONNX en un puente entre los frameworks de investigación como PyTorch y los entornos de producción, así como entre los dispositivos de borde y la infraestructura en la nube.
Ecosistema y Adopción
ONNX ha crecido hasta incluir contribuciones de una amplia gama de organizaciones, incluyendo proveedores de nube, empresas de semiconductores y laboratorios de investigación. Estos socios han desarrollado herramientas para convertir modelos hacia y desde ONNX, así como motores de ejecución que procesan grafos ONNX de manera eficiente. El ecosistema es compatible con los principales frameworks, como PyTorch y TensorFlow, lo que permite una transición fluida del entrenamiento a la implementación.
Los proveedores de hardware utilizan ONNX como objetivo común para la optimización. Al aplicar ajustes de rendimiento a los grafos ONNX, pueden llegar a una amplia audiencia de modelos sin necesidad de adaptar soluciones para cada framework. Esto ha convertido a ONNX en un componente clave para la implementación de modelos en dispositivos que van desde teléfonos móviles hasta servidores en la nube.
La Linux Foundation AI aloja el proyecto, proporcionando una gobernanza neutral y fomentando la colaboración entre competidores. Esta estructura refleja otras iniciativas de código abierto y garantiza que el estándar evolucione con las aportaciones de múltiples partes interesadas.
Contenido y Estructura Técnica
En esencia, ONNX define un modelo de grafo computacional extensible. Cada grafo es una lista de nodos que forman una estructura acíclica, donde los nodos tienen entradas y salidas, y cada nodo representa una llamada a un operador. El grafo está documentado con metadatos, que pueden incluir información sobre el propósito del modelo, la versión y el autor. Se especifica que los operadores integrados, como la multiplicación de matrices, la convolución y las funciones de activación, estén disponibles en cualquier framework compatible con ONNX, garantizando la coherencia.
El formato contenedor es Protocol Buffers, un mecanismo de serialización independiente del lenguaje que es compacto y ampliamente compatible. Esta elección facilita el intercambio de modelos entre diversos entornos de programación, incluyendo C++, Python y Java.
Flujo de Trabajo Operativo
Un flujo de trabajo típico de ONNX implica entrenar un modelo en un único framework, como PyTorch o TensorFlow, y luego exportarlo al formato ONNX. Este proceso de exportación captura el grafo computacional del modelo, incluyendo sus operadores y parámetros, en un archivo estandarizado. Una vez en formato ONNX, el modelo puede cargarse en otros sistemas para pruebas, validación o implementación en producción.
Debido a que ONNX es independiente del hardware, el mismo archivo de modelo puede ejecutarse en diferentes entornos de ejecución, incluyendo CPUs, GPUs y chips de IA personalizados. Esta flexibilidad es esencial para las aplicaciones modernas de IA, donde el entrenamiento puede ocurrir en clústeres de alto rendimiento, pero la inferencia debe ejecutarse en dispositivos de borde con recursos limitados. La representación común también facilita la evaluación comparativa y la comparación de modelos entre diferentes frameworks.
Ecosistema y Adopción
ONNX ha sido adoptado por una amplia gama de organizaciones en la industria de la IA, incluyendo proveedores de nube, fabricantes de chips y desarrolladores de software. Su gobernanza bajo la Linux Foundation AI ha ayudado a garantizar la transparencia y una evolución impulsada por la comunidad. Las especificaciones del proyecto tienen versiones y se mantienen públicamente, lo que permite contribuciones de investigadores e ingenieros de todo el mundo.
Véase También
Categorías
- aprendizaje automático
- código abierto
- interoperabilidad
- redes neuronales