¿Qué es ONNX?
ONNX es un formato abierto para representar modelos de Deep learning (aprendizaje profundo).
Un poco de historia
Hace ya mucho tiempo un standard hizo que el mundo de las computadoras cambiara para siempre. Sin embargo, no fue Microsoft el que inició este camino sino IBM. Decidieron usar una arquitectura de hardware abierta, de modo que otros fabricantes pudieran producir y vender componentes, periféricos y software compatible sin la compra de licencias. Ese fue el inicio de una nueva era de estándares que junto al poder que generaron estas empresas, sepultó las computadoras personales más vendidas hasta ese momento como la TRS-80.
Pero esto también fue apalancado por el API del MS DOS, más conocido como MS-DOS API. La mayoría de las llamadas al DOS API invocan la interrupción de software 21h (INT 21h). Llamando la INT 21h con un número de subfunción se podían invocar varios servicios del DOS entre los que estaban la entrada por teclado, salida por pantalla, acceso a archivos de disco, ejecutar programas, la asignación de memoria, y otras cosas. Esto hizo mucho más fácil el desarrollo y la compatibilidad del software.
La oportunidad que se abría para otros proveedores de hardware y de software en ese momento, hizo que, sistemas operativos como el CP/M (Control Program for Microcomputers) o incluso el OS/2 de IBM fueran historia pasada.
Un poco más cerca podemos ver estándares como el ODBC, SQL, MDX, AMQP, Kerberos, y tantos otros. Quizá el más emblemático hoy en día sea el SO Android.
ONNX un estándar para Deep Learning
Es claro que quien consigue más adeptos y peso específico en el mercado va a lograr imponer las ideas y en eso Microsoft tiene amplia experiencia. Pero en esta oportunidad no está solo.
ONNX está desarrollado y respaldado por una comunidad. Facebook, AWS, y Microsoft anunciaron el 6 de diciembre de 2017 junto a socios de la comunidad la primera versión productiva de ONNX 1.0.
Previamente, en septiembre, estos gigantes del mercado habían lanzado una primera versión del formato abierto de intercambio de redes neuronales (ONNX) con un llamado a la comunidad para que se sume y ayude a crear un estándar abierto, más flexible e interoperable de Deep Learning.
El objetivo de ONNX, es que los desarrolladores de Inteligencia Artificial pueden mover sus modelos más fácilmente entre herramientas de Deep Learning y elegir la combinación que sea mejor para ellos. Es claro que aquí hay una gran apuesta de los grandes jugadores de la industria en hacer creer que sus servicios de Inteligencia Artificial son los mejores y vender sus servicios en la nube.
El objetivo es crear un ecosistema de inteligencia artificial que ofrezca a los desarrolladores la libertad para innovar y poder transferir los modelos fácilmente, proporcionando la capacidad de combinar herramientas.
No solo los tres gigantes Facebook, AWS, y Microsoft están en esto. Desde su lanzamiento, AMD, ARM, IBM, Intel, Huawei, NVIDIA, y Qualcomm han anunciado su apoyo al estándar abierto ONNX.
ONNX V 1.0
ONNX ya tiene soporte disponible en varios de los frameworks más importantes del mercado como Caffe2 de Facebook, CNTK (Cognitive Toolkit) de Microsoft, Apache MXNet, PyTorch y TensorRT de NVIDIA. También hay convertidores desarrollados por la comunidad para otros proyectos como TensorFlow de Google y CoreML de Apple .
Desde el anuncio inicial en septiembre se han incorporado muchas mejoras y sugerencias de la comunidad. La versión actual de ONNX está diseñada para trabajar con aplicaciones de visión. Sin embargo, ONNX también incluye el perfil ONNX-ML que brinda soporte para el aprendizaje automático (Machine Learning) además del aprendizaje profundo. Las versiones futuras versiones van a ampliar ONNX para representar otros escenarios.
Modelos ONNX en Cognitive Toolkit
Se puede importar modelos ONNX en Cognitive Toolkit o exportar modelos al formato ONNX para lo cual es necesario tener la última versión de Cognitive Toolkit .
Se pueden probar los tutoriales para importar y exportar modelos ONNX.
Importing models from ONNX to CNTK
Exporting models from CNTK to ONNX
0 Comentarios