Mojo el nuevo lenguaje de programación de Inteligencia Artificial, creado por Modular
Para comenzar está claro que debemos primero saber quienes están detrás de este impresionante proyecto ó proyectos según lo leas, esta es apenas una parte, para el resto os invito a conocer Modular.
Modular son líderes mundiales en infraestructura de Inteligencia Artificial(IA), han contribuido para muchas empresas y se ha dado cuenta que hay que reinventar la forma de crear la IA, solo nos enteramos de ChatGPT, etc, etc, pero la verdad es que detrás hay una industria muy enfocada en redes neuronales y aprendizaje profundo y a nosotros los mortales solo nos llega la capa superficial en los medios de comunicacion, una de las cosas que tiene Modular como referente es su visión además del equipazo de ingenieros entre los mas reconocidos son Chris Lattner y Tim Davis, ellos evidentemente trabajando en las grandes tecnologicas de EEUU, se conocen en Google y llevan tiempo con temas de IA, y la sensación es que la infraestructura frena el crecimiento de esta nueva tecnologia, es compleja y demasiado fragmentada.
Más sobre Chris Lattner es ni más ni menos quien fundó y amplió la infraestructura de compilador LLVM, Clang, MLIR, CloudTPU, ha creado IA en varias empresas como Apple, Google, SiFive y Tesla, además de crear el lenguaje Swift con el que Apple permite a desarrolladores de todo el mundo diseñar y crear apliaciones para iOS, MacOS, Watch, TVOS, etc..
Tim Davis es un emprendedor que ha ayudado a construir, encontrar y escalar gran parte de la infaarestructrura de Machine Learning para Google Brain, y TensorFlow, compiladores ( XLA y MLIR ) y tiempos de ejecución para servidor (CPU/GPU/TPU) y TF Lite (móvil/micro/ Web), Android ML y NNAPI , infraestructura de modelo grande y OSS para miles de millones de usuarios y dispositivos.
Vamos dos pedasos de cracks, y con ellos un equipo absolutamente impresionante de ingenieros, entre otros muchos perfiles, que por cierto buscan gente para trabajar con ellos, así que apor ellos chavales.
El día 2 de Mayo han hecho su presentación oficial después que mas o menos aa principios del 2022 comenzara este proyecto, la verdad con tanto talento les ha sido muy rapido llegar a esta primera iteración y vamos que calidad, por entender las piezas que planten hay una que me ha llamado la atención ya que me encantan los lenguajes de programación y es la base de este articulo.
Primero hablaré sobre cómo la modularidad te facilita la implementación de tus cargas de trabajo de IA con una eficiencia y una escala incomparables. Cuando lo hagas, aprovecha sin problemas la mejor plataforma de hardware para tu caso de uso particular, pero otro lado muy importante es que los sistemas de IA existentes realmente luchan en la extensibilidad en la programación.
La infraestructura actual tiende a funcionar. Bien en ciertos momentos o caminos felices, pero rompe con nuevas Innovaciones. El resultado es que las empresas más vanguardistas del mundo tardan varios meses en pasar los modelos de investigación a la producción, ya que se ven obligadas a reescribir de forma rutinaria grandes porciones de sus modelos y hablando de lenguajes de programación para IA, tenemos a nuestro archi conocido Python un lenguaje que exprime al maximo el rendimiento de las maquinas, pero solo para cumplir con los objetivos de latencia y costo estas empreas terminan teniendo que contratar ingenieros de kernel/nucleo super costosos para escribir operaciones personalizadas, solo para terminar encerrados en una sola plataforma e incluso luego agregar estas nuevas operaciones a sus modelos tensorflow o PyTorch, vamos es una pesadilla de usabilidad, ahora tener una base de código que luego se divide en varios idiomas termina impactando la colaboración y la productividad del equipo.
La gran pregunta es, ¿Por qué no es esto más fácil?, ¿Qué comienza con python?
Python un hermoso y poderoso lenguaje de alto nivel completo con una sintaxis limpia y simple en un ecosistema expansivo de bibliotecas, pero python tiene algunos desafíos bien conocidos:
- No lo lleva a la enorme escalabilidad o rendimiento que exigen las cargas de trabajo de modelos más grandes del mundo.
- Tampoco te lleva a dispositivos Edge como teléfonos móviles y microcontroladores. Y esto crea un problema de fragmentación único para la IA. Es decir, abre una brecha entre las bases de código de investigación y producción porque a los investigadores y científicos de datos les encanta escribir modelos en python, pero los ingenieros de producción quieren implementar estos modelos y lenguajes escalables de alto rendimiento. Pero hay un problema aún mayor para la industria de la IA, la falta de rendimiento de Python, combinada con la necesidad de cómputo de la IA, en realidad convierte a la IA en un problema fragmentado de tres mundos.
Pero cómo funcionan los frameworks de trabajo de IA modernos como tensorflow y Pythorch.
Estos frameworks tienen una API de python para el desarrollo de modelos, pero bajo las tripas, en realidad son sistemas C ++ que llaman a núcleos/ kernel de hardware como CUDA, que es una plataforma informática paralela y un modelo de programación desarrollado por NVIDIA para la informática general en unidades de procesamiento gráfico (GPU).
Con CUDA, los desarrolladores pueden acelerar drásticamente las aplicaciones informáticas aprovechando la potencia de las GPU.
Esto divide claramente el sistema del modelo y el código de hardware y dificulta que los ingenieros trabajen en estas capas. CUDA solo es compatible con uno de los muchos aceleradores de la industria, su TPUS (Tensor Processing Unit, diseñado por Google para redes neuronales y. machine learning), IPUS (Unidades de procesamiento de infraestructura de Intel), MPUS(unidades de microprocesadores, trabajo multiple, base de los super ordenadores) y muchos más sistemas de hardware específicos de dominio público que se desarrollan todos los días.
Así que este no es en realidad un problema de tres mundos. Es un problema de tamaño del ecosistema de hardware. Ahora bien nos encanta Python, pero se basa en C++ y bibliotecas de hardware para las cosas realmente pesadas y ahí es donde surgen las limitaciones, esto me recuerda cuando desarrollaba app’s para iOS en Objective — C y llegó en su momento Swift y lo cambió absolutamente todo.
¿Qué pasaría si nos dijeran que podemos hacer todo el sistema modelo y el código de hardware en un lenguaje escalable? Es por eso que Modular e propuso reinventar Python y han construido Mojo.
Es un nuevo lenguaje de programación que amplía a python para volverlo aún más mágico, Mojo proporciona todas las maravillosas partes de python que aman los investigadores y agrega las características de programación de sistemas que le faltan, vamos una maravilla. Y al crear Mojo se han aprendido de los otros idiomas, está claro (si está el tío que ha creado Swift y migrado de Objective-C los frameworks a Swift, pues imaginemoslo). Y aqui es en donde entra Chris Lattner y nos pone un poderoso y magico nuevo lenguaje para los desarrolladores de IA llamado Mojo.
En palabras de Chris Lattner, Python es realmente genial. Simplemente depende mucho de C++, porque le faltan algunas cosas que lo ayudarán a escalar hacia abajo a la programación de bajo nivel.
Comenzando con lo básico, tanto Python como Mojo te permite agregar tipos a tu programa para detectar errores más rápido. Pero Mojo se basó en una pila de compilador completamente nueva que incluye la infraestructura del compilador MLIR debido a que esto recompensa su trabajo al agregar anotaciones de tipo, lo que fue un rendimiento significativamente mejor.
Yendo más allá Mojo te permite encontrar extracciones de costo de memoria cero, lo que incluye tomar el control del almacenamiento asignando valores en línea en sus estructuras y eliminando direcciones a la memoria innecesarias.
Por supuesto, los sistemas de bajo nivel no tienen que ser inseguros para la memoria. Así que se han adoptado las mejores ideas de otros sistemas existentes, pero siempre con la visión del aprendizaje y su uso. Mojo también facilita la escritura de algoritmos que se ejecutan contra una amplia gama de hardware diferente mediante el uso de metaprogramación para parametrizar a ellos. Por ejemplo, código que funciona en sistemas con muchas líneas vectoriales diferentes, pero los sistemas modernos son complicados. ¿Cómo sabes cuál es el tamaño correcto para usar? Mojo puede ayudarte a incorporar potentes funciones de ajuste automático para seleccionar los mejores parámetros para un algoritmo y una ejecución altamente eficiente en una plataforma determinada.
Esto es súper poderoso cuando se trabaja con situaciones más complejas como mosaicos de memoria o aceleradores avanzados.
Ahora, estos son solo aspectos destacados y hay mucho más para explorar, incluido el soporte completo para las herramientas del desarrollador, además de las nuevas funciones. Mojo lleva a Python más allá del rendimiento de un solo subproceso. Mojo no tiene un bloqueo de intérprete global como Python, por lo que puede ejecutar cosas de manera eficiente en paralelo accediendo por completo a todas las características de su CPU (La Unidad central de procesamiento (CPU) es el componente principal de una computadora que actúa como su “centro de control”. La CPU, también conocida como el procesador “central” o “principal”, es un conjunto complejo de circuitos electrónicos que ejecutan el sistema operativo y las aplicaciones de la máquina).
De hecho, al acceder por completo a todas las características de su CPU. Mojo es 35 000 veces más rápido que Python cuando escribe algoritmos numéricos porque puede usar todas las funciones de su CPU y no impone una sobrecarga adicional.
Mojo también es bastante interesante debido al compilador MLR. Mojo es el único lenguaje creado para el compilador MLR y Mojo desbloquea todo su poder.
MLR es importante porque le permite tener acceso a todo el hardware del mundo. Esto incluye cosas como CPU y GPU y aceleradores de aprendizaje automático. Y significa que tiene acceso completo a sus características exóticas como núcleos de tensor e instrucciones AMX y todos los números extraños. Siguen agregando, pero yendo más allá, obtienes acceso incluso a cosas raras, como FPGA (Field Programable Gate Array) y ordenadores cuánticas, e incluso te permiten diseñar silicio personalizado, whatt??.
Con Mojo obtienes acceso al ecosistema completo de Python, incluidos todos sus paquetes. Eso significa que puede usar sus bibliotecas favoritas como numpy, pandas, Matt, plotlib todo y más directamente en Mojo.
Pero es posible que te preguntes qué significa esto para la IA y qué pasa con la pila modular en particular. Bueno, los usuarios pueden aprovechar Mojo para ampliar sus modelos. Puede agregar una operación de procesamiento previo y posterior. Puede reemplazar las operaciones existentes con las personalizadas.
Mojo te permite personalizar toda la pila modular agregando el gráfico de fusiones del kernel para tus funciones, todo sin tener que volver a compilar el framework o escribir código C ++. Se hs desbloqueado una extensibilidad increíble al devolver la programabilidad a la IA. Pero en lugar de contarles todo esto ahora, debemos conocer a un asesor / socio de Modular.com Jeremy Howard, es un científico de datos, empresario y profesor.
Es cofundador de fast.ai , donde imparte cursos de introducción redes neuronales, desarrolla software y realiza investigaciones en el área del aprendizaje profundo.
Anteriormente, fundó y dirigió Fastmail , Optimal Decisions Group y Enlitic. Fue presidente y científico jefe de Kaggle, vamos otro meta crack, pero aquí lo dejamos y damos el salto a la programción IA en próximos articulos, a disfrutar la semana chavales.